Unity SetActive(true)在首先将其设置为false后无法正常工作?

时间:2017-04-05 16:01:04

标签: c# unity3d

Heirarchy structure

using UnityEngine;
    using System.Collections;

    public class Ball : MonoBehaviour {
        private Rigidbody rigidbody;
        public Vector3 LaunchVelocity;
        private AudioSource audiosource;

        // Use this for initialization
        void Start ()
        {
            GameObject.Find("Touch Panel").SetActive(false);
            rigidbody = GetComponent<Rigidbody>();
            rigidbody.isKinematic = true;
            // disable touch control
            audiosource = GetComponent<AudioSource>();
        }



        // Update is called once per frame
        void Update()
        {
        }

        public void LaunchBall(Vector3 passedvelocity)
        {
            rigidbody.velocity = passedvelocity;
        }

        public void DropBall()  // This is attached to a button
        {
            rigidbody.isKinematic = false;
            GameObject.Find("Touch Panel").SetActive(true);

        }
    }

如上所示,我在启动功能时禁用了“触控面板”。但是在DropBall功能上(请记住它附在一个按钮上),我已将其设置为活动状态,但它无法正常工作。任何人都可以帮我解决这个问题。谢谢。

编辑: - 此脚本附在“球”上。并且球附在按钮上。 “Touch Panel”是Canvas的孩子。

1 个答案:

答案 0 :(得分:5)

您的问题是,当您停用Touch Panel时,GameObject.Find将无法找到它,因此您将无法再次启用它。

From the documentation:

  

此函数仅返回活动的GameObjects。

您需要将Touch Panel设置为public GameObject myPanel并在检查器中指定,然后您可以启用和禁用它。

myPanel.SetActive(false);
myPanel.SetActive(true);