繁体   English   中英

无法使用另一个脚本Unity3d中的布尔变量

[英]Cannot use a boolean variable from another script Unity3d

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

脚本A

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内调用敌人旋转,请确保足够旋转,并且调试日志显示该变量已设置为true。 但是,如果我从这样的另一个函数调用它:

剧本B

  public class Projectile : MonoBehaviour {
      public ship ship_object;

      void Start(){

      ship_object=gameObject.AddComponent<kanaship> ();
      }

      void callFunction(){

      ship_object.enemyRotate()
      }

 }

如果我从callFunction调用它,则会收到“调试”日志,说该变量已设置为true,但旋转动画根本不起作用。 我尝试了这种方法的不同变体,但无法弄清楚我做错了什么。 我什至使用了一个公共布尔,并尝试从另一个脚本将其设置为true,但是什么也没有。

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

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

            transform.RotateAround(player.transform.position, Vector3.forward, 100 * Time.deltaTime);
        }
}

在这种情况下,请离线注释:

//private bool toRotate=false;

希望这会有所帮助。 Rgds,

您是否要旋转附加了ScriptB的游戏对象或其他游戏对象? 现在,您的代码将kanaship脚本添加到具有ScriptB的游戏对象,并且应该对其进行旋转。 如果要旋转其他游戏对象,应该找到它,添加脚本并调用函数,例如:

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

所以我想通了。 我只需要使toRotate静态。 虚幻。

谢谢,如果您想帮助我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM