13일에 공부한 게임오브젝트의 흐름과 오늘 공부한 키보드와 마우스 입력을 통한 오브젝트의 입력에 대한 필기이다.
그리고 오늘은 집중이 잘 되지 않아서 생각해둔 게임 아이디어를 제대로 정리해보았다.
 
<게임오브젝트의 흐름>
1. 초기화
   Awake(): 게임 오브젝트 생성할 때 최초 실행되는 함수 
   1+. 활성화
      OnEnable(): 게임 오브젝트가 활성화 되었을 때 (Awake랑 Start 중간에 실행되는 함수라 1+로 넣음)
   Start(): 한번만 실행
 
2. 물리단계
   FixedUpdate(): 물리연산 업데이트 (물리 연산을 하기 전에 실행되는 함수)
   (CPU 부하가 많다고 함. 고정적으로 프레임을 유지하기 때문)
3. 게임로직
   Update(): 게임 로직 업데이트 (주기적으로 변하는) (보통 1초에 60회씩)
   (환경에 따라서 실행 주기가 떨어질 수 있음)
   LateUpdate(): 모든 업데이트 끝난 후
   3+. 비활성화
      OnDisable() : 모든 업데이트가 끝난 후 오브젝트가 비활성화되거나 삭제될 때 실행
 
4. 해체
OnDestroy(): 게임 오브젝트가 삭제될 때 실행
 
예시코드)

using UnityEngine;

public class LifeCycle : MonoBehaviour{

 void Awake(){
  Debug.Log(“플레이어 데이터가 준비되었습니다.”);
 }

 void OnEnable(){
  Debug.Log(“플레이어가 로그인 했습니다.”);
 }

 void Start(){
  Debug.Log(“사냥 장비를 챙겼습니다..”);
 }

 void FixedUpdate(){
  Debug.Log(“이동”);
 }

 void Update(){
  Debug.Log(“몬스터 사냥”);
 }

 void LateUpdate(){
  Debug.Log(“경험치 획득”);
 }

 void OnDisable(){
  Debug.Log(“플레이어가 로그아웃 했습니다.”);
 } //Inspector 창에서 스크립트를 비활성화(체크 해제)시킬 시 위 문구가 출력됨

 void OnDestroy(){
  Debug.Log(“플레이어 데이터를 해제하였습니다.”);
 } //Hierarchy 창에서 해당 스크립트를 가진 오브젝트를 삭제할 시 위 문구가 출력된다.
}

 


<키보드 입력>
Input: 입력 받는 커맨드
Input.anyKeyDown: 아무 입력을 받던 true

ex)

if(Input.anyKeyDown)
          Debug.Log("게임 시작"); //누르는 시간에 상관 없이 누르는 횟수로 카운트

if(Input.anyKey)
          Debug.Log("게임 시작"); //누르는 동안 계속 실행

 

아마 리듬게임에서 많이 쓸 듯

<입력함수의 행동 3가지>
- Down: 처음 딱 누르는 순간의 행동
- Stay: 누르고 유지하는 행동
- Up: 떼는 행동

ex)

if(Input.GetKeyDown(KeyCode.Return)) // Return키인데 Enter키도 됨
  Debug.Log("아이템을 구입하였습니다.");

if(Input.GetKey(KeyCode.LeftArrow))
  Debug.Log("왼쪽으로 이동 중");

if(Input.GetKeyUp(KeyCode.RightArrow))
  Debug.Log("오른쪽 이동을 멈췄습니다.");

 

esc 키는 Escape로 적어줘야한다.

키 테스트 할 때는 게임뷰(게임화면창)을 눌러주고 콘솔창을 확인해봐야한다.
(게임 안에서 실행하는 것이기 때문)

<마우스 입력>
ex)

if(Input.GetMouseButtonDown(0))
  Debug.Log("미사일 발사");

if(Input.GetMouseButton(0))
  Debug.Log("파워 모으는 중...");

if(Input.GetMouseButtonUp(0))
  Debug.Log("슈퍼 미사일 발사");

 

0: 왼쪽버튼 1: 오른쪽 버튼

Editor -> Project Settings -> Input -> Input Manager에서 버튼 설정 가능
(딱히 안 쓸 것 같긴 함)

ex)

if(Input.GetButtonDown("Jump"))
  Debug.Log("점프");

 

스페이스바를 누를 때 점프를 했으면 좋겠다, 할 때 스페이스바의 이름을 점프로 바꿔서 보기 쉽게 바꾸는 식인 거다. 그래서 굳이.. 몰라도 상관없을 것 같다고 생각한 거. (협업할 때는 알아야겠지)

<축 입력>
이게 왜 필요한 건지, 어떤 상황에서 필요한 건지 모르겠어서 그냥 패스함.
아마 컨트롤이 필요한 게임을 만들 때 필요할 것 같음.
(마리오같은)

일단 키워드만 작성한다.
Horizontal / Vertical / GetAxisRaw / 축, 횡, 종

<게임 기획>


일단은 컨트롤이 필요없는 게임을 먼저 개발해보려고 한다.

탑뷰 픽셀 게임을 만들고 싶지만 첫 시작을 그걸로 하면.. 몇 년간 그거 제작만 붙들고 있을 것 같아서 그건 일단 패스. 나는 에셋을 다운받아서 쓰고 싶지 않고 직접 다 디자인 하고 싶다.

최근에 그림 그려주는 AI가 많이 발전해서 그걸 사용할까도 생각 중이다. 상업적 이용이 가능한 사이트를 잘 골라야지.

 

오늘은 7페이지 정도 분량을 작성했다.

첫 화면 / 캐릭터 선택 / 게임에서 플레이어가 가져야할 목표 설정 / 게임 시스템 일부

게임 시스템은 꽤 간단해서 구현하기 쉬울 것 같다. 세세한 디테일들은 생각나는대로 적고 나중에 구현하면 될 것 같고, 일단 큰 틀부터 만들면 좋을 것 같다.

급하게 할 것 없으니 일단 구현은 5월에 시작하자.