Notice
Recent Posts
Recent Comments
05-18 01:37
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Unity - Essentials of programming in Unity 본문

Unity

Unity - Essentials of programming in Unity

알 수 없는 사용자 2023. 6. 20. 12:51

 Unity는 C#코드를 통해 Object를 관리할 수 있도록 한다. IDE은 보통 Visual Studio를 사용하게 된다. C#으로 오브젝트를 통제하기 위해 각각의 Object에서 Component로 C# Script를 넣을 수 있다.

 

 Component를 생성했다면, 다음의 Open을 열어서 IDE를 실행시켜준다.

 

Open이 아니더라도 Assets에 보이는 Script file을 통해 열거나 Component의 Open을 통해 열 수 있다.

 

 

 기본적으로 자바와 동일한 구조를 가지고 있으며, 특별한 이름의 메소드들은 Keyword와 같이 어떤 이벤트에 의해 실행되는 메소드(Start, Update, ...)로 지원할 수 있다.

 

using UnityEngine;

public class HelloWorld : MonoBehaviour
{
    void Start() {
    	Debug.Log("This is Start");
    }
    
    void Update() {
    	Debug.Log("This is Update");
    }
    
}

위와 같이 입력하여 게임을 실행시켜보면 Project탭의 콘솔탭을 통해 출력을 볼 수 있다.

 

 위와 같이 Collapse모드로 바꿔 출력되는 디스플레이를 간소화시킬 수 있다. 우측의 숫자는 얼마나 출력이 됐는가를 나타낸다. 따라서 Start method는 해당 Object가 생성됨과 동시에 실행되는 것이고, Update는 이 Object가 생성된 곳부터 시작하여 계속해서 실행되는 메소드라고 볼 수 있다.

 이런 메소드들이 어떻게 지원되는지 의문일 수 있는데,  Unity에서는 MonoBehaviour 클래스를 상속받은 스크립트에서 사용되는 여러 이벤트 메소드들을 통해 해당 메소드들이 실행되게 된다. 따라서 Class에서 이미 MonoBehaviour을 상속 받았기 때문에 이런 메소드들이 MonoBehaviour을 따라 실행되게 된다. 자주 사용되는 라이프사이클 메소드들은 다음과 같다.

 

Lifecycle Methods

  1. Awake : 게임 오브젝트가 생성될 때 한 번 호출됨. 즉, 자바의 생성자와 동일
  2. Start : Awake 이후에 호출되며, 게임 오브젝트의 활성화 시점에서 한 번 실행됨. 초기화 이후에 필요한 작업 수행
  3. Update : 매 프레임마다 호출됨. 게임 로직 업데이트, 입력 처리 등 주기적으로 실행되어야 하는 작업을 수행
  4. FixedUpdate : 물리 업데이트 주기에 맞춰 호출됨. 물리 엔진과 관련된 작업 처리
  5. LateUpdate : Update 이후에 호출되며, 다른 오브젝트들의 업데이트가 끝난 후에 실행됨. 주로 카메라 이동 처리
  6. OnEnable : 게임 오브젝트가 활성화될 때 호출됨. 초기화나 리소스 로딩 등의 작업 수행
  7. OnDisable : 게임 오브젝트가 비활성화될 때 호출됨. 정리 작업이나 자원 해제 등을 수행하는데 사용
  8. OnDestroy : 게임 오브젝트가 삭제될 때 호출됨. 메모리 해제나 리소스 정리등의 작업을 수행하는 데 사용
  9. OnTriggerEnter : Collider가 트리거를 통과할 때 호출됨.
  10. OnTriggerStay : Collider가 트리거 내에 머무는 동안 매 프레임마다 호출됨.
  11. OnTriggerExit : Collider가 트리거를 빠져나갈 때 호출됨.
  12. OnCollisionEnter : Collider가 충돌할 때 호출됨.
  13. OnCollisionStay : Collider가 충돌 중일 동안 매 프레임마다 호출됨.
  14. OnCollisionExit : Collider가 충돌을 끝낼 때 호출됨.
  15. OnGUI : GUI 이벤트를 처리하기 위해 호출됨.
  16. OnApplicationFocus : 게임 창이 포커스를 얻거나 잃을 때 호출됨.
  17. OnApplicationPause : 게임이 일시 정지될 때 호출됨.
  18. OnApplicationQuit : 게임이 종료될 때 호출됨.

 

Variable Statement

 변수 선언 또한 자바와 동일하다. Reference type에서 다른게 있다면 String이 아니라 여기서는 string을 쓴다는 것이다. 또한 자주 사용하게 될 변수 타입은 Vector3이다(3가지 원소를 가지는 벡터). Vector3을 다음과 같이 설정하여 공이 커지게 만들도록 할 수 있다.

 

using UnityEngine;

public class BallTransform : MonoBehaviour
{
    public Vector3 scaleChange;

    private void Start()
    {

    }

    private void Update()
    {
        transform.localScale += scaleChange;
    }
}

 해당 스크립트를 다 만들고 공에 적용하는 것도 Inspector창에 script를 드래그하여 넣기만 하면 적용 끝이다. 공에 적용하여 Inspector창에 보면 field에 선언된 멤버변수 scaleChange가 다음과 같이 있는 것으로 확인할 수 있다.

 

 여기서 첫 character가 소문자가 아니라 대문자인 이유는 Unity 자체에서 자동으로 변환해준다(public 변수에 항상 낙타 대문자를 사용하면 이 기능이 실행된다). 이제 Scale Change에 0.01, 0.01, 0.01을 넣은 후에 게임을 실행하면 프레임당 Transform의 Scale이 0.01씩 계속 커지는 것을 볼 수 있다. position, rotate 변경은 다음과 같다.


using UnityEngine;

public class BallTransform : MonoBehaviour
{
    public Vector3 scaleChange;
    public Vector3 positionChange;
    public Vector3 rotateChange;

    private void Update()
    {
        transform.position += positionChange;
        transform.localScale += scaleChange;
        transform.Rotate(rotateChange);
    }
}

 

 Script를 통해 플레이 내에서도 Object들과 상호작용을 통해 이벤트 처리 등 많은 것들을 할 수 있으며, 더 많은 것들을 보려면 공식 사이트에 방문해서 관련 객체들을 볼 수 있다.

'Unity' 카테고리의 다른 글

Unity - Essential of real-time 2D  (0) 2023.06.22
Unity - Essentials of real-time audio  (0) 2023.06.20
Unity - Project: Essentials of real-time 3D  (0) 2023.06.19
Unity - Real-time Creation  (2) 2023.06.19
Unity - Get started with Unity  (0) 2023.06.15
Comments