페이지

2012년 12월 25일 화요일

Game Object's transform and rigidbody in Unity3D


transform 과 rigidbody의 경우는 게임을 구현하면서 가장 많이 쓰이는 변수들 중 하나이다.
이것들을 매번 함수 내에서 특히 Update()내에 호출을 하게 되면 Unity의 경우 검색 비용이 꽤 비싸서 그다지 추천하지 않는다.
그래서 Awake()단계에서 private 변수로 저장해 놓고 쓰는 것을 권장하는데 나의 경우는 하나의 GameObject에서 여러개의 클래스를 Component 기반으로 사용하기 때문에 이것도 비효율적이라고 생각하여 Property라는 Class에서 아예 이것들을 저장 해놓고 Singleton으로 static 하게 접근하여 사용한다.

예를 들어

public class Properties MonoSingleton <Properties >
{
    public Transform thisTransform;
    public Rigidbody thisRigidbody;

    //*
    //  other properties
    //*

    // This function is called when the instance is used the first time
    // Put all the initializations you need here, as you would do in Awake
    public override void Init()
    {
        // ...

        thisTransform = transform;
        thisRigidbody = rigidbody;
    }

}

public class OtherComponent MonoBehaviour
{
    public void Update()
    {
        Properties .Instance.thisTransform.Translate(Vector3 .up * Time .deltaTime);
    }
}

public class AnotherComponent MonoBehaviour
{
    public void Update()
    {
        Properties .Instance.thisTransform.Translate(Vector3 .up * Time .deltaTime);
    }
}

일단 매번 Awake()내에서 저장 할 필요도 없고 검색 비용도 줄인다. 소규모 프로젝트라면 절약 비용이 미비하겠지만 코드가 좀 더 깔끔해진다는 것 만으로도 좋지 않을까 싶다. 아니면 말고..ㅎㅎ


p.s: 단, 주의 할 점은 Properties가 singleton이기 때문에 Clone 객체들에서는 사용하지 말아야 한다.

댓글 없음:

댓글 쓰기