Patrick's Devlog

[Unity Project] 일정 범위 안 적 이동 본문

Project/Unity Engine

[Unity Project] 일정 범위 안 적 이동

Patrick_ 2022. 7. 19. 17:42

메인 캐릭터가 일정범위 안에 적 안으로 들어오면 적이 메인 캐릭터에게 이동하는 코드이다. SlimeEnemy.cs에서 추가하면 된다. 아래의 코드를 우선 넣어준다. 

    private void UpdateTarget()
    {
        Collider[] colliders = Physics.OverlapSphere(transform.position, 6f);
        // 중점과 반지름으로 가상의 원을 생성해 추출하려는 반경 이내에 들어와있는 콜라이더들을
        // 반환하는 함수
        
        if (colliders.Length > 0) // 콜라이더의 개수가 1개 이상이면
        {
            for (int i = 0; i < colliders.Length; i++)
            {
                if (colliders[i].tag == "Player") // 콜라이더의 태그가 플레이어면
                {
                    target = colliders[i].gameObject.transform; // 타겟 위치 저장
                    break;
                }
                else target = null;
            }
        }

    }

함수를 생성하였으면 Start()에 아래의 코드를 추가해준다.

    void Start()
    {
        ...
        InvokeRepeating("UpdateTarget", 0f, 0.2f); 
        // 0.2초마다 타깃을 체크하는 함수
    }

이러한 함수를 추가해주었으면, 타깃을 발견했을 때 이동하는 함수를 작성한다. 

    private void TargetConfirm()
    {
        if (target != null && !deadFlag) // 타겟이 존재하고 적이 죽지 않았을 때
        {
            Vector3 direction = transform.position - target.position;
            transform.Translate(direction.normalized * enemySpeed * Time.deltaTime);
        }
    }

적이 죽을때도 자꾸 따라오는 현상이 발생해 플래그를 통해 멈춰주었다. 마지막으로 이 함수를 Update()에 추가해주면 끝난다. 

결과 화면

애니메이션도 제대로 넣지 않았고, 피격받았을 때 등 여러 처리를 하지 않아 부자연스럽다. 이부분은 차차 변경해나갈 예정이다. 


참고 문헌

https://unitybeginner.tistory.com/14

 

유니티 반경안에 접근한 타겟 추적하기

안녕하세요 UnityBeginner입니다. 이번 글에선 오브젝트 반경에 접근하는 타깃을 추적하는 몇 가지 기본적인 방식에 대해 알아보겠습니다. 씬뷰 다음과 같이 오브젝트 3가지를 배치했습니다.

unitybeginner.tistory.com

https://a-game-developer0724.tistory.com/54

 

[Unity 3D] Physics.OverlapSphere (주변 콜라이더 추출하기)

Physics.OverlapSphere - 중점과 반지름으로 가상의 원을 만들어 추출하려는 반경 이내에 들어와 있는 콜라이더들을 반환하는 함수 함수의 반환 값은 Collider 컴포넌트의 배열로 넘어옵니다. 또한 Overlap

a-game-developer0724.tistory.com