- RPG Project - 6 [ NPC가 User 바라보기 구현 ]2024년 10월 10일
- SiJun-Park
- 작성자
- 2024.10.10.:37
이번 목표는 NPC를 생성하고 NPC가 해당 범위안에 들어오면 유저를 바라보고 나가면 다시 원래 방향을 보게하는 것이 목표이다.
NPC 가장 먼저 NPC가 인식을 할 범위를 지정을 해줍니다.
이때 저는 Box Collider를 Trigger 형식으로 사용을 하였습니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NPC_Control : MonoBehaviour { private Animator _Action; private GameObject _target; // 유저를 바라보기 위해서 [SerializeField] private GameObject _spine; // 유저를 바라보기 위해서 [Header("바라보는 속도")] [SerializeField] private float LookSpeed = 5.0f; private Quaternion _Origin_Look; void Start() { _Action = GetComponent<Animator>(); _Origin_Look = _spine.transform.rotation; } void Update() { if (_target) See(); else See_Back(); } void See() { if (!_target) return; Vector3 diff = _target.transform.position - _spine.transform.position; // 방향 Quaternion Rotation = Quaternion.LookRotation(diff); _spine.transform.rotation = Quaternion.Slerp(_spine.transform.rotation, Rotation, LookSpeed * Time.deltaTime); // 부드럽게 움직이게 } void See_Back() => _spine.transform.rotation = Quaternion.Slerp(_spine.transform.rotation, _Origin_Look, LookSpeed * Time.deltaTime); // 부드럽게 움직이게 void OnTriggerEnter(Collider other) { if (other.CompareTag("UserPoint")) { _target = other.gameObject; } } void OnTriggerExit(Collider other) { if (_target) { _target = null; } } void OnTriggerStay(Collider other) { if (_target) return; else _target = other.gameObject; } }
원래는 GetBoneTransform을 사용해서 머리를 가져오려고 했지만 해당 Prefab은 Spine으로 되어있어서 Spine을 따로 불러와줬습니다.
만약에 부딪힌 Object의 tag가 UserPoint라면 해당 대상을 target으로 잡습니다.
그렇게해서 Update에서 target이 있다면 See 함수로 넘어가는데 거기서는 해당 target의 지점과 나의 현재 지점을 빼면 방향이 나오니 그 방향을 기준으로 부드럽게 움직이기 위해 Quaternion을 사용해 천천히 이동을 시켜주었습니다.
만약에 target이 범위 밖으로 나가게 되면 _target을 null을 해주고 See_Back으로 원래 장소를 바라보게 해줍니다.
코드를 보면 Player가 아닌 UserPoint라고 하는 걸 체크하고 있습니다.
이렇게하는 이유는 User를 바라보게 하면 발을 바라보더라구요.. 그래서 위로 시선을 옮겨야겠다 싶어서
카메라에서도 사용하였던 UserPoint를 기준으로 잡았습니다
UserPoint 일반 모델에서 잡히는 위치보다 조금 더 위를 기준으로 잡았습니다.
이때 당연히 UserPoint의 빈객체에도 Object 충돌을 하기 위해 Collider를 넣었습니다.
결과 'Unity > RPG Project' 카테고리의 다른 글
RPG Project - 8 [ NPC Chat System ] (0) 2024.10.15 RPG Project - 7 [ 상호작용 Text 구현 ] (0) 2024.10.14 RPG Project - 5 [ 플레이어 체력 감소 및 피해 효과 ] (0) 2024.10.10 RPG Project - 4 [ 카메라 제어 ] (0) 2024.10.09 RPG Proejct - 3 [ 몬스터 행동 구현 ] (0) 2024.10.09 다음글이전글이전 글이 없습니다.댓글