728x90
반응형

유니티 45

AA(23) - 다양한 형태의 몬스터 공격 구현

전에 만든 플레이어 피격 테스트용 오브젝트를 몬스터 자식으로 할당합니다. void Targerting() { float targetRadius = 1.5f; float targetRange = 3f; RaycastHit[] rayHits = Physics.SphereCastAll(transform.position, targetRadius, transform.forward, targetRange, LayerMask.GetMask("Player")); if(rayHits.Length > 0 && !isAttack) { StartCoroutine(Attack()); } } IEnumerator Attack() //정지를 한 뒤 애니메이션과 공격범위 활성화 { isChase = false; isAttack = ..

AA(22) - 캐릭터 피격 구현

void OnTriggerEnter(Collider other) { if(other.tag == "Item") { Item item = other.GetComponent(); switch (item.type) { case Item.Type.Ammo: ammo += item.value; if (ammo > maxAmmo) ammo = maxAmmo; //최대치 초과시 수치는 최대값과 동일 break; case Item.Type.Coin: coin += item.value; if (coin > maxCoin) coin = maxCoin; break; case Item.Type.Heart: health += item.value; if (health > maxHealth) health = maxHealth; b..

AA(21) - 플레이어 추격하는 몬스터 AI 구현

기본 몬스터로 사용할 오브젝트를 생성합니다. 리지드바디와 박스콜라이더, 에너미 스크립트를 추가합니다. mat = GetComponentInChildren().material; 매쉬랜더러가 오브젝트의 하위 오브젝트에 스킨매쉬랜더러로 있기 때문에 Enemy 스크립트에서 수정해줍니다. 몬스터 오브젝트의 태그와 레이어를 Enemy로 수정하고 Nav Mesh Agent 컴포넌트를 추가합니다. public Transform target; //추적할 대상의 좌표 NavMeshAgent nav; void Awake() { nav = GetComponent(); } void Update() { nav.SetDestination(target.position);//도착할 목표 위치 지정 함수 } Enemy스크립트에 usin..

AA(20) - 수류탄 구현

수류탄 오브젝트를 만들고 물리력을 위해 리지드바디와 콜라이더, 잔상을 남기기 위해 트레일 렌더러 컴포넌트를 추가합니다. void Grenade() { if (hasGrenades == 0) return; if (gDown && !isReload && !isSwap) { Ray ray = follwCamera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(ray, out rayHit, 100)) { Vector3 nextVec = rayHit.point - transform.position; nextVec.y = throwpower; GameObject instantGrenade = Instantiate(grena..

AA(18) - 공격 방향 설정

기존에는 캐릭터가 마지막으로 이동한 방향, 바라보는 방향을 기준으로 공격을 했습니다. void Turn() { //키보드에 의한 회전 transform.LookAt(transform.position + moveVec); //이동하는 방향으로 바라보기 //마우스에 의한 회전 if (fDown) { Ray ray = follwCamera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(ray, out rayHit, 100)) { Vector3 nextVec = rayHit.point - transform.position; nextVec.y = 0; transform.LookAt(transform.position + n..

AA(17) - 원거리무기 재장전

fDown = Input.GetButton("Fire1"); 공격을 클릭시가 아니라 클릭을 유지하면 계속 반복하도록 변경합니다. public int maxAmmo; //전체 탄약 public int curAmmo; //현재 탄약 재장전을 위해 변수를 선언합니다. 재장전 키를 추가합니다. 재장전 애니메이션과 트리거를 설정합니다. bool rDown; //재장전 bool isReload; //재장전 플래그변수 fDown = Input.GetButtonDown("Reload"); void Reload() { if (equipWeapon == null) return; if (equipWeapon.type == Weapon.Type.Melee) return; if (ammo == 0) return; if(rDow..

AA(16) - 원거리무기 공격 구현

Trail Renderer을 이용해 날아가는 총알을 만들고 탄피는 에셋스토어에서 받은 뒤 리지드바디와 박스콜라이더를 추가해줍니다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Bullet : MonoBehaviour { public int damage; void OnCollisionEnter(Collision collision) //충돌 로직 작성 { if (collision.gameObject.tag == "Floor") { Destroy(gameObject, 3); } else if (collision.gameObject.tag == "Wall") { Destroy(gameObjec..

AA(15) - 근접무기 공격 구현

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Weapon : MonoBehaviour { public enum Type { Melee, Range }; public Type type; public int damage; public float rate; public BoxCollider meleeArea; public TrailRenderer trailEffect; } 스크립트를 새로 만들어서 변수들을 선언해줍니다. 근접무기 장착 시 활성화되는 오브젝트에 스크립트를 드래그&드롭해줍니다. 공격 시 이펙트를 위한 Trail Renderer 컴포넌트를 추가해 설정해줍니다. public void..

728x90
반응형