Translation UnityScript to C# : yield & transform.positi
本文关键字:amp transform positi yield UnityScript to Translation | 更新日期: 2023-09-27 18:13:22
我实际上正在努力翻译原来在UnityScript到c#的统一项目。我已经翻译了项目的很大一部分,但我遇到了一些问题:
第一个问题与yield有关:
yield Attack();
yield;
我已经替换了所有的:yield WaitForSeconds()
,但我不知道如何替换这个。
变换的另一个问题。位置:
transform.eulerAngles.y += Input.GetAxis("Horizontal") * speedIdleRotate;
transform.position.y = currentHeight;
抛出错误:
UnityEngine.Transform.eulerAngles is not a variable
UnityEngine.Transform.position is not a variable
似乎不考虑。y,但在js中它工作得很好。如何在c#中处理这个问题?
在JS中
yield; // this means that wait for one frame
在c# ,
yield return null;
我不是100%确定,但是对于yield Attack();
应该是
yield return Attack();
transform.eulerAngles.y += Input.GetAxis("Horizontal") * speedIdleRotate;
试试这个:
transform.eulerAngles = new Vector3( transform.eulerAngles.x , transform.eulerAngles.y + Input.GetAxis("Horizontal") * speedIdleRotate , transform.eulerAngles.z);
transform.position.y = currentHeight;
试试这个:
transform.position =new Vector3(transform.position.x,currentHeight,transform.position.z);
对不起,如果我错了。
我只想复制Cyclops对yield语句的回答。
Unity c# vs Unity Javascript的产量
虽然Unity的文档(简短地)涵盖了在编写c#脚本(第4步)中使用Yield的语法差异,但也有一个Unity答案,涵盖了如何在c#中使用Yield,它有更详细的解释。此外,equalsequals的答案有一个值得一看的协程教程的链接。
Unity的Yield在。net c# Yield上有额外的功能
上面的段落涵盖了Unity的c#和Javascript语法的差异。然而,我认为值得解释的是Unity的Yield语句的行为(在c#和Javascript中),有一些微软的。net c#行为中没有的额外功能。
基本上,Unity已经为Yield添加了YieldInstruction(以及WaitForSeconds之类的子类)。这些类使Yield能够暂时暂停函数,直到满足某个条件。如果参数为零,则暂停一帧。如果它有一个参数WaitForSeconds:yield return new WaitForSeconds (2.0f); // pauses for 2 seconds.
则会暂停几秒钟。如果参数是另一个协程,则暂停,直到该协程完成。
* ** *Yield只在协程中以这种方式工作。中启动协程c#使用StartCoroutine,而它是自动调用的Javascript。
第二题答案你需要记住基本的区别,如上所述的链接。很快我就知道了:
这是因为你在用c#编码。在javascript中,编译器允许你修改transform的组件值。但是在c#中,你必须创建一个全新的Vector3并在一次操作中赋值。
在Javascript中,编译器基本上"隐藏"了它在幕后为你做这件事的事实。more