0

目前我真的不太了解 C#;我只是以光速通过 Unity 速成课程。

我尝试将此脚本从我的桌面拖放到 Unity 项目视图中的资产文件夹,但它显示“解析错误 1,13”。我不确定脚本有什么问题。有经验的人可以看一下吗?

var emitter : ParticleEmitter = GetComponentsInChildren(Partic­­leEmitter);

if (Input.GetButton("Fire1")){ emitter.emit=true;

}

else{

emitter.emit=false;

}
4

5 回答 5

3

我自己没有使用过带有 C# 的 Unity,但我可以告诉你,你的脚本甚至不是有效的 C# 语法。C# 变量以以下两种方式之一输入:

  • 隐式:var x = SomeExpression;其中 x 自动采用表达式的类型
  • 明确地:ParticleEmitter x = SomeExpression;其中 x 是 aParticleEmitter并且表达式必须是相同的类型。

具体来说,该错误与:您的第一行中的有关。这是非法的 C# 语法,因为唯一可以合法出现在该位置的字符是=.

于 2012-11-25T00:15:54.943 回答
2

这不是 C#,这是用 UnityScript(基于 JavaScript)编写的。

您可以这样说,因为“:”冒号字符在 UnityScript 中用作类型声明,但在 C# 中无效。

于 2012-11-25T04:14:31.160 回答
1

我自己从未使用过 C#,但我会尝试通过在第一行省略“:ParticleEmitter”部分来尝试隐式类型声明......

于 2012-11-25T00:11:26.223 回答
0

GetComponentsInChildren() 返回组件的类型。解析错误可能来自编译器试图协调将类型传递ComponentParticleEmitter类型。

Unity3D 文档中的这个示例Component.GetComponentsInChildren应该可以帮助您:

 // Disable the spring on all HingeJoints 
 // in this game object and all its child game objects
 var hingeJoints : Component[];
 hingeJoints = GetComponentsInChildren (HingeJoint);
 for (var joint : HingeJoint in hingeJoints) {
     joint.useSpring = false;
 }
于 2012-11-25T01:37:31.317 回答
0

正如 CC Inc 所说,您提供的代码不是 C#

我试图为你转换它:

ParticleEmitter emitter = GetComponentsInChildren<ParticleEmitter>().FirstOrDefault();

if (emitter != null)
{
    if (Input.GetButton("Fire1"))
    {
        emitter.emit = true;
    }
    else
    {
        emitter.emit = false;
    }
}

GetComponentsInChildren 返回一个数组。因此,为了模仿你上面的内容,我已经说过我想要第一个,如果你找不到任何给我默认值(它是空的)。

这可能不是您所需要的,您可能只需要以下几行:

bool fire = Input.GetButton("Fire1");
ParticleEmitter[] emitters = GetComponentsInChildren<ParticleEmitter>();
foreach(ParticleEmitter emitter in emitters)
{
    emitter.emit = fire; 
}

上面将存储 Input.GetButton 的布尔结果,然后遍历它找到的所有发射器并将它们设置为与 Input.Getbutton 相同的值。

显然以上只是猜测你想要什么,我希望它有所帮助。

于 2012-11-25T15:03:57.970 回答