我正在为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