【问题标题】:Adding/removing a component in C# by pressing a GUI.Button does not function right in Unity3d通过按下 GUI.Button 在 C# 中添加/删除组件在 Unity3d 中不起作用
【发布时间】:2014-10-27 20:22:57
【问题描述】:

我在尝试将 js 脚本作为组件添加和删除到 C# 中的游戏对象时遇到了困难,因为我是 Unity 和编码的新手。

我有一个需要在运行时添加到 MainCamera 的 js,通过单击 GUI.Button。稍后必须使用相同的 GUI.Button 来销毁此脚本。

我已经设法在运行时在 MainCamera 上添加了 js 脚本,代码如下:sn-p:

public Bearing addBearing; // "Bearing" is the js script and "addBearing the variable to    reference this

//some other codding
.
.
// Add and remove Bearing with this button
public bool addBearing;

void OnGUI(){
if(GUI.Button(new Rect(10,10, 100, 100), "Bearing"))

addBearing= !addBearing;

if(addBearing){
addBearing  = GameObject.FindGameObjectWithTag("MainCamera").gameObject.AddComponent<Bearing>();

}else{

GameObject.FindGameObjectWithTag("MainCamera").gameObject.GetComponent<Bearing>();

Destroy(GetComponent<Bearing>());

问题是,当我点击“轴承”GUI.Button 时,js 脚本“轴承”没有被破坏。

此代码逻辑中缺少某些内容,但我在编写 C# 以找到解决方案方面经验不足。那么,有人可以帮我处理这段代码吗?将不胜感激。谢谢大家的答案。

【问题讨论】:

    标签: c# button unity3d unityscript destroy


    【解决方案1】:

    与其添加和销毁,不如使用

    GetComponent(Bearing).enabled = false;禁用和

    GetComponent(Bearing).enabled = true;启用

    【讨论】:

    • 你好@Thilina Premasiri。我需要让组件被破坏,因为“轴承”是一个加速度计和指南针脚本,如果“MainCamera”被连接甚至被禁用,它就会弄乱。您是否碰巧知道如何销毁这个组件,就像我发布的代码 sn-p 中一样?
    • else{ GameObject g=GameObject.FindGameObjectWithTag("MainCamera").gameObject.GetComponent&lt;Bearing&gt;(); Destroy(g); 在这个 sn-p 中修改你的 else 部分
    【解决方案2】:

    当您调用GetComponent&lt;Bearing&gt;() 时,您将获得当前范围内对象上的Bearing 组件。如果您没有指定范围,那么它将在脚本附加到的 GameObject 上查找组件。所以而不是:

    Destroy(GetComponent&lt;Bearing&gt;());

    相反,你想要:

    Destroy(GameObject.FindGameObjectWithTag("MainCamera").GetComponent&lt;Bearing&gt;());

    GameObject.FindGameObjectWithTag 建立作用域,然后GetComponent&lt;Bearing&gt; 在之前建立的任何作用域上获取对Bearing 组件的引用。因此,将这两者结合起来会得到一个来自 Main Camera 的 Bearing 组件,该组件将传递给销毁它的 Destroy 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-09
      • 2014-11-03
      • 2015-12-07
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      相关资源
      最近更新 更多