UNITY : 2D Game

Alpha, Orderly·2023년 7월 14일
0

UNITY

목록 보기
1/3

서론

  • Unity 2019 LTS 기반으로 작성된 노트입니다.

Tips And Tricks

  • Scene 화면에서 우클릭시 WASD로 이동이 가능하다.
  • 오브젝트 클릭 후 F를 누르면 포커싱이 가능하다.

Mathf.Clamp : 값의 범위를 지정하기

  • Mathf.clamp(변수, 최소값, 최대값) 과 같이 사용시 변수가 최소값보다 낮아지면 최소값을, 최대값보다 커지면 최대값을 리턴한다.

게임 오브젝트 찾기

GameObject.Find();

게임 오브젝트 내의 컴포넌트 찾기

gameObject.GetComponent<찾고자 하는 컴포넌트의 타입>();

ESC키로 게임 종료하기

  • Application.Quit() 를 호출시 게임이 종료된다.

Material

  • 3D 모델에 적용할 텍스쳐의 다양한 속성을 설정한다.

Naming Convention

  • Cube_mat
  • 이름_mat

Prefab

  • 재사용 가능한 오브젝트의 타입
  • 오브젝트를 프로젝트 폴더에 드래그 해 생성한다.
  • 개별 객체의 변경점을 프리팹에 적용시킬수 있다.

Aspect Ratio

  • Game Display의 Free Aspect 를 16:9 로 설정한다.

Script

기본 함수

  • void Start()
    • 첫번째 프레임 업데이트 이전에 호출
  • void Update()
    • 매 프레임마다 호출

사용하기

  • 스크립트를 오브젝트에 드래그 드롭 하면 등록된다.
  • 이후 transform 등을 호출하면 등록된 오브젝트에 스크립트가 적용된다.

멤버 변수

  • 스크립트에서 멤버 변수를 public 으로 지정시, Unity Inspector 에서 조정이 가능하다.
  • 멤버 변수 위에 [SerializedField] 를 붙히면 private 접근자 상태에서도 Inspector 환경에서의 조작이 가능하다.
    [SerializeField]
    private float _speed = 3.5f;

변수 이름짓기

  • private 변수의 경우 앞에 _을 붙힌다.

transform

  • 모든 게임 오브젝트가 가지고 있다.

position

  • 현재 위치
  • Vector3 타입으로 저장된다.
  • 생성자를 통해 초기 x, y, z 값을 정할수 있다.

translate

  • 정해진 x, y, z 값 만큼 물체가 이동한다.
  • x, y, z 에 해당하는 값 만큼 이동하게 할수도 있고, Vector3 객체를 받아도 된다.

Time.deltaTime

  • 이전 프레임의 시간과 현재 프레임의 시간의 차이를 계산해 초 단위로 리턴한다.
  • 프레임에 상관 없이 Update() 를 통해 transform 등을 구현할수 있다.

Input Manager

  • 사용자의 입력을 받는다.
  • Edit > Project setting > Input 에서 입력 설정 가능.
  • 각각의 입력과 Name이 정해져 있다, 이들을 코드에서 호출하기 위해선 아래와 같이 작성할수 있다
horizontalInput = Input.GetAxis("Horizontal");
// Input 의 Axes에서 Horizontal 이라는 이름을 가진것을 가져오기.
// a/d 혹은 왼쪽 방향키/오른쪽 방향키를 누르면 이에 해당하는 float 값이 리턴된다.
// 왜 하필이면 float이냐? 게임패드를 지원한다는것을 기본으로 하기 때문에 그런듯 하다.
// 실제로 게임패드 연결시 0 혹은 -1/+1 이 아닌 중간값만큼만 입력이 가능하다.
  • 키보드 입력의 경우 아래와 같이 받아올수 있다.
Input.GetKeyDown(키코드)
/* 예시 */
Input.GetKeyDown(KeyCode.Enter); // 엔터키 입력시 true 반환.

게임 오브젝트 생성하기

  1. 스크립트에 private 자료형으로 GameObject 타입의 멤버 변수를 생성한다.
    • 멤버 변수 위에 [SerializeField] 를 추가한다.
  2. Inspector 를 통해 Prefab을 드래그-드롭 한다.
  3. Instantiate 메소드를 통해 오브젝트를 생성한다.
Instantiate(laserPrefab, transform.position, transform.rotation);
// 생성할 GameObject, 위치, 각도
// 이 외에도 많은 Override 형식이 있다.

게임 오브젝트 제거하기

  • 제거를 위해선 Destroy 함수를 사용할수 있다, Argument로 Gameobject를 받는다.
  • 자기자신을 제거하기 위해선 this.gameObject 를 Argument로 줄수 있다.
Destroy(this.gameObject);
// 바로 제거하기
Destroy(this.gameObject, 1f);
// 1초 후에 제거하기

Cooldown 지정하기

  • 특정 동작에 다음 동작이 가능하기 까지의 제한시간을 적용하는 방법
  • 게임을 실행한 시간을 기록하는 Time.time 변수를 사용할수 있다.
private float _fireRate = 0.5f;
// 한번 발사 이후 0.5초간 발사 불가능
private float _canFire = -1f;
// 다음에 발사 가능한 시간을 기록함
if(Input.GetKeyDown(KeyCode.Space) && Time.time > _canFire)
{
	_canFire = Time.time + _fireRate;
	Instantiate(_laserPrefab, transform.position + new Vector3(0, 0.8f, 0), transform.rotation);
}

게임 씬 로딩 / 초기화

  • 로딩은 새로운 씬을 불러오면 되고, 초기화는 기존 씬을 다시 불러오면 된다.
  • SceneManager 를 사용한다.
using UnityEngine.SceneManagement; // 필요

/* 실제 코드 */
SceneManager.LoadScene("Game");
/* 현재 실행중인 Scene 불러오기 */
SceneManager.LoadScene(0);

씬 만들기

  • Create > Scene 을 통해 만든다.

초기 실행 씬 설정하기

  • Build setting의 이 부분에 씬을 추가하게 되는데, 맨 윗쪽의 Scene이 먼저 실행된다.

UI 버튼 만들기

  • Create > UI > Button 추가

버튼 동작 추가하기

  • Inspector 의 On Click() 에서 추가한다.

애니메이션 동작 설정하기

애니메이터 화면

  • 우클릭을 통해 애니메이션 상태를 생성할수 있다.
  1. 애니메이션과 관련된 패러미터를 설정한다.
  2. Transition 의 Condition 에 설정한다.
  3. Animator 를 통해 Trigger를 실행한다.

애니메이션 트랜지션에 지연시간이 있을경우

  • Transition 의 hasExitTime 을 선택 취소하면 된다.

후처리 추가하기

후처리기 설치

  • Window > Package Manager 에서 설치 가능
  • Post Processing 설치

후처리기 사용하기

  1. 빈 게임오브젝트 생성
  2. Post-process Volume 컴포넌트 추가
  3. Global : 전체에 적용하기
  4. Profile 추가
    • Add Effect 를 통해 효과 추가
  5. 메인 카메라에 Post Process Layer 컴포넌트 추가
  6. PostProcessing 레이어를 추가함
  7. 메인 카메라 컴포넌트의 레이어와 Volume의 레이어를 PostProcessing 레이어로 설정

컬러 그레이딩

  • Build Setting > Player Setting > Player > Other Settings에서
    감마를 리니어로 수정.

오디오 추가하기

  • AudioSource : 유니티 컴포넌트
  • AudioClip : 오디오 파일
  • AudioSource.clip 에 AudioClip 을 대입, 실행할 오디오를 정할수 있다.

AudioClip 재생하기

  • AudioSource.PlayClipAtPoint(오디오 클립, Vector3 위치);

게임 빌드하기

  • player settings : 빌드 세팅

WEBGL

  • player setting 에서 컬러가 linear가 아닌 gamma 여야 한다.

Mobile

  • 모바일 환경에 맞는 조작법을 추가하면 된다.

일시정지 메뉴 구성하기

  • 특정 키를 누르면 게임이 잠시 멈추고 메뉴가 나오도록 함.
  1. 정지 메뉴 UI의 Panel을 구성
  2. Panel 의 Children으로 각각의 구성요소를 넣음
  3. 기본적으로 비활성화 되어있다가 버튼을 누르면 Active 되게 함.

게임 멈추기

  • Time.timeScale = 0; 으로 게임을 멈출수 있다.
  • 기본값은 1
  • 이를 이용해 슬로우모션 / 패스트모션을 만들수도 있다.

애니메이션 녹화하기

  • Animator 지정 이후 녹화 버튼을 누르고 키프레임을 녹화한다.
    • 위치 이동시 자동으로 키프레임이 지정됨.
  • 키프레임의 시간 위치를 옮기고 다시 위치를 이동해 키프레임을 저장.

값 저장하기

저장

  • PlayerPrefs.SetInt("HighScore", 10);
    • 정수 값 저장
  • PlayerPrefs.GetInt("HighScore");
    • 정수 가져오기
profile
만능 컴덕후 겸 번지 팬

0개의 댓글