Javascript 将js翻译成C#

Javascript 将js翻译成C#,javascript,c#,unity3d,Javascript,C#,Unity3d,在将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/fa

在将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;
}
var目标:游戏对象;
var衰减:浮动=3.0;
函数更新(){
if(target.GetComponent.(.material.color.a>0)
target.GetComponent.(.material.color.a-=Time.deltaTime/fadeDuration;
}
翻译的C#脚本:

使用UnityEngine;
使用系统集合;
公共类淡出主体:MonoBehavior{
游戏对象目标;
浮动衰减率=3.0f;
无效更新(){
if(target.GetComponent.(.material.color.a>0)
target.GetComponent.(.material.color.a-=Time.deltaTime/fadeDuration;
}
}
我收到Unity3d的错误,上面说:


folder/FadeOutDeadBody.cs(9,29):错误CS1525:意外符号
只需在
GetComponent中删除点即可。
=>
GetComponent
GetComponent。(
->
GetComponent()
你有多余的“.”,这会使编译器崩溃

编辑以回应您对罗曼·阿加答案的评论

您需要扩展它,使其看起来像这样(C#的工作原理与JS稍有不同,因此您不能像JS那样灵活)

Renderer r=target.GetComponent();
颜色c=r.material.Color;
c、 a-=时间增量/衰减;
r、 材料颜色=c;
C#中颜色的r、g、b和a属性是只读的,因此必须修改整个颜色值

注意:我现在所在的计算机上没有Unity,因此这是未经测试的。我们来看看我今天的记忆力有多好。

而不是这个

target.GetComponent.<Renderer>()
只是在将代码从一种语言“翻译”到另一种语言时要小心,因为约定是特定于语言的。查看unity文档,调用
GetComponent
的正确方法是作为泛型,因此您可以通过删除调用GetComponent的代码中的句点来解决这个特定问题

一般来说,由于C#与JavaScript非常不同,您可能会遇到更多类似的问题,所以请注意这一点


参考资料:

每个人都忽略了这一点,所以我决定发布

不能直接修改
颜色的alpha。您必须创建新的
颜色
,修改alpha,然后将其分配回
材质
颜色。也可以去掉圆点。它应该是这样的:

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;
        }
    }
}
公共类淡出主体:单一行为
{
公共游戏对象目标;
浮动衰减率=3.0f;
渲染器渲染器;
void Start()
{
renderer=target.GetComponent();
}
无效更新()
{
if(renderer.material.color.a>0)
{
颜色=renderer.material.Color;
color.a-=Time.deltaTime/fadeDuration;
renderer.material.color=颜色;
}
}
}

我投票将此问题作为离题题结束,因为StackOverflow不是一个编码服务。我不同意,这是一个有效的问题,在来这里寻求帮助之前,需要经过演示才能解决。然后这是一个质量问题,或者他应该打开一个新问题,而不是离题。完成了。现在它显示:FadeOutDeadBody.cs(10,46):错误CS1612:无法修改“UnityEngine.Material.color”的值类型返回值。考虑把这个值存储在一个临时变量中,你应该遵循Cody接下来所说的,它应该是FasDead DistBooS.Cs(10. 12):错误CS1061:类型<代码> UNIYEngEngy.GAMObjor不包含< <代码>目标>的定义,并且没有类型< /COD> UNIYEngEngy的扩展方法<代码>目标。(是否缺少using指令或程序集引用?)错误CS1612:不能修改“unyEngimix.Orth.Cube”的值类型返回值。考虑将值存储在一个临时变量感谢BULL中!我会检查它!这个答案是有效的,但是您应该将渲染器保存在第一个调用中,而不是使用<代码> GETCaseTune()。
两次。GetComponent是一个缓慢的操作,因此您会发现尽可能避免调用诸如
GetComponent
FindGameObject
FindGameObjectsSwithTag
之类的调用会带来性能上的好处。啊,我看到您在我键入之后就立即编辑了它comment@Cody快速提供答案,以便我做那件事是的,我做了:)谢谢你,科迪,看起来一切正常,但现在我得到了这个错误:NullReferenceException:对象引用未设置为对象FadeOutdReadBody.Update()的实例(位于Assets/TestLevel/BEAST/FadeOutdReadBody.cs:19)将“target”设置为public,然后确保从编辑器中分配目标。看看更新的代码。我只是把它作为一个公共变量。将目标游戏对象拖动到目标插槽。
target.GetComponent.<Renderer>()
target.GetComponentInParent<Renderer>()
target.GetComponent(typeof(Renderer))
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;
        }
    }
}