2024년 12월 31일 TIL

John Jean·2024년 12월 31일

Unity

목록 보기
4/19

OnEnable

스크립트가 활성화 되었을 때 실행될 메서드.

예를들어 스크립트가 활성화 되었을 때 플레이어 조작이 가능하게 하려면,

public class Movement : MonoBehaviour
{
    [SerializeField] InputAction thrust;

    private void OnEnable()
    {
        thrust.Enable();
    }
}

Awake()랑 뭐가 다른가

Awake

  • 호출 시점:
    • 스크립트가 포함된 GameObject가 활성화되거나 비활성화 여부와 관계없이 처음 로드될 때 호출됩니다.
    • 씬 로딩 직후 모든 객체가 생성된 후 호출됩니다.
  • 특징:
    • GameObject가 비활성화 상태여도 호출됩니다.
    • Awake는 MonoBehaviour가 로드되면 한 번만 호출됩니다.
    • 다른 컴포넌트나 스크립트를 초기화할 때 사용됩니다.
    • 보통 참조를 설정하거나 데이터를 로드하는 작업에 사용됩니다.
  • 주요 사용 사례:
    • 컴포넌트 간 의존성을 설정하거나 참조를 가져올 때.
    • 예: GetComponent, DontDestroyOnLoad, 초기 데이터 로드 등.

OnEnable

  • 호출 시점:
    • GameObject 또는 Script가 활성화될 때마다 호출됩니다.
    • 씬이 처음 로드될 때 활성화된 상태라면 Awake 후에 호출됩니다.
  • 특징:
    • GameObject가 활성화될 때마다 호출되므로 여러 번 호출될 수 있습니다.
    • 활성화/비활성화 상태를 처리하거나 이벤트를 구독/구독 해제할 때 사용됩니다.
    • Awake 이후에 호출됩니다.
  • 주요 사용 사례:
    • 이벤트 리스너 등록 (예: EventManager.Subscribe).
    • GameObject가 활성화될 때 UI를 업데이트하거나 작업을 시작할 때.
특징AwakeOnEnable
호출 시점GameObject가 처음 로드될 때 1회 호출GameObject가 활성화될 때마다 호출
활성화 여부비활성화 상태여도 호출됨활성화될 때만 호출됨
사용 빈도주로 초기화 코드에 사용활성화 상태 관리나 이벤트 등록에 사용
호출 순서AwakeOnEnableOnEnableAwake 이후 호출

특정 키 인스펙터에서 바인딩.

[SerializeField] InputAction thrust;

FixedUpdate()

Update()와 달리 유니티에서 물리적 연산을 할때 Update 대신 사용하면 좋다.

  • 추가로 FixedUpdate를 사용했다면, Maincamera 오브젝트에 Cinemachine이 있다면, 업데이트 방식을 smart update에서 fixedUpdate로 바꿔줘야 함.(Update Method & Blend Update Method 둘 다.)

AddRelativeForce()

오브젝트의 로컬 방향으로 힘을 주고싶다. 그렇다면 사용할 메서드.

rb.AddRelativeForce(Vector3.up * thrustStrength * Time.fixedDeltaTime);

이런식으로 쓰면됨. Time.fixedDeltaTIme은 FixedUpdate()를 사용해서 deltaTime 대신 쓰는거다.

Input이 어떤상태인지 알고싶을 때

float rotationInput = rotation.ReadValue<float>();

이거는 좌우 어떤걸 눌렀는지 같은곳에 쓰면 됨.


올해도 화이팅했고 내년에도 열심히 달려보자~!

profile
크래프톤 6기 정글러

0개의 댓글