如何从其他对象更改脚本变量?

时间:2019-06-19 16:01:41

标签: c# unity3d

在Unity项目中,我有一个缩小按钮和一个球。当我单击缩小按钮时,球应该播放缩小的动画。

我正在尝试更改“收缩”变量,以便动画可以播放。

缩小按钮代码:

   private ShrinkBall referenceScript;

   void Start()
   {
       referenceScript = ball.GetComponent<ShrinkBall>();
   }

   void OnMouseDown()
   {
       if (referenceScript.shrink == true)
       {
           referenceScript.shrink = true;
       } else
       {
           referenceScript.shrink = false;
       }
}

球脚本:

public bool shrink = false;
    private Animator shrinkAnim;

    void Start()
    {
        shrinkAnim = GetComponent<Animator>();
    }

    void Update()
    {
        if (shrink == false)
        {
            shrinkAnim.SetBool("shrink", false);
        } else
        {
            shrinkAnim.SetBool("shrink", true);
        }
    }

当我单击缩小按钮时,“缩小”变量保持为false。我知道它正在访问它,因为它最初告诉我它不在范围内,因此我将其设置为公共变量。

所以动画永远不会播放,因为收缩不会改变。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您永远不会更改shrink的值,但要使其保持与原来相同的值...

您可能想做

void OnMouseDown()
{
    referenceScript.shrink = !referenceScript.shrink;
}

那么,您不应该一直在SetBool中使用Update,而应该只在更改后使用它。

您可以例如使用类似

的方法
public void ToggleShrink()
{
    shrink = !shrink;

    shrinkAnim.SetBool("shrink", shrink);
}

然后您可以简单地从第一个脚本中调用它,例如

private void OnMouseDown()
{
    referenceScript.ToggleShrink();
}