공부88 3D FPS - 7 / 피격 처리 ImageHit, 화면을 뒤덮는 UI를 생성하여 Enemy에게 공격 당했을 때 깜빡이게 한다. using System.Collections; using System.Collections.Generic; using UnityEngine; // 태어날 때 ImageHit를 보이지 않게 하고싶다. // 적이 플레이어를 공격했을 때 ImageHit를 깜빡이게 하고싶다. public class HitManager : MonoBehaviour { public static HitManager instance; private void Awake() { instance = this; } public GameObject imageHit; // Start is called before the first frame updat.. 2022. 5. 19. 3D FPS - 6 / 위치 복귀 상태 머신에 Enemy가 초기 위치로 복귀하는 상태(State.Return)를 추가한다. enum State { Idle, Move, Attack, Die, Return } Enemy가 Player를 쫓아가다가 최대 추적 거리를 넘어가면 복귀 상태로 전환 // 현재 위치가 최대 추적 가능 거리를 넘어갔는지 여부를 판단한다. float trace = Vector3.Distance(originPosition, transform.position); // 만일, 최대 추적 가능 거리를 넘어갔다면 상태를 복귀 상태로 전환한다. if (trace > traceDistance) { state = State.Return; } 추적을 포기하고 다시 원래의 위치로 돌아오는 기능 void UpdateReturn() { //.. 2022. 5. 19. 3D FPS - 5 / 상태머신 설계 상태머신(FSM) 상태(State) : 객체의 행동 전이(Transition) : 상태의 이동 조건(Condition) : 전이하기 위한 조건 Enemy 상태머신 Enemy는 정지 상태로 시작하고 이동 조건이 성립하면 이동 상태로 전이한다. 이동중에 일정 범위 안에 목표물이 들어오면 공격상태로 전이한다. 공격을 계속하지 않고 일정 시간 대기를 한 후 다시 공격한다. 공격중에 목표물이 공격범위에서 벗어나면 다시 이동상태로 전이한다. 어떠한 상태에서든 피격을 당하면 죽음 상태로 전이한다. 변수 public float speed = 1; public float findDistance = 5; public float attackDistance = 1.5f; enum State { Idle, Move, Attac.. 2022. 5. 18. 3D FPS - 4 / 가리키는 대상 표시 마우스 커서가 가리키는 오브젝트의 이름을 출력한다. // 마우스 커서의 좌표를 월드 좌표계로 변환하고, 그 월드좌표를 기준으로 Ray를 생성한다. Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit mouseInfo; // Ray를 쏴서 부딪힌 대상이 있다면 if (Physics.Raycast(mouseRay, out mouseInfo)) { print("가리키는 대상: " + mouseInfo.transform.name); logText.text = "가리키는 대상: " + mouseInfo.transform.name; } // Ray에 닿은 대상이 없다면 else { print("가리키는 대상 없음"); logTex.. 2022. 5. 18. 3D FPS - 3 / 무기 제작 Ray(시선)를 이용해서 닿은곳에 총을 쏘고싶다. // 만약 마우스 왼쪽버튼을 누르면 if (Input.GetButtonDown("Fire1")) { // 시선을 만들고 Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward); // 그 시선을 이용해서 바라봤는데 만약 닿은곳이 있다면? RaycastHit hitinfo; if (Physics.Raycast(ray, out hitinfo)) { // 닿은곳에 총알자국을 가져다놓고싶다. bulletImpact.transform.position = hitinfo.point; } } Ray : 시선 생성 RaycastHit : Ray가 닿은 판정인 곳 Ray가 나오는 위치를.. 2022. 5. 18. 3D FPS - 2 / 시점 변화 마우스 휠을 아래로 스크롤하면 플레이어와 카메라의 거리가 멀어지게 하고, 반대로 마우스 휠을 위로 스크롤하면 플레이어와 카메라의 거리가 가까워지도록 한다. 현재 시점 위치를 지정하고 void Start() { // 카메라의 가장 가까운 위치를 플레이어를 기준으로 현재 위치로 지정한다. nearPosition = transform.localPosition; } 멀어질 최대의 지점을 지정해서 Lerp를 적용한다. // 카메라의 정면 방향을 기준으로 뒤쪽 방향의 5미터 지점 farPosition = nearPosition + transform.forward * -5; // 마우스 스크롤 휠의 움직임 값을 받아온다. wheelValue -= Input.GetAxis("Mouse ScrollWheel"); whe.. 2022. 5. 17. 이전 1 ··· 8 9 10 11 12 13 14 15 다음