유니티 2D 플레이어 추적 - yuniti 2D peulleieo chujeog

셋팅이 끝났으니 스크립트를 작성합시다.

#1. 플레이어가 진입할 때.
gameObject.tag로 플레이어를 확인하고,
전역변수 하나를 만들어 저장해둡니다.
그리고 다른 변수가 방해하지 못하게 코루틴을
StopCoroutine(코루틴 이름)으로 정지합니다.

#2.플레이어가 범위 안에 있을 때.
추척하고 있다는 플래그와, 이동 애니메이션을
업데이트해줍니다.

#3. 플레이어가 범위 밖으로 벗어날 때.
추척 플래그를 끄고, 평상시대로 활동하기 위해
StartCoroutine(코루틴 이름)으로 다시 활성화시킵니다.

반응형

안녕하세요 UnityBeginner입니다.

이번 글에선 오브젝트 반경에 접근하는 
타깃을 추적하는 몇 가지 기본적인 방식에 대해 알아보겠습니다.

씬뷰


다음과 같이 오브젝트 3가지를 배치했습니다.
빨간색 큐브는 키보드 입력을 받아 움직이는 플레이어 오브젝트이며
나머지는 반경 안에 플레이어가 들어오면 추적을 시작하는 적 오브젝트입니다.

화면에 보이는 빨간, 파란선은 오브젝트에 적용시킨 검색 반경을 시각적으로 확인
하기 위해 사용한 OnDrawGizmo입니다.


스크립트 (하늘색 큐브에 적용시킨 스크립트)
Transform target; float enemyMoveSpeed = 2f; private void Start() { InvokeRepeating("UpdateTarget", 0f, 0.25f); } private void UpdateTarget() { Collider[] cols = Physics.OverlapSphere(transform.position, 10f, 1 << 8); if(cols.Length > 0) { for (int i = 0; i < cols.Length; i++) { if (cols[i].tag == "Player") { Debug.Log("Physics Enemy : Target found"); target = cols[i].gameObject.transform; } } } else { Debug.Log("Physics Enemy : Target lost"); target = null; } } void Update() { if (target != null) { Vector3 dir = target.position - transform.position; transform.Translate(dir.normalized * enemyMoveSpeed * Time.deltaTime); } }


위의 코드는 InokeRepeating을 이용하여 매 0.25초 타깃을 체크하고
PhsicsOverlapSphere를 이용하여 자신의 위치로부터 10f 만큼의 반경의 충돌체를
검사하고 반경 내에 플레이어가 존재하는 경우 추적하는 코드입니다.


스크립트 (보라색 큐브에 적용시킨 스크립트)
Transform target = null; float enemyMoveSpeed = 2f; void Update() { if (target != null) { Vector3 dir = target.position - transform.position; transform.Translate(dir.normalized * enemyMoveSpeed * Time.deltaTime); } } private void OnTriggerEnter(Collider col) { if (col.tag == "Player") { target = col.gameObject.transform; Debug.Log("Box Enemy : Target found"); } } private void OnTriggerExit(Collider col) { target = null; Debug.Log("Box Enemy : Target lost"); }


위의 코드는 BoxCollider를 이용하여 반경내에 플레이어 오브젝트가
접근하면 추적하고 반경을 벗어나면 추적을 중단하는 코드입니다.

결과 화면

 

Physics를 이용해 주위 충돌체를 검사하거나, Collider를 이용하여 접근하는 
충돌체를 검사하고 추적하는 기본적인 방식에 대해 알아보았습니다.  

이 2가지 방법 이외에도 다양한 방식으로 구현이 가능하며 
다음은 좀 더 좋은 정보로 찾아오겠습니다. 

반응형

공유하기

게시글 관리

구독하기UnityBeginner

저작자표시

'유니티실습' 카테고리의 다른 글

유니티 체력게이지 제어하기  (0)2020.05.01유니티 스크롤이동  (0)2020.04.29유니티 카메라 플레이어 추적하기  (0)2020.04.28유니티 프로젝트 파일불러오기  (0)2020.04.27유니티 광고적용하기 애드몹  (0)2020.04.26

반응형

이제 적의 움직임 즉, AI를 만들 시간이다.

Ai만 만들거라 오늘 포스팅은 좀 짧을 수 있다.

일단 EnemyAi라는 스크립트를 먼저 만들자.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyAi : MonoBehaviour { public Transform target; //당연히 타겟은 플레이어 일 것이다. Transform으로 Target의 위치를 받아온다. void Update() { float dis = Vector3.Distance(transform.position, target.position); //내위치와 target의 위치 사이의 거리를 구함 if (dis <= 10) // 거리가 10칸 안으로 좁혀졌으면 쫒기 시작 { Move(); } else return; } void Move() { float dir = target.position.x - transform.position.x; //2d이기에 좌우만 빼면됨 (내x위치 - targetx위치) dir = (dir < 0) ? -1 : 1; //방향조절 dir의 x거리가 -라면 -1,아니면 1 transform.Translate(new Vector2(dir, 0) * Enemy.speed * Time.deltaTime); } }

이걸 Enemy에게 넣어주자.

여기 Target부분에 플레이어를 끌어다 넣으면 된다.

드래그해서 넣으면된다.

이렇게 AI도 만들어 줬다.

다음번에는 공격을 만들어 보겠다.

 

**(제가 만들고 있는 게임을 토대로 설명드리는 것입니다. 코딩이 제 스타일이라 참고만 하시는 걸 추천합니다.)**

 

반응형

공유하기

게시글 관리

구독하기코딩 작업장

'취미 > 게임 개발' 카테고리의 다른 글

[Unity] 게임 개발 - 한 점으로 이동시키기  (0)2021.12.10[Unity] 게임 개발 - 클릭 이벤트 만들기  (0)2021.12.09Unity 2D 로그라이크 게임만들기(적과 바닥) #2  (0)2021.08.27Visual studio에서 Unity 자동완성이 안될때  (1)2021.08.27Unity 2D 로그라이크 게임만들기(플레이어 생성) #1  (0)2021.08.26

Toplist

최신 우편물

태그