不能使用另一个脚本Unity3d的布尔变量

时间:2014-06-25 23:25:51

标签: c# unity3d boolean

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

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

3 个答案:

答案 0 :(得分:0)

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

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

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

在这种情况下,请注释掉该行:

//private bool toRotate=false;

希望这会有所帮助。 RGDS,

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

所以我想通了。我只需要使用toRotate static。虚幻。

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