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월에 시작하자.
'TIL > 유니티' 카테고리의 다른 글
7. 유니티_InputField (1) | 2024.04.22 |
---|---|
6. 유니티_캐릭터 선택창 만드는 법 맛보기, 코루틴 (1) | 2024.04.21 |
5. 유니티_메인화면 만들기 (0) | 2024.04.20 |
4. 유니티_오브젝트 이동, UGUI 기초 (1) | 2024.04.19 |
1. 유니티 기초 공부를 했다 (0) | 2024.04.12 |