2017-04-05 96 views
2

Heirarchy structureUnity SetActive(true)最初将其设置为false后无法工作?

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函数(记住它附加到一个按钮),我已经将它设置为活动,但它不工作。任何人都可以帮助我这个。谢谢。

编辑: - 此脚本附加在“球”上。并且球附着在按钮上。 “触摸屏”是Canvas的子项。

+0

这个脚本是在什么对象上? – CNuts

+0

这个脚本附在球上,球附在按钮上 –

+0

好的,“触摸屏”如何是它的父母。也许显示一个你的图像等级将提供更多的信息。 – CNuts

回答

3

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

From the documentation:

此功能只返回活跃GameObjects。

你需要设置你的Touch Panelpublic GameObject myPanel,并在检查分配它,那么你可以启用和禁用它。

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

那么我该怎么做。创建一个公共的游戏对象并将其附加到那里 –

+0

@SamratLuitel正是这样,你应该这样做。 – CNuts

+0

非常感谢你。最后我解决它。我感到自己真的很愚蠢 –

相关问题