>我有 3 个复选框
public bool stateForward = false, stateReverse = false, stateRandom = false;
我希望每次只能选择一个复选框。而且在编辑器模式下以及游戏运行时也是如此。当游戏运行时,我想让它对游戏产生影响。
在脚本的顶部,我添加了:
[ExecuteInEditMode]
我尝试在开始功能中做
void Start()
{
while (true)
{
if (stateForward == true)
{
stateRandom = false;
stateReverse = false;
}
else if (stateReverse == true)
{
stateRandom = false;
stateForward = false;
}
else if (stateRandom == true)
{
stateForward = false;
stateReverse = false;
}
}
anims = GetComponent<Animations>();
waypoints = GameObject.FindGameObjectsWithTag("ClonedObject");
objectsToMove = GameObject.FindGameObjectsWithTag("Robots");
originalPosition = objectsToMove[0].transform.position;
}
但是我正在播放动画:检测到无法访问的代码在更新功能中:
void Update()
{
if (MyCommands.walkbetweenwaypoints == true)
{
DrawLinesInScene();
anims.PlayState(Animations.AnimatorStates.RUN);
WayPointsAI();
}
}
而在WayPointsAI
private void WayPointsAI()
{
if (stateForward == true)
{
if (targetIndex == waypoints.Length)
targetIndex = 0;
}
if (stateReverse == true)
{
if (targetIndex == 0)
targetIndex = waypoints.Length;
}
waypoint = waypoints[targetIndex].transform;
float distance = Vector3.Distance(objectsToMove[0].transform.position, waypoint.transform.position);
objectsToMove[0].transform.rotation = Quaternion.Slerp(objectsToMove[0].transform.rotation, Quaternion.LookRotation(waypoint.position - objectsToMove[0].transform.position), rotationSpeed * Time.deltaTime);
//move towards the player
if (distance < 30)
{
objectsToMove[0].transform.position += objectsToMove[0].transform.forward * slowDownSpeed * Time.deltaTime;
}
else
{
objectsToMove[0].transform.position += objectsToMove[0].transform.forward * moveSpeed * Time.deltaTime;
}
if (distance < 2)
{
if (stateForward == true)
targetIndex++;
if (stateReverse == true)
targetIndex--;
}
}
首先,你永远不会摆脱你的Start()
方法。 你有一个永远无法打破的while(true)
循环,所以你会被困在那里。
不要选择只能选择其中一个的多个复选框,只需使用枚举。 Unity 将为您提供一个下拉菜单,您可以选择三种可用状态之一。
enum MyStateEnum{ Forward, Reverse, Random }
public MyStateEnum State;
如果您希望它们是独占的,您可能应该使用单个enum
字段而不是三个bool
字段。你的枚举将具有值 Forward
、 Reverse
和 Random
,而您的 MonoBehavior
将具有枚举类型的单个字段。这可确保在任何给定时间只选择一个值,并且编辑器应显示一个用于选择哪个值的下拉列表,而不是一系列复选框。这不仅修复了编辑器 UI 问题,而且还会导致代码更干净,潜在错误更少。