2017-11-28 1 views
0

나는 Unity3D의 주 패턴 (I 유니티에 SUPER 새로운 해요) 테스트하기 위해 다음과 같은 세 가지 스크립트를 생성하고 예기치 않은 결과가 있어요 : Unity3D : 자식 클래스 인스턴스 스와핑 (주 패턴)

public class BaseState { 
    public void Enter() 
    { 
     Debug.Log("Entered BaseState"); 
    } 
} 
은 BaseState

IntroState

public class IntroState : BaseState { 
    public void Enter() 
    { 
     Debug.Log("Entered IntroState"); 
    } 
} 

StateController

public class StateController : MonoBehavior { 
    private BaseState state; 

    void Start() 
    { 
     state = new IntroState(); 
     state.Enter(); 
    } 
} 

이것을 GameObject에 첨부하면 콘솔에 "IntroState 입력"이 표시됩니다. 대신 "Entered BaseState"가 표시됩니다.

내가 뭘 잘못하고 있니?

답변

1

하위 클래스에서 동일한 서명을 사용하여 메서드를 정의 할 때 메서드를 숨기고 있습니다. 당신은 public void virtual으로 BaseState.Enter을 표시하고 IntroState.Enteroverride는 그래서 무엇 일어나고있는 것은 당신이 BaseState 유형의 state 변수를 가지고있다 public override void Enter()

하게 추가해야합니다. state = new IntroState();을 작성할 때 암시 적 상향 교환 (google it up)을 수행 중입니다. 당신은 내가 또한 "비 상태"라는 라이브러리 및 자세한 내용은이 답을 체크 아웃하는 것이 좋습니다

"은 BaseState 진출"GET 왜 그 후에 당신이 BaseState 객체에 Enter 방법을 요구하고있다, 그게 전부

Overriding vs method hiding