Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将UnityScript转换为C#:收益率&;变换位置_C#_Unity3d_Unityscript - Fatal编程技术网

将UnityScript转换为C#:收益率&;变换位置

将UnityScript转换为C#:收益率&;变换位置,c#,unity3d,unityscript,C#,Unity3d,Unityscript,实际上,我正在将UnityScript中的一个unity项目翻译成C。我已经翻译了项目的大部分内容,但我遇到了一些问题: 第一个问题与收益率有关: yield Attack(); yield; 我已经替换了所有的:yield WaitForSeconds(),但我不知道如何替换它 其次,transform.position还有一个问题: transform.eulerAngles.y += Input.GetAxis("Horizontal") * speedIdleRotate; trans

实际上,我正在将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#?

中处理这个问题

yield; // this means that wait for one frame
在C#中


我不是百分之百确定,但对于屈服攻击()

应该是

yield return Attack();

因为

试试这个:

transform.eulerAngles = new Vector3( transform.eulerAngles.x , transform.eulerAngles.y + Input.GetAxis("Horizontal") * speedIdleRotate , transform.eulerAngles.z);
transform.position =new Vector3(transform.position.x,currentHeight,transform.position.z);

因为

试试这个:

transform.eulerAngles = new Vector3( transform.eulerAngles.x , transform.eulerAngles.y + Input.GetAxis("Horizontal") * speedIdleRotate , transform.eulerAngles.z);
transform.position =new Vector3(transform.position.x,currentHeight,transform.position.z);

对不起,如果我有什么错误。

我只想复制Cyclops for yield语句

Unity C#与Unity Javascript的对比

尽管Unity的文档(简要地)涵盖了在编写C#脚本时使用Yield的语法差异(步骤4),但也有一个Unity的答案,其中有更详细的解释。此外,equalsequals的答案还有一个指向协同程序教程的链接,值得一看

Unity的收益率比.NET C#收益率具有更多功能

上面一段介绍了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.
然后它会暂停几秒钟。如果该参数是另一个协同程序,那么它将暂停,直到该协同程序完成

**

只有在协同程序中,产量才会以这种方式工作。在中国开始合作 C#,您使用startcroutine,而它是在中自动调用的 Javascript

**

在回答第二个问题时 您需要记住上述链接所描述的基本区别。很快我就可以看出:

这是因为您正在用C#编写代码。在javascript中,编译器允许您修改transform.position的concomponent值,但在C#中,它不允许-您必须创建一个全新的矢量3并在一个操作中分配它


在Javascript中,编译器基本上“隐藏”了这样一个事实,即它在幕后为您这样做。

产量有什么问题?js有它的用法吗?因为c#使用它来构建可枚举的集合。@请展示您的原始JS代码和当前的c#代码,用于
Attack()
和周围的
yield
方法。谢谢您的回答,除了yield return new Attack()。抛出以下错误:Attack()是一个方法,但用作类型。我只是替换并返回新的Attack();屈服回击();它正在工作!
yield return new WaitForSeconds (2.0f); // pauses for 2 seconds.