Unity

· Unity
일반 몬스터들은 오브젝트 풀링을 활용한 총알을 몇 번 쏘기도 전에 플레이어에 의해 destroy 되어서 문제를 느끼지 못하고 있었는데, 보스 몬스터를 구현하다 보니 오브젝트 풀링으로 구현한 총알이 자꾸 활성화 되자마자 다시 사라지는 문제가 생겼다. 문제의 원인은 큐에 이미 있는 총알을 다시 큐에 집어넣으려는 시도 때문에 발생했다. public void FindPlayer() { if(!dead && Time.time >= lastAttackTime + timeBetAttack) { Collider[] other = Physics.OverlapSphere(transform.position, 9f, whatIsTarget); if(other.Length >=1) { LivingEntity attackTarg..
· Unity
private IEnumerator Generate() { while(true) { Vector3 enemyPosition = FindClosestEnemy().transform.position; GameObject earthQuake = earthQuakeQ.Dequeue(); //큐에서 뽑아서 earthQuake.SetActive(true); //활성화 하고 //earthQuake.transform.localEulerAngles =new Vector3(0,enemyPosition.y,0); //y축만 가장 가까운 적의 방향으로 조절 -> x,z축만 가져와서 바라보게 하기. Vector3 targetPosition = new Vector3(enemyPosition.x,earthQuake.transfor..
· Unity
이런 아이템을 구현했다. 불로 지지는 공격이다보니, 불이 닿는 범위에 있는 모든 적에게 지속 데미지를 주어야한다. 광역 데미지 구현에 많이 사용하던 OverlapSphere, 혹은 직사각형 그리기 등으로는 범위를 제대로 지정하기가 까다로울 것 같아 파티클 프리팹에 콜라이더를 달아 구현하려고 했다. private void OnTriggerStay(Collider other) { // 트리거 충돌한 상대방 게임 오브젝트가 추적 대상이라면 공격 실행 if( Time.time >= lastAttackTime + timeBetAttack) { LivingEntity attackTarget = other.GetComponent(); if(attackTarget!=null) { if (attackTarget.tag ..
· Unity
public으로 선언하면, 다른 객체에서도 자유롭게 get과 set이 모두 가능하다는 의미이다. 그와 동시에 인스펙터 창에서 public으로 선언된 변수 혹은 기타 어떤 것의 값을 수정할 수 있다. 여기서 주의해야 할 점은 public으로 선언한 변수의 값은, 스크립트보다 인스펙터 창에서 설정한 값이 우선 적용된다는 것이다. 따라서 인스펙터 창에서 어떤 변수 값을 10으로 해놨으면, 스크립트에서 아무리 10000으로 바꾸고 난리를 쳐도 10으로 적용된다. 게임 매니저에서 쓰는 유일한 변수 하나를 스크립트에서 고쳐도 계속 오류가 뜨길래 한참 해맸다...^^ 심지어 저번에 비슷한 일을 겪어서 퍼블릭은 인스펙터에서 수정하자고 다짐했었는데 그새 까먹어서 기록해둔다. 귀찮아서 웬만하면 public으로 선언했는데,..
· Unity
개발중인 로그라이크 게임에 강화 기능을 구현중이었다. 원래 기획은, 각 아이템마다 3개의 강화 테크가 있고, 매 웨이브가 끝날 때마다 게임 진행동안 획득한 재화를 통해 각 테크별로 강화를 구매할 수 있는 방식이었다. 웨이브를 마칠 때마다 아이템 하나 지급과 함께, 보유 중인 아이템 중에서 3개가 랜덤으로 강화 가능 아이템으로 등장하고 그 중 하나를 선택하면 다시 강화 테크 3개가 등장(데미지 증가, 딜레이 감소, 투사체 추가 등)하여 재화를 주고 구매하는 것이다. 강화 단계는 또 따로 있어서 3개의 테크 모두 강화 단계를 +N강 하는것이 가능하다. 이렇게 구현하다보니 처음 생각했던 것보다 재화 관련하여 밸런스 맞출 것이 훨씬 많아지고, 강화 단계마다 텍스트와 효과를 모조리 구현하는 동시에 또 강화를 어디..
· Unity
뱀파이어 서바이벌에서 가장 가까운 적에게 발사되는 아이템이 있다. 그것과 같은 아이템을 3D로 구현하고자 한다. GameObject FindClosestEnemy() { GameObject[] gos; gos = GameObject.FindGameObjectsWithTag("Enemy"); GameObject closest = null; float distance = Mathf.Infinity; Vector3 position = transform.position; foreach (GameObject go in gos) { Vector3 diff = go.transform.position - position; float curDistance = diff.sqrMagnitude; if (curDistance..
Yannoo
'Unity' 카테고리의 글 목록