공부95 3D FPS - 8 / 게임 오버 처리 플레이어의 HP가 0이 되면 화면이 까맣게 되면서 “Game Over”라는 붉은 색 텍스트가 표시되는 기능을 구현한다. 이 때 “Game Over” 텍스트는 화면이 검정색이 된 후 1초 뒤에 표시되게 한다. 플레이어의 HP가 0이 되면 Hit 효과는 실행되지 않아야 한다. GameOver에 사용할 UI 이미지와 종속된 Text를 만든다. PlayerHP가 0이 되면 HitManager의 GameOver UI를 불러온다. // 만일, 플레이어의 체력이 0보다 크다면 if (HP > 0) { // 체력을 감소시킨다. HP -= 1; // HitManager의 Hit 함수를 호출하고싶다. HitManager.instance.Hit(); // 만일, 플레이어의 체력이 0이하라면 if (HP 0) { // 체력을.. 2022. 5. 19. 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. 이전 1 ··· 9 10 11 12 13 14 15 16 다음