C# 无法使用来自其他脚本Unity3d的布尔变量

C# 无法使用来自其他脚本Unity3d的布尔变量,c#,unity3d,boolean,C#,Unity3d,Boolean,我有使对象旋转的代码,如果我在脚本中调用它,它的工作正常 剧本 public class ship : MonoBehaviour { private bool toRotate=false; public void enemyRotate() { toRotate = true; Debug.Log("er "+ toRotate); } void Update () { if (toRotate) {

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

剧本

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调用它,我会得到调试日志,说明变量已设置为true,但旋转动画根本不起作用。我尝试过不同的方法,但无法找出我做错了什么。我甚至使用了一个公共bool,并试图从另一个脚本将其设置为真,但什么也没有

如有必要,我建议避免访问私有变量use接口,但更好的方法是像下面这样声明函数并传递适当的布尔参数:

 void Update (bool toRotate) {
 if (toRotate)
        {

            transform.RotateAround(player.transform.position, Vector3.forward, 100 * Time.deltaTime);
        }
}
在这种情况下,请在行外注释:

//private bool toRotate=false;

希望这会有所帮助。RGD,

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

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

所以我想出来了。我只需要让toRotate保持静态。不真实


如果你想帮我,谢谢你

在第一个示例中,更新方法是如何调用的?请使用unity3d标记。