셋팅이 끝났으니 스크립트를 작성합시다.
#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도 만들어 줬다.
다음번에는 공격을 만들어 보겠다.
**(제가 만들고 있는 게임을 토대로 설명드리는 것입니다. 코딩이 제 스타일이라 참고만 하시는 걸 추천합니다.)**
반응형
공유하기
게시글 관리
구독하기코딩 작업장