我有这段代码可以控制一个简单的 AI 一次左右走动 2 秒。我使用 nextSwitch 指示何时应将移动乘以 -1。出于某种原因,当我玩游戏时,nextSwitch 被初始化为 28.938 或任何其他值,所以 AI 只在一个方向上移动 29 秒,直到它开始像它应该的那样起搏。当我不断重新运行我的游戏时,nextSwitch 值几乎总是被初始化为某个数字(比如 29.938),然后在运行一些之后它会上升到 35.394 并保持一段时间等等......
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "AIController", menuName = "InputController/AIController")]
public class AIController : InputController
{
private float movement = -1f;
private float switchRate = 2f;
private float nextSwitch = 0f;
public override bool RetrieveJumpInput() {
return true;
}
public override float RetrieveMoveInput() {
Debug.Log("test " + Time.timeSinceLevelLoad + " " + nextSwitch);
if (Time.time > nextSwitch) {
nextSwitch = Time.timeSinceLevelLoad + switchRate;
movement = movement * (-1f);
}
return movement;
}
}
我已经看到了一些建议,所以这就是我尝试过的:
我不会在脚本的其他任何地方更改变量。我使用本教程 (https://www.youtube.com/watch?v=lcw6nuc2uaU&list=WL&index=1) 统一制作可移动播放器,现在我只是编辑 AIController 以使其更有用。
使用定时器来完成这个可能会更好:
bool rightorleft = false;
System.Timers.Timer T = new System.Timers.Timer();
T.Interval = 2000;
T.Elapsed += delegate
{
if(rightorleft == false) rightorleft = true;
else{ rightorleft = false;}
};