728x90

이 글은 "따라하면서 배우는 고박사의 유니티 기초" 강의를 정리한 글이다. 

 

[지금 무료] 따라하면서 배우는 고박사의 유니티 기초 | 고박사 - 인프런

고박사 | 유니티로 게임을 개발하고 싶은 초보자를 대상으로 하며, 유니티 설치부터 2D/3D 게임 개발에 필요한 기초 지식까지 자세하게 설명합니다. (강의에 사용되는 모든 리소스는 영상 상단의

www.inflearn.com

 

 


반복문을 이용한 오브젝트 생성

반복문을 이용해 원하는 갯수만큼 오브젝트를 복제해서 생성하는 예제로 반복으로 사용되는 변수 i를 용해 오브젝트에 x 위치와 회전을 서서히 증가되도록 설정하였다.

 

다음 코드와 같이 중첩 이중 반복문을 사용한다면 격자 형태의 사각 맵을 표현할 수 있다. 외부 반복문은 격자의 y축 계산으로, 내부 반복문은 격자의 x축 계산으로 사용된다. 

(x축과 y축 값 모두 잘 증가되고 있는데 왜 저렇게 겹처서 나오는지 모르겠다...)

 

반복문 조건을 통해 특정 위치에 생성하지 않도록 할 수 있다. continue 키워드는 반복문에서 현재 조건을 건너뛰는 키워드이다. 아래 코드에서 보면 18번째 줄에서 continue가 실행되고 22번째 줄이 실행되지 않고, 다시 내부 반복문 조건으로 돌아가게된다. 

 

이외에 조건을 추가하여 만들 수 있으며 논리 연산자(||, &&) 이용해서 할 수 있다. 내부 반복문 안에 조건문을 만들어서 두가지 조건 중 하나가 만족될 때 실행된다는 의미이다. 

 

이외에 마름모 형태나 여러가지 형태를 조건문을 추가해서 만들 수 있다. 


임의의 Prefab으로 오브젝트 생성

여러 종류의 prefab 중 임의의 prefab이 생성되게 하는 예제를 진행할 것이다. 우선 추가적으로 여러 prefab을 추가한다. 

게임 오브젝트는 배열 형태이기 때문에  PrefabArray 변수에 동일한 타입의 여러개의 Prefab을 등록할 수 있다. 

Random.Range() 함수는 첫번째 매개변수로 나오는 숫자부터 두번째 매개변수까지 중에 하나의 숫자가 임의로 랜덤으로 선발된다. 선택된 숫자는 index 변수에 적용이 되며, index 변수가 instantiate()를 할 때 Prefab의 순번으로 들어가게 된다.

예를 들어 0이라는 숫자가 들어가면 0번에 있는 Prefab이 생성되게 될 것이다.

 

임의의 Prefab를 뽑기 때문에 항상 결과가 다르게 나온다. 

(좌) 2차 시도, (우) 3차 시도


임의의 위치에서 오브젝트 생성

Random.Range() 함수를 이용해서 오브젝트가 생성되는 x, y 위치를 임의로 설정해서 오브젝트를 생성해보도록한다. 이것도 이전 예제와 동일하게 할 때마다 결과가 다르게 나오게 된다. 

 


SpawnPoint에서 오브젝트 생성

맵에 배치한 특정 오브젝트 위치에서 오브젝트가 생성되도록하는 예제를 진행할 것이다. (SpawnPoint)

새로 오브젝트를 생성하고 생성 위치로 사용되기 때문에 화면에 안보여도 되지만 배치 편리성을 위해 보이게 설정하고 배치를 진행한다. 두 개의 오브젝트 크기는 각각 0.2 이며 위치는 (6,4) 와 (-6, -4)로 하여 대각선 위치로 배치하였다. 

 

아래 코드에서 SpawnPoint를 저장할 수 있는 트랜스폼 타입의 배열의 변수를 선언하였고, 배열 변수 중에 임의로 하나의 트랜스폼 변수의 값을 선택하게 된다. 선택된 위치를 position 변수에 저장면 미리 설정해둔 SpawnPoint 중 한 곳으로 오브젝트가 생성될 것이다. 

 

이전에 생성한 ObjectSpawner에 가면 SpawnPoint 배열이 생기는데, 여기에 드래그 드롭으 추가하면된다. 실행하면 겹쳐서 확인이 어렵지만 오브젝트들이 잘 생성된 것을 확인할 수 있다. 

 

 

오브젝트 이동

오브젝트들이 이동할 수 있도록 이동 코드를 작성해보았다. 

위에 SpawnIndex가 0이면 왼쪽 하단에 있기 때문에 이동방향을 오른쪽으로 하라는 명령을 한다. 0이 아니면 오른쪽 상단에 있기 때문에 왼쪽으로 이동한다.

 

이동을 위해서 세 개의 오브젝트를 무브먼트 2D 컴포넌트에 주가한다. 이후 오브젝트 직선 이동을 위한 코드를 작성한다.

 

이동하는 걸 확인할 수 있다. 근데 동시에 생성되어 하나로 움직이는 것처럼 보이기 때문에 오브젝트 생성 시점을 변경해보자.

 

오브젝트 생성 시간을 조절해서 다음과 같이 나오게 된다. 

 


플레이어 위치에 오브젝트 생성

슈팅 게임에서 활용할 수 있도록 플레이어의역할을 하는 게임 오브젝트 하나를 생성하고, 플레이어의 위치에서 특정키를 입력했을 때, 오브젝트를 생성하는 예제를 진행할 예정이다.  

플레이어의 움직임을 Player Controller 스크립트 코드를 작성하였다.

Input.GetKeyDown은 키보드 입력을 뜻하여 keyCodeFire 변수에 있는 KeyCode.Space를 스페이스바를 누르면 안쪽 코드가 실행된다.  이때 Instantiate()에서 bulletPrefab을 오브젝트가 생성되게 된다. 생성 위치는 현재 게임 오브젝트의 위치가 된다. 그리고 이름, 크기, 색을 바꾸는 것을 확인할 수 있다. 

Player 오브젝트에 이동 스크립트 코드를 넣고 bullet prefab에 circle을 넣어서 실행해보자.

 

오브젝트가 플레이어 위치에서 생성되는 것을 확인할 수 있다. 이것을 움직이도록 하는 예제를 진행한다. 

 

방향에 맞추어 오브젝트 이동

 

마지막에 움직였던 방향으로 총알을 발사하기 위해 마지막으로 움직였던 방향을 저장한다. 초반에는 오른쪽으로 발사하도록 유도하고 있다.

방향키를 누르지 않았다면 이전 저장 값을 사용하며, 방향키를 누르면, 움직인 정보를 lastMoveDirection에 저장하게 된다. 이후에 Setup() 함수에 저장된 방향값을 전달한다.

728x90

이 글은 "따라하면서 배우는 고박사의 유니티 기초" 강의를 정리한 글이다. 

 

[지금 무료] 따라하면서 배우는 고박사의 유니티 기초 | 고박사 - 인프런

고박사 | 유니티로 게임을 개발하고 싶은 초보자를 대상으로 하며, 유니티 설치부터 2D/3D 게임 개발에 필요한 기초 지식까지 자세하게 설명합니다. (강의에 사용되는 모든 리소스는 영상 상단의

www.inflearn.com

 


Prefab 개요

게임 내에서 코드를 이용해 오브젝트를 복제 생성하기 위해서는 원본이 되는 오브젝트가 필요하다

원본이 되는 오브젝트는 게임 내의 오브젝트가 아닌 프로젝트 영역의 파일로 저장해둔 prefab을 사용한다. 이는 게임 내에 있는 오브젝트를 사용하는 경우 예를 들어 플레이어에 의해 원본으로 사용되는 적을 죽이게 되면 더 이상 복제할 수 없게 되기 때문에 파일형태의 prefab을 사용하게 된다. 

 


Prefab 생성

Prefab을 생성하는 방법은 아래 3단계로 진행된다. 

1. 원하는 형태의 게임 오브젝트를 생성한다

2. Hierarchy View의 게임 오브젝트를 Project view로 드래그 & 드롭

3. Hierarchy View에 있는 게임 오브젝트를 삭제한다. 

prefab에 게임 오브젝트 생성

 

이후에 프로젝트 뷰에 있는 prefab을 Hierarchy View에 복제하는 것을 코드를 통해 구현해보겠다. 

 


Instantiate(원본 게임오브젝트)

Instantiate는 매개변수에 입력된 원본 게임 오브젝트를 동일하게 복제해서 생성하는 함수이다. 다음과 같이 코드를 작성하고, 새로 생성한 빈 오브젝트에 컴포넌트로 스크립트를 추가한다. 

그러면 Box Prefab이라고 어떤 오브젝트를 복제할 것인지 넣도록 나온다. 그래서 앞에서 생성한 Box  Prefab 파일을 드래그 드롭하면 넣게 된다. 

실행하면 Box Prefab이 복제되어서 오브젝트가 복제된 것을 확인할 수 있다. 

 


Instantiate(원본, 위치, 회전)

Instantiate(GameObject original, Vector3 position, Ouaternion rotation)

instantiate 함수는 세 개의 매개 변수를 받아 위치와 회전 값을 설정할 수 있으며, 위치만 따로 설정은 불가능하며, 세 개의 매개변수 모두 받아야 한다. 

위에처럼 코드를 작성하면 두 개의 오브젝트가 각각의 위치로 복제되는 것을 확인할 수 있다.


Quaternion &  Euler

유니티에서 회전 정도를 나타내고 연산하는 방식에는 Quaternion 과 오일러 두 가지 방식이 있다. 

Euler

360도 각도로 표현할 수 있으며, 연산속도가 느리며 짐벌락 현상이 발생할 수 있다.

 

Quaternion

x,y,z,w로 4원수 형태로 -1에서 1 사이의 값으로 표현한다.

연산속도가 빠르며 짐벌락 현상이 발생하지 않는다는 장점이 있으며, 현재 instantiate 함수에 사용되는 세 번째 매개 변수 회전 정보는 quaternion으로 나타낸다.

하지만 통상적으로 360도 회전 방식과 같이 원하는 특정 각도로 설정하기 어려움이 있다. 

더보기

짐벌락 현상이란?

 

세 개의 축이 서로 종속적인 관계를 가지고 있기 때문에 발생하는 문제로 회전 연산 도중 축이 하나 사라져 3차원 오브젝트가 일그러지는 현상

 

유니티에서는 오일러 값을 quaternion 값으로 변형 시켜주는 함수를 제공한다. 


GameObject  clone = instantiate()

GameObject clone = Instantiatr(GameObject original, Vector3 position, Quaternion rotation);

원본 게임 오브젝트를 복제에서 생성하고 생성된 복제 오브젝트 정보를 clone 변수에 저장한다. 색과 크기, 위치 값을 변경할 수 있다. 

728x90

이 글은 [따라하면서 배우는 고박사의 유니티 기초]의 게임오브젝트 물리와 충돌 강의를 정리한 글이다.

 

학습 페이지

 

 

 


물리 관련 컴포넌트

  • 2D : Component > Physics 2D (2D가 붙어있어야 한다.)
  • 3D : Component > Physics (아무것도 붙어있지 않다.)

Rigidbody2D 컴포넌트

2차원 공간에서 오브젝트의 물리와 중력 담당하는 컴포넌트로 아래와 같은 옵션을 설정할 수 있다.

RigidBody 추가 시 중력은 바로 적용되지만, 물리력에 의한 이동, 회전, 마찰력과 같이 다른 오브젝트와의 상호작용이 필요한 경우에 Collider 2D 컴포넌트가 필요하다.

 

RigidBody 추가 시 중력 바로 적용되는 것을 확인할 수 있다.

 


Collider2D 컴포넌트

2차원 공간에서 오브젝트의 충돌 범위를 나타내는 컴포넌트로 충돌 범위의 생김새나 특징에 따라 00 Collider 2D와 같이 명명한다. 

 

Box Collider 2D

사각형 범위의 충돌 범위를 나타내며, 변수는 아래와 같다.

  • Offset: 충돌 범위 중심점 (중심점을 바꾸어 다른 곳에서 충돌이 일어나도록 설정 가능)
  • Size: 충돌 범위 크기

​충돌 범위가 오브젝트와 동일하게 설정되지 않아도 된다. 게임에 따라 작게, 크게 설정이 가능하다. 

 

Circle Collider 2D 

원 범위의 충돌 범위를 나타내며, 연산 속도가 빠르다.

  • Offset: 충돌 범위 중심점 위치
  • Radius: 충동 범위 반지름 크기

Edge Collider 2D

처음 생성 시 직선이 그어지며, point > size로 점의 개수를 정할 수 있다. 또 점의 위치를 바꾸어서 다양한 곡선이나 형태로 표현 가능하다.

주로 2D 게임의 바닥 충돌에 사용한다.

  • Offset: 충돌 범위 중심점이다.
  • Edge Radius: 충돌 선의 두께
  • Points: 선을 이루는 점의 개수와 각 점의 위치

Polygon Collider 2D

텍스처 모양과 비슷한 모양으로 생성하는데, 세밀한 충돌과 반대로 연산량이 많아지기 때문에 꼭 필요할 때만 사용한다.

엣지와 동일하게 point 변수 값을 수정해서 바꿀 수 있다. 

  • Offset: 충돌 범위 중심점
  • Points: 선을 이루는 점의 개수와 각 점의 위치

Capsule Collider 2D

캡슐 모양의 충돌 범위 생성하며 주로 사람 형태의 캐릭터에 사용된다. 

  • Offset: 충돌 범위 중심점
  • Size: 충돌 범위 크기
  • Directon: 둥근 캡슐이 표현되는 방향
    • Vertical: 위/아래
    • Horizontal: 좌/우

 

Composite Collider 2D

다른 게임오브젝트의 Collider 2D 들을 하나로 묶어주는 역할로 Box , Polygon 만 가능하다. 

1. 빈 게임 오브젝트 생성하고, Composite Collider 2D 컴포넌트 추가한다.

2. 하나로 묶고 싶은 Collider 2D 컴포넌트를 가지고 있는 게임 오브젝트들을 Compite Collider 2D 가지고 있는 게임 오브젝트의 자식 오브젝트로 설정한다.

 

3. 자식 오브젝트들의  Polygon Collider 2D 컴포넌트에 있는 "Used By Composite" 변수 활성화

 

결과적으로 두 게임 오브젝트의 충돌범위가 같게 나오는 것을 확인할 수 있다. 

 

 

서로 다른 두 오브젝트가 충돌하기 위한 필수 조건

  1. 두 오브젝트 모두 Collider 2D 컴포넌트를 가지고 있어야 한다. 
  2. 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody 컴포넌트를 가지고 있어야 한다

 

기존의 오브젝트에 Rigidbody 2D아 Circle Collider 2D를 추가하였으며, 중력에 의해 아래로 떨어지지 않게 Gravity Scale 0으로 설정하였다.

플레이어 오브젝트에는 이전에 작성하였던 이동 스크립트 코드를 적용하였다. 

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private float moveSpeed - 5.0f; // 이동 속도
    private void Update()
    {
        float x = Input.GetAxisRaw("Horizontal"); // 좌우 이동
        float y = Input.GetAxisRaw("Vertical"); // 상하 이동

        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        transform.position += new Vector3(x,y,0)* moveSpeed * Time.deltaTime;
    }
}

플레이어와 부딫히는 장애물은 Collider 2D를 가지고 있다. 두 오브젝트가 모두 Collider 2D를 가지고 있기 때문에 충돌이 가능하다. 

 

 

결과적으로 이동이 잘 되고, 장애물과 충돌할 때, 어떤 식으로 처리하라는 내용이 없기 때문에 결과와 같이 뚫고 지나가려는 것을 확인할 수 있다. 오브젝트 이동을 위해서는 transform 컴포넌트를 사용해야 하지만, 여러 물리적 명령을 수행하기 전에 실제 이동이 가능한지, 어떤 식으로 이동을 할 수 있는지 검사하는 역할을 하는 것이 물리에서 해야하는 일이다.

​이는 Rigidbody 2D를 이용해 물리처리가 가능한 이동을 할 수 있다. 

 

GameObject의 component에 접근하는 방법

GetComponent<컴포넌트>();

transform은 모든 오브젝트에 포함되는 컴포넌트이므로 소문자로 접근이 가능하다. 나머지 컴포넌트는 GetComponent() 함수로 접근할 수 있다. 

 
using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private float moveSpeed = 5.0f; // 이동 속도
    private Rigidbody2D rigid2D;

    private void Awake()
    {
        rigid2D = GetComponent<Rigidbody2D>();
    }
    private void Update()
    {
        float x = Input.GetAxisRaw("Horizontal"); // 좌우 이동
        float y = Input.GetAxisRaw("Vertical"); // 상하 이동

        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        rigid2D.velocity += new Vector3(x,y,0)* moveSpeed ;
    }
}

 

권장하는 사용법

  • 컴포넌트와 동일한 타입의 변수 생성
  • 컴포넌트 정보 얻어와 변수에 저장
  • 컴포넌트 정보가 저장된 변수를 사용

 

현재 방법과 같이 클래스 변수를 생성하고, 컴포넌트 정보를 한번만 저장하면 현재 클래스 내부 어디에서든 rigid2D 변수를 이용해 Rigidbody2D 컴포넌트 정보를 바꾸거나 얻어올 수 있다. 

Rigidbody2D 클래스에 있 velocity 변수는 이동방향과 속도를 나타내는 속력 변수로 속력을 설정하면 Rigidbody2D에 의해서 이동이 가능하다. 

 

충돌 이벤트 함수

 물리적인 충돌이 발생하고 이벤트 함수가 호출되는 함수

  • OnCollisionEnter2D : 두 오브젝트가 충돌하는 순간 1회 호출
  • OnCollisionStay2D : 두 오브젝트가 충돌하고 있는 동안 매프레임 호출
  • OnCollisionExit2D : 두 오브젝트가 떨어지는 순간 1회 호출
 
 

[SerializeField]

변수 바로 윗줄에 작성하여, Inspector View에서 변수의 옵션 조절할 수 있도록 해준다.

script file에서 아래와 같이 변수 지정하면 Inspector View Scipt 부분에서 Color 제어 UI가 생성된다.

OnCollisionEnter2D()

우리가 설정한 color 변수의 색상으로 오브젝트의 색을 변경한다.

OnCollisionExit2D()

오브젝트의 색상을 하얀색으로 변경

 


물리적인 충돌 없이 이벤트 호출

접근 시 뚫고 지나갈 수 있음, 영역안에 물체를 넣는 경우 사용

  • OnTriggerEnter2D :두 오브젝트가 충돌하는 순간 1회 호출
  • OnTriggerStay2D :두 오브젝트가 충돌하고 있는 동안 매프레임 호출
  • OnTriggerExit2D :두 오브젝트가 떨어지는 순간 1회 호출

내가 소속된 게임 오브젝트의 컴포넌트 정보

GetComponent<컴포넌트>()

내가 아닌 다른 게임 오브젝트의 컴포넌트 정보

게임오브젝트.GetComponent<컴포넌트>()

 

 

 

 

728x90

이 글은 [따라하면서 배우는 고박사의 유니티 기초] 강의의 게임오브젝트 이동 강의를 정리한 글이다. 

 

학습 페이지

 

www.inflearn.com

 


프로젝트 생성

스크립트 환경에서 물리(장애물)가 없는 환경에서 게임 오브젝트를 이동해볼 것이다.

2D 프로젝트를 생성한다.


 플레이어 오브젝트 생성

오브젝트를 이동시키기 위해 player 이미지를 가져온 후, 2D 오브젝트> Sprite 에서 원하는 오브젝트를 생성한다.

오브젝트의 이름을 Player로 설정하고, 저장한 이미지를 sprite 오브젝트 > sprite Renderer 에 넣는다. 

 

 


Transform.position

오브젝트의 위치를 Transform 영역에서 조정할 수 있으며, 포지션 정보를 바꾸게 되면 오브젝트의 위치가 바뀌게 된다, 

실제 게임 진행시에는 유니티 에디터나 inspector view와 같은 화면을 볼 수 없기 때문에 스크립트에 있는 코드를 이용하여 포지션을 움직여야한다. 

유니티에서는 각각의 게임 오브젝트에 소속된 컴포넌트에 접근할 수 있으며, 컴포넌트 내부에 클래스에 있는 변수 데이터를 사용하거나 수정하고, 사용자가 만든 함수를 호출할 수 있다.

 

 

 

Movment2D라는 스크립트를 생성한 다음에 player에 컴포던트로 적용하자.

 

 

​이후에 스크립트 편집기를 열어서 코드를 수정한다. 

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private void Awake()
    {
        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        transform.position = transform.position + new Vector3(1, 0, 0) * 1;
    }
}

같은 게임 오브젝트에 포함되어 있는 transform의 경우 소문자를 이용하여 접근할 수 있다.

transform.position은 내가 소속되어 있는 게임 오브젝트의 위치 즉 나의 위치라고 생각할 수 있다. 

위의 코드는 오른쪽 방향으로 1만큼 움직이는 동작이 실행된다.

 

 


Update() 함수 사용과 Time.deltaTime

 

게임이 실행되는 동안 계속 움직이도록 하고 싶다면 Update() 함수를 사용하면 된다.

Update 함수에서 지속적으로 이동 회전 등을 증감 행위를 했을 때에는 Time.deltaTime을 곱해주어야 한다.

Update()가 FPS에 따라 1초에 몇 번 호출될지 결정되기 때문이다.

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private void Update()
    {
        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        transform.position += Vector3.right * 1 * Time.deltaTime;
    }
}

방향 값이 1 단위이고 Time.deltaTime가 곱해져 있다면, 속도 값이 1초에 움직이는 거리와 동일하게 설정된다.

위의 예시 코드는 1초에 오른쪽으로 1만큼 움직이도록 동작한다. 

 

 

Time.deltaTime

 
 

 


Input.GetAxisRaw()

원하는 방향키를 입력하였을 때, 이동 방향을 제어할 수 있도록 한다. 코드는 아래와 같이 작성되었다.

 

위의 코드에서 사용되는 Input Class는 유니티에서 제공하는 클래스로 키보드, 마우스, 자이로센서 등의 모든 입력과 관련된 기능을 제공한다. 

Input.GetAxisRaw() 함수는 유니티에 미리 설정된 단축키를 이용하는 함수이다. 설정된 단축키는 Edit > Project Setting > Input Manager 에 들어가면 확인할 수 있다. 

 

위의 코드를 실행하면, 원하는 방향으로 상하좌우 움직일 수 있다. 

 

728x90

이 글은 [따라하면서 배우는 고박사의 유니티 기초]의 유니티 이벤트 함수 강의를 정리한 글이다.

 

학습 페이지

 

www.inflearn.com


 

컨퍼런트로 사용되는 스크립트에는 하나의 class가 정의되어있는데, 지금은 클래스,스크립트, 컨퍼런트 모두 동일하다고 생각할 수 있다.

이러한 클래스는 유니티에서 제공하는 이벤트 함수와 사용자 정의 함수, 변수로 구성되어 있다.

게임이 실행되면 현재 hierarchy view에 게임 오브젝트들에 종속되어 있는 모든 컴포넌트에 이벤트 함수가 특정 순서, 조건에 따라 실행된다. 예를 들어 start 함수를 실행하라고 유니티에서 메시지를 보내게 되면 모든 게임 오브젝트의 컴포넌트들은 본인이 start 함수가 있는지 검사하고 있으면 실행하게 된다.

 

자동으로 실행되는 이벤트 함수 내부에 직접 작성한 코드들을 넣어 게임을 적용시키게 된다.

유니티 이벤트 함수 

이벤트 함수는 사전에 정의된 순서, 특정 조건을 만족할 때 자동으로 호출된다.

 

초기화를 위한 이벤트 함수

스크립트를 생성하고 EventFuntionsTest라고 이름을 설정한다. 그리고 빈 오브젝트를 생성하여 컨퍼런트로 생성한 스크립트를 적용한다.

 

대부분의 이벤트 함수는 private void 이벤트 함수 이름을 작성하며, 대부분은 다음과 같은 구조를 가지게 된다.

Awake() 함수

현재 씬에서 게임 오브젝트가 활성화 되어 있을 때 1회 호출된다. 이는 컴포넌트가 비활성화 상태여도 게임 오브젝트가 활성화 되어 있으면 호출된다.

데이터를 초기화 하는 용도로 사용되는 함수이다.

 

Start() 함수

현재 씬에서 게임 오브젝트와 컴포넌트가 모두 활성화 되어 있을 때 1회 호출된다.

데이터를 초기화 하는 용도로 사용되며, 첫 번째 업데이트 함수가 실행되기 직전에 호출된다.

초기화 함수 호출 순서는 Awake() > OnEnable() > Start() 순서이다.

 

OnEnable() 함수

컴포넌트가 비활성화 되었다가 활성화 될 때마다 1회 호출된다.

 

 


업데이트를 위한 이벤트 함수

 

update() 함수

현재 씬이 실행된 후 컴포넌트가 활성화되어 있을 때 매 프레임마다 호출된다.

컴포넌트가 활성화되어 있을 때 실행이 가능하고, 매 프레임마다 호출되는 실행 화면을 확인할 수 있다. 

 

LateUpdate() 함수

한 프레임에서 현재 씬에 존재하는 모든 게임오브젝트의 Update()가 1번 호출된 후 실행된다.

호출 순서는 Update() > LateUpdate() 이다. 호출 순서만 다르고 Update()함수와 역할은 동일하다.

 

Update와 호출 횟수는 동일하지만 순서만 다르다.

 

FixedUpdate() 함수

1초에 50회로 프레임의 영향을 받지 않고 정해진 회수만큼 호출한다. 정해진 횟수는 유니티에서 기본으로 설정 되어 있지만 Edit > Project Settings > Time 옵션에 “Fixed Timestep”에서 호출 주기 설정을 바꿀 수 있다.

 

정해진 횟수만 호출된 것을 확인할 수 있다. 


오브젝트 파괴 (Destroy Object)를 위한 이벤트 함수

OnDestroy() 함수

게임오브젝트가 파괴될 때 1회 호출된다.

씬이 변경되거나 게임이 종료될 때도 오브젝트가 파괴되기 때문에 호출된다.

 

delete로 게임 오브젝트를 삭제하면 OnDestroy() 함수가 호출되며,실행 후 종료를 눌러도 OnDestroy()함수가 호출된다.

 

 


종료를 위한 이벤트 함수

OnApplicationQuit() 함수

게임이 종료될 때 1회 호출되며, Unity Editor에서는 플레이 모드를 중지할 때 호출된다.

 

OnDisable() 함수

게임 오브젝트가 활성화 되었다가 비활성화 될 때마다 1회 호출된다.

+ Recent posts