Chapter 10-3. 생존킷 : 마우스 커서 감추기
카테고리: Unity Lesson 3
태그: Unity Game Engine
인프런에 있는 케이디님의 [유니티 3D] 실전! 생존게임 만들기 - Advanced 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
생존 킷 : 마우스 커서 감추기
- 평소 게임 땐 마우스 커서를 비활성화 한다. 커서와 크로스헤어와 같이 있으면 헷갈리니까..
- 컴퓨터 모니터 화면 이미지 평소엔 비활성화
E
키 누르면 컴퓨터 켜짐 👉 이때만 마우스 커서 활성화- 👉 📜ActionController 에서 감지해야 함
ESC
키 누르면 컴퓨터 꺼짐 👉 마우스 커서 다시 비활성화- 컴퓨터 자체에서
ESC
키 입력 감지
- 컴퓨터 자체에서
📜ComputerKit
[SerializeField] private GameObject go_BaseUI; // 모니터 화면 배경 이미지UI
public bool isPowerOn = false; // 전원 켜진 상태인지. 중복 켜기 방지.
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
theInventory = FindObjectOfType<Inventory>();
theAudio = GetComponent<AudioSource>();
}
void Update()
{
if (isPowerOn)
if (Input.GetKeyDown(KeyCode.Escape))
PowerOff();
}
public void PowerOn() // 📜ActionController 에서 호출
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
isPowerOn = true;
go_BaseUI.SetActive(true);
}
private void PowerOff()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
theToolTip.HideToolTip();
isPowerOn = false;
go_BaseUI.SetActive(false);
}
- 게임이 시작되면(컴퓨터 오브젝트가 활성화 되면)
- 게임 전체에서 마우스 커서를 잠그고 보이지 않게 한다. 즉, 이 게임에선 윈도우 마우스 커서가 보이지 않게 할 것이다. 클릭이 필요하고 이럴 때만 윈도우 마우스 커서를 활성화 할 것이다!
// Cursor.lockState = CursorLockMode.Confined; 👉 마우스 커서가 게임의 창 밖으로 이탈되지 않도록 함. // Cursor.lockState = CursorLockMode.Locked; 👉 마우스 커서 정상 상태. 게임 중에 마우스 커서가 보임. Cursor.lockState = CursorLockMode.Locked; // 👉 마우스 커서를 게임 중앙 좌표에 고정시키고 잠궈버린다. 렌더링도 하지 않게 한다. Cursor.visible = false; // 마우스 커서를 단순히 렌더링 하지 않는다. CursorLockMode.Locked 에서도 렌더링 안하게 해주지만 보통 같이 쓴다고 한다.
- 게임 전체에서 마우스 커서를 잠그고 보이지 않게 한다. 즉, 이 게임에선 윈도우 마우스 커서가 보이지 않게 할 것이다. 클릭이 필요하고 이럴 때만 윈도우 마우스 커서를 활성화 할 것이다!
- 마우스 커서 활성화 👉 컴퓨터 가까이에 가서 컴퓨터를 바라보고
E
키를 눌러 컴퓨터를 켰을 때만- PowerOn()
- 컴퓨터 활성화 (마우스 커서 활성화, 모니터 이미지 활성화)
- 📜ActionController 에서 호출 할 것이다.
- 메인 카메라의 Raycast 와 충돌하면 액션 텍스트도 띄울것이고 그 때
E
키를 누르면 컴퓨터가 켜지도록
- 메인 카메라의 Raycast 와 충돌하면 액션 텍스트도 띄울것이고 그 때
- PowerOff()
- 컴퓨터 비활성화 (마우스 커서 비활성화, 툴팁 비활성화, 모니터 이미지 비활성화)
- 📜ComputerKit 내의 Update 문에서
ESC
키를 감지하고 입력 되면 이 함수 호출
- 📜ComputerKit 내의 Update 문에서
- 컴퓨터 비활성화 (마우스 커서 비활성화, 툴팁 비활성화, 모니터 이미지 비활성화)
- PowerOn()
플레이어가 모니터를 바라볼 때 액션 텍스트를 띄워야 하기 때문에 모니터 부분에 Box Collider 를 추가했다. 메인 카메라의 Raycast 를 맞을 수 있도록 하기 위해서.
컴퓨터의 태그와 레이어를 “Computer”로.
go_BaseUI
에 모니터 이미지 할당.
📜ActionController
private bool lookComputer = false; // 컴퓨터를 바라볼 시 true
[SerializeField] private ComputerKit theComputer; // 📜ComputerKit.cs
void Update()
{
CheckAction();
TryAction();
}
private void CheckAction()
{
if (Physics.Raycast(transform.position, transform.forward, out hitInfo, range, layerMask))
{
if (hitInfo.transform.tag == "Item")
ItemInfoAppear();
else if (hitInfo.transform.tag == "Weak_Animal")
MeatInfoAppear();
else if (hitInfo.transform.tag == "Fire")
FireInfoAppear();
else if (hitInfo.transform.tag == "Computer")
ComputerInfoAppear();
else
InfoDisappear();
}
else
InfoDisappear();
}
private void TryAction()
{
if(Input.GetKeyDown(KeyCode.E))
{
CheckAction();
CanPickUp();
CanMeat();
CanDropFire();
CanComputerPowerOn();
}
}
private void ComputerInfoAppear()
{
if (!hitInfo.transform.GetComponent<ComputerKit>().isPowerOn)
{
Reset();
lookComputer = true;
actionText.gameObject.SetActive(true);
actionText.text = "컴퓨터 가동 " + "<color=yellow>" + "(E)" + "</color>";
}
}
private void InfoDisappear()
{
pickupActivated = false;
dissolveActivated = false;
firedLookActivated = false;
lookComputer = false; // 추가 !
actionText.gameObject.SetActive(false);
}
private void CanComputerPowerOn()
{
if (lookComputer)
{
if (hitInfo.transform != null)
{
if (!hitInfo.transform.GetComponent<ComputerKit>().isPowerOn)
{
hitInfo.transform.GetComponent<ComputerKit>().PowerOn();
InfoDisappear();
}
}
}
}
- CheckAction()
- 메인카메라의 Raycast 가 부딪친 대상이 컴퓨터라면 컴퓨터의 액션 텍스트를 띄우기 위해 ComputerInfoAppear() 호출
- ComputerInfoAppear()
- 컴퓨터가 현재 가동중이 아니라면 컴퓨터의 액션 텍스트 띄우고
lookComputer
는 true 값으로 변경
- 컴퓨터가 현재 가동중이 아니라면 컴퓨터의 액션 텍스트 띄우고
- TryAction()
- 매 프레임마다
E
키가 들어왔나 감지한다. CanComputerPowerOn() 실행
- 매 프레임마다
- CanComputerPowerOn()
lookComputer
가 true 인 상태이고 컴퓨터가 가동중이 아니라면 컴퓨터 이미지를 활성화 하고 액션 텍스트는 비활성화 한다.- 📜ComputerKit의 PowerOn 함수 실행
layerMask
에 “Computer”레이어를 추가하여 메인카메라의 Raycast를 컴퓨터가 받을 수 있도록 한다.theComputer
에 📜ComputerKit 가 붙어 있는 컴퓨터 오브젝트 할당
- 📜Inventory 와 📜CraftManual도 창이 활성화 될 때 마우스 커서를 활성화 하였고, 창이 비활성화 되면 마우스 커서도 다시 비활성화 되게 코드를 추가해주었다.
- 이 부분은 다음 포스트에서 게임매니저를 통해 모든 창들의 커서 활성화/비활성화를 일괄 관리할 것이다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기