C# 通知游戏对象更改的最佳方式?(统一脚本组织/授权)
目前我有一个有两种模式的游戏,一种是构建模式,一种是游戏模式 对象在构建模式下的行为与在播放模式下的行为不同 处理这些对象最简单的方法是什么?我应该使用开关吗?考虑到OnUpdate中的内容,我目前对性能和代码可读性的设置如何 下面是一个例子,我有什么,检查我的游戏控制器是在建设模式或播放模式。它还可以获取这些模式何时启动,并通过操纵bools来运行函数一次。我正在寻找的答案可以帮助我在优化游戏、代码可读性和代码整体格式时做出更好的决策。我知道一定有更简单的方法,无论是使用侦听器还是事件/触发器 一次游戏中可能有大约一百个这样的项目,所以我想确保我不会因为太多的更新调用而破坏游戏。现在,当我有很多这样的东西时,性能并没有下降,但这并不是不优化我的游戏的理由C# 通知游戏对象更改的最佳方式?(统一脚本组织/授权),c#,performance,unity3d,readability,C#,Performance,Unity3d,Readability,目前我有一个有两种模式的游戏,一种是构建模式,一种是游戏模式 对象在构建模式下的行为与在播放模式下的行为不同 处理这些对象最简单的方法是什么?我应该使用开关吗?考虑到OnUpdate中的内容,我目前对性能和代码可读性的设置如何 下面是一个例子,我有什么,检查我的游戏控制器是在建设模式或播放模式。它还可以获取这些模式何时启动,并通过操纵bools来运行函数一次。我正在寻找的答案可以帮助我在优化游戏、代码可读性和代码整体格式时做出更好的决策。我知道一定有更简单的方法,无论是使用侦听器还是事件/触发器
public class GameItem: MonoBehaviour
{
//....
private void Update()
{
CheckMode();
}
// Checks Current Mode, And If StartingMode
private void CheckMode()
{
// check to see if starting build mode,
if (!gameController.inPlayMode)
{
if (!startingBuildMode)
{
WhenStartingBuildMode();
startingPlayMode = false;
startingBuildMode = true;
}
WhileInBuildMode();
return;
}
// check to see if starting play mode,
if (!startingPlayMode)
{
startingPlayMode = true;
WhenStartingPlayMode();
startingBuildMode = false;
}
// what to do while in play mode
WhileInPlayMode();
}
}
这将代表我使用的模式(有一个额外的功能,可以在编辑器中切换模式,不确定您是否需要它)
如果您想把GooCalm机制放在GAMEngRealDror中,您可能需要考虑做一些类似于
的事情。 public System.Action<bool> OnModeChanged;
private bool _isBuildMode;
public bool isBuildMode
{ get { return _isBuildMode;}
set {
_isBuildMode=value;
if (OnModeChanged!=null) OnModeChanged(value);
}
}
公共系统。对模型的操作已更改;
私人建筑模式;
公共布尔isBuildMode
{get{return}isBuildMode;}
设置{
_isBuildMode=值;
如果(OnModeChanged!=null)OnModeChanged(value);
}
}
然后可以订阅子组件
void Start()
{
var gameController=GetComponentInParent<GameController>();
if (gameController!=null) gameController.OnModeChanged+=(x)=>
{
isBuildMode=x;
};
}
void Start()
{
var gameController=getComponentParent();
如果(gameController!=null)gameController.onModelChanged+=(x)=>
{
isBuildMode=x;
};
}
更新时,能否为OnUpdate()方法提供一些代码?更新时运行CheckMode()类,该类在WhileInPlayMode()或WhileInBuildMode()期间持续运行。这是一个基类,因此这些函数根据项目执行不同的操作。例如,一个敌人的物体会不断地检查玩家的位置。或者一个箱子会不断更新,无论它是否打开。这比我的要流畅得多,我喜欢它!如果我想添加WhenStartingBuildMode,我会使用:If(!isBuildMode)WhenStartingBuildMode()?此外,由于物品从游戏控制器获得模式,在我的游戏控制器上放置bools是否更好?很难知道你的游戏控制器是什么,但很可能最好在那里放置bools。我展示的代码还有一个很好的特性,就是能够绑定到toggles。我已经编辑了我的答案,添加了关于在何处引发事件的建议。
void Start()
{
var gameController=GetComponentInParent<GameController>();
if (gameController!=null) gameController.OnModeChanged+=(x)=>
{
isBuildMode=x;
};
}