Awake는 실례화되고 바로 불려가는 물건 아닌가...?

5508 단어 Unity

오프닝

  • Awake = 인스턴스가 생성될 때 처리된 것으로 간주되어 설치됩니다
  • 그러면 달라진다
  • 친자관계를 포함한 행동을 재확인하고 싶다
  • 결론

  • Awake는 실례화 후 처음으로 Active의 정시 집행이 되었다
  • 환경

  • Unity 2018.4.1f1
  • 실험 스크립트


    AwakeTest.cs
    using UnityEngine;
    
    public class AwakeTest : MonoBehaviour
    {
        public string objectName = null;
    
        void Awake()
        {
            Debug.Log("Awake!" + objectName);
        }
    }
    
    objectName 은 어떤 객체인지 확인하는 데 사용됩니다.

    행위 확인


    0. 전제 사항


    이러한 느낌으로 위의 스크립트를 GameObject/Cube/Sphere에 추가하여 ObjectName에서 직접 개체 이름을 설정합니다.

    GameObject/Cube/Sphere의 active 상태를 전환하는 실험입니다.

    1. 처음부터 Active

  • 실행 전 active 상태
  • 실행 시 log
  • 생성과 동시에 Active 상태이기 때문에 실행 후 바로 호출됩니다!

    2. 처음에는 Deactive

  • 실행 전 active 상태
  • 실행 시 log
    아무것도 아니야!
  • 수동으로 GameObject 활성화
  • Active 이후의 log
  • 인스턴스가 생성되면 Active가 될 때 실행됩니다.

    3. 하위 요소의 일부만 비활성

  • 실행 전 active 상태(Cube만 Deactive)
  • 실행 시 log

    큐브만 안 나와!
    → Cube를 Active로 설정하면 log도 나타납니다
  • 4. 그래도 나는 실례화된 후에 쓰고 싶다!


    스크립트 수정


    구조 함수를 정의하시겠습니까?
    AwakeTest.cs
    using UnityEngine;
    
    public class AwakeTest : MonoBehaviour
    {
        public string objectName = null;
    
        public AwakeTest()
        {
            Debug.Log("Init!" + objectName);
        }
    
        void Awake()
        {
            Debug.Log("Awake!" + objectName);
        }
    }
    

    실험


    3. 실행 후 하위 요소의 일부분만 Deactive 조건에 부합됩니다Init!Cube 출력하면 이긴다!
  • 실행 시 log

  • 🤔...
    기본 MonoBehaviour 상속의 경우 이벤트 함수를 사용합니다.(new도 안돼)
    그래도 어쨌든...!이런 상황에서 Prefab는 Instantiate를 정의하고 생성한 후 즉시 전용 처리를 호출하여 방법에 따라 이런 분위기를 조성할 수 있다.

    다시 결론을 얻다

  • Awake는 실례화 후 처음으로 Active의 정시 집행이 되었다
  • Unity를 사용한 이상 Unity의 철칙을 따르자
  • 참고 자료

  • 이벤트 함수의 실행 순서
  • [Unity] 저는 Awake()에 대해 알고 있는 것 같아서 몰라요.
  • 좋은 웹페이지 즐겨찾기