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#中处理这个问题?

Translation UnityScript to C# : yield & transform.positi

在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