不能使用来自其他Unity3d脚本的布尔变量

本文关键字:脚本 布尔 变量 Unity3d 其他 不能 | 更新日期: 2023-09-27 18:10:15

我有代码,使对象旋转,它的工作正常,如果我从脚本内调用它。

ScriptA

public class ship : MonoBehaviour {
private bool toRotate=false;
    public void enemyRotate()
   {
         toRotate = true;
         Debug.Log("er "+ toRotate);
    }
 void Update () {
 if (toRotate)
        {
            transform.RotateAround(player.transform.position, Vector3.forward, 100 * Time.deltaTime);
        }
}

如果我在scriptA内调用enemyRotate,那么我肯定会得到旋转,并且调试日志显示该变量已被设置为true。但是如果我像这样从另一个函数中调用它:

脚本B

  public class Projectile : MonoBehaviour {
      public ship ship_object;
      void Start(){
      ship_object=gameObject.AddComponent<kanaship> ();
      }
      void callFunction(){
      ship_object.enemyRotate()
      }
 }

如果我从callFunction调用它,我得到Debug日志说变量已被设置为true,但是旋转动画根本不工作。我试过不同的变体,但不能弄清楚我做错了什么。我甚至使用了一个公共bool,并试图将其设置为true从另一个脚本,但没有。

不能使用来自其他Unity3d脚本的布尔变量

我建议避免访问私有变量(必要时使用Interface),但更好的方法是像下面这样声明函数并传递一个适当的布尔参数:

 void Update (bool toRotate) {
 if (toRotate)
        {
            transform.RotateAround(player.transform.position, Vector3.forward, 100 * Time.deltaTime);
        }
}

在本例中,注释掉行:

//private bool toRotate=false;

希望这将帮助。祝好,

您是否尝试旋转带有ScriptB或其他游戏对象的游戏对象?现在,您的代码将kanaship脚本添加到具有ScriptB的游戏对象中,并应该旋转它。如果你想旋转其他游戏对象,你应该找到它,添加脚本并调用函数,例如:

GameObject shipObject = GameObject.Find("EnemyShip").AddComponent<ship>().enemyRotate();

我明白了。我只需要将toRotate设为静态。虚幻。

如果你试图帮助我,谢谢你!