将UnityScript转换为C#:yield& transform.position

时间:2015-09-18 10:04:50

标签: c# unity3d unityscript

我实际上正在努力将最初使用UnityScript的Unity项目转换为C#。我已经翻译了项目的很大一部分,但我遇到了一些问题:

第一个问题与产量

相关联
yield Attack();
yield;

我已经替换了所有:yield WaitForSeconds(),但我不知道如何替换它。

其次是transform.position的另一个问题:

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#中处理它?<​​/ p>

2 个答案:

答案 0 :(得分:3)

在JS中,

yield; // this means that wait for one frame

在C#中,

yield return null;

我不是100%肯定,但是对于屈服攻击();

应该是

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);

抱歉,如果我有问题。

答案 1 :(得分:0)

我想将Cyclops answer复制为yield语句。

Unity C#与Unity Javascript的收益

尽管Unity的文档(简要地)涵盖了在编写C#脚本时使用Yield的语法差异(步骤4),但还有一个涵盖How do I Use Yield in C#的Unity Answer,其中有更详细的解释。此外,equalsequals的答案还有一个值得一试的Coroutine教程的链接。

Unity的Yield比.NET C#Yield

具有更多功能

上一段介绍了Unity的C#与Javascript语法的差异。但是,我认为值得解释的是Unity的Yield语句(在C#和Javascript中)的行为都有一些额外的功能,而不是微软的.Net C#行为。

基本上,Unity已将YieldInstruction(以及WaitForSeconds之类的子类)添加到Yield。这些类使Yield能够暂时暂停该功能,直到满足条件。如果参数为零,则暂停一帧。如果它的参数为WaitForSeconds:

yield return new WaitForSeconds (2.0f); // pauses for 2 seconds.
然后它会暂停几秒钟。如果参数是另一个Coroutine,则它会暂停,直到Coroutine完成。

**

  

产量只能在Coroutine中使用。开始一个Coroutine   C#,你使用StartCoroutine,而它是自动调用的   的JavaScript。

**

第二个问题答案 您需要记住上面给出的链接所描述的基本差异。我很快就能说出来:

这是因为您使用C#进行编码。在javascript中,编译器允许你修改transform.position的conmponent值,但是在C#中它没有 - 你必须创建一个全新的Vector3并在一次操作中分配它。

在Javascript中,编译器基本上“隐藏”了它在幕后为您执行此操作的事实。more