Unity私有计数器变量初始化为错误值

问题描述 投票:0回答:1

我有这段代码可以控制一个简单的 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;
    }
}

我已经看到了一些建议,所以这就是我尝试过的:

  • 设置下一个切换为私人
  • 尝试将其用作 SerializeField,但不知道它应该做什么,所以我恢复了更改
  • 将其初始化为另一个变量的值,即 private static readonly float,但这也没有改变它。

我不会在脚本的其他任何地方更改变量。我使用本教程 (https://www.youtube.com/watch?v=lcw6nuc2uaU&list=WL&index=1) 统一制作可移动播放器,现在我只是编辑 AIController 以使其更有用。

c# unity3d
1个回答
0
投票

使用定时器来完成这个可能会更好:

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;}

};
© www.soinside.com 2019 - 2024. All rights reserved.