【问题标题】:Unity Add ComponentUnity 添加组件
【发布时间】:2016-04-09 20:31:12
【问题描述】:

在将我编写的脚本添加到 在运行时的多维数据集时,我遇到了一些问题。我看到很多其他人问过这个问题,但他们似乎已经解决了这个问题。

代码:

            // Insert
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            // Appearance
            cube.GetComponent<Renderer>().material.SetColor("_Color", Color.yellow);
            Shader transparent;
            transparent = Shader.Find("UI/Default");
            cube.GetComponent<Renderer>().material.shader = transparent;
            //
            //
            // Postioning
            //cxcxcxcxc
            cube.transform.position = new Vector3((xpos), (ypos), zpos);
            cube.transform.localEulerAngles = new Vector3(90, 0, 0);


            var myScript = cube.gameObject.AddComponent<CoinCollect>();

此代码创建一个立方体,添加着色器并定位它。我现在想向其中添加一个我创建的名为“CoinCollect”的脚本,使用最后一行代码完成。这不会出现任何错误,但是当游戏运行时没有添加脚本。有人可以帮忙吗?我查看了文档,但它主要显示了我在做什么。

【问题讨论】:

  • "cube" 已经是你的游戏对象了。我认为这不会解决问题。 --> cube.AddComponent...
  • 再一次这样做没有给我任何错误,但是没有添加脚本。
  • 在你的场景中寻找新的游戏对象,看看CoinCollect是否附加到它。
  • @Andrew 我会要求您在我的答案下方评论哪个部分解决了它。这将帮助其他用户找到确切的问题。
  • 我发布的代码在一个 if 语句中,它有一些问题,所以它不是特定于错误的。

标签: c# unity3d


【解决方案1】:

确保脚本中的脚本名称和类名称相同。除此之外,您的代码没有任何问题。甚至官方文档也是这样做的:

Unity Docs:

// Adds the sphere collider to the game object  
SphereCollider sc = gameObject.AddComponent<SphereCollider>();

Unity Answers 上的this answer 建议添加脚本的方法相同:

AddComponent 和 GetComponent 使用脚本中类的名称,而不是脚本的路径。

AddComponent("DestroyOnTouch");

或者最好:

 AddComponent<DestroyOnTouch>();

因为如果找不到类,这会给你一个编译时错误,而不是运行时错误。

还有:

  • 你怎么知道脚本不起作用?尝试一个简单的Debug.Log() 并验证,这可能是脚本本身的一些错误。
  • 您在问题中发布的代码是否曾经被执行?你把它放在哪里了?在脚本中?然后检查它是否附加到某些gameObject 或被调用。此外,您可以考虑检查您编写代码的方法是否被调用。
  • 要检查上述内容,请将Debug.Log("The main script ran"); 放在同一代码块中并运行您的游戏。然后,检查 Unity 中的控制台。

【讨论】:

  • 哦,谢谢,我意识到硬币脚本没有正确命名,并且由于其他一些代码,该行实际上没有运行。下次我应该检查一下。谢谢:)
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多