需要协助将JS转换为C#。
原始剧本:
var target : GameObject;
var fadeDuration : float = 3.0;
function Update(){
if (target.GetComponent.<Renderer>().material.color.a > 0)
target.GetComponent.<Renderer>().material.color.a -= Time.deltaTime/fadeDuration;
}
翻译的C#脚本:
using UnityEngine;
using System.Collections;
public class FadeOutDeadBody : MonoBehaviour {
GameObject target;
float fadeDuration = 3.0f;
void Update (){
if (target.GetComponent.<Renderer>().material.color.a > 0)
target.GetComponent.<Renderer>().material.color.a -= Time.deltaTime/fadeDuration;
}
}
我收到来自Unity3d的错误说:
folder / FadeOutDeadBody.cs(9,29):错误CS1525:意外的符号
<', expecting
标识符&#39;
任何想法如何解决这个问题?
答案 0 :(得分:6)
只需删除GetComponent.<Renderer>
中的点
=&GT; GetComponent<Renderer>
答案 1 :(得分:5)
每个人都把这个留下了,所以我决定发帖。
您无法直接修改color
的字母。您必须创建新的color
,修改Alpha,然后将其分配回Material
颜色。也删除点。这应该是它的样子:
public class FadeOutDeadBody : MonoBehaviour
{
public GameObject target;
float fadeDuration = 3.0f;
Renderer renderer;
void Start()
{
renderer = target.GetComponent<Renderer>();
}
void Update()
{
if (renderer.material.color.a > 0)
{
Color color = renderer.material.color;
color.a -= Time.deltaTime / fadeDuration;
renderer.material.color = color;
}
}
}
答案 2 :(得分:3)
GetComponent.<Renderer>()
- &gt; GetComponent<Renderer>()
你有额外的'。'在那里抛弃了编译器。
编辑以回复您对romain-aga答案的评论
你需要扩展它看起来像这样(C#的工作方式与JS有点不同,所以你不能那么灵活)
Renderer r = target.GetComponent<Renderer>();
Color c = r.material.color;
c.a -= Time.deltaTime/fadeDuration;
r.material.color = c;
C#中的r,g,b和颜色属性是只读的,因此您必须修改整个颜色值。
注意:我现在的计算机上没有Unity,所以这是未经测试的。我们会看到我的记忆今天有多好。
答案 3 :(得分:2)
而不是这个
target.GetComponent.<Renderer>()
你可能需要这个
target.GetComponentInParent<Renderer>()
或者
target.GetComponent(typeof(Renderer))
答案 4 :(得分:2)
在&#34;翻译&#34;时要小心代码从一种语言到另一种语言,因为约定是特定于语言的。查看统一文档,调用GetComponent
的正确方法是通用的,因此您只需删除调用GetComponent的代码中的句点即可解决此特定问题。
一般情况下,由于C#与JavaScript非常不同,您可能会遇到更多类似的问题,所以请注意这一点。