我正在爲C#編寫Unity的狀態管理器腳本。一切似乎都是正確的,但是當我在Unity內測試它時,所有Debug.Log行輸出兩次。我正在跟着一本名爲的書一起學習C#通過Unity 3D開發遊戲初學者指南。我已經研究和研究了這個參考文獻,我沒有看到我做錯了什麼。我認爲腳本遠未完成,但根據文本,每個日誌只能有一個輸出。爲什麼我在爲Unity編寫的狀態管理器腳本中爲每個Debug.Log生成兩個輸出?
這是我的ISBase接口。
namespace Assets.Code.Interfaces
{
public interface IStateBase
{
void StateUpdate();
void ShowIt();
void StateFixedUpdate();
}
}
這是我的BeginState,還有一個PlayState,WonState和LostState。除了類名,構造函數名,Debug.Log輸出以及新的SwitchState之外,它們幾乎完全相同。
using UnityEngine;
using Assets.Code.Interfaces;
namespace Assets.Code.States
{
public class BeginState : IStateBase
{
private StateManager manager;
public BeginState (StateManager managerRef) //Constructor
{
manager = managerRef;
Debug.Log ("Constructing BeginState");
}
public void StateUpdate()
{
if (Input.GetKeyUp (KeyCode.Space))
manager.SwitchState (new PlayState (manager));
}
public void ShowIt()
{
}
public void StateFixedUpdate()
{
}
}
}
這裏是實際的StateManager。
using UnityEngine;
using Assets.Code.States;
using Assets.Code.Interfaces;
public class StateManager : MonoBehaviour
{
private IStateBase activeState;
void Start()
{
activeState = new BeginState (this);
}
void Update()
{
if (activeState != null)
activeState.StateUpdate();
}
public void SwitchState(IStateBase newState)
{
activeState = newState;
}
}
@Aravol按照步驟,哇謝謝你修我的帖子,我知道這是很難讀。我不知道如何發佈,我只是複製並粘貼Unity隨附的MonoDevelop。我很抱歉發佈這樣一個馬虎的帖子。 – seanuhl 2015-01-09 20:48:49
這是我們與幾千名代表獲得的獎勵。只需記住下次點擊大碼塊的「代碼格式」按鈕(看起來像是「{}」),以便它們全部粘在一起 – David 2015-01-09 21:03:28
您需要發佈一個更多的相關內容 - 您配置的應用程序配置(或使用默認)跟蹤 - 可能最終會有2個跟蹤監聽器(可能是Output + Console並將控制檯重定向到VS中輸出)。 – 2015-01-09 21:12:40