如何将 JavaScript 代码转换为 C# for Unity2D

本文关键字:for Unity2D 转换 代码 JavaScript | 更新日期: 2023-09-27 18:34:46

我有这段代码,是我用javascript为我的游戏制作的,现在我正在尝试将其转换为c#。我想我大部分都做对了,但我在pauseGUI.enabled = false;时遇到了错误

using UnityEngine;
using System.Collections;
public class Pause : TouchLogicV2  {
    bool pause = false;
    GUITexture pauseGUI;
    pauseGUI.enabled = false; 
    public override void OnTouchBegan()
    {
        if(pause==true){
            pause = false;
        }
        else {
            pause = true;
        } if(pause == true) {
            Time.timeScale = 0.0;
            pauseGUI.enabled = true;
        }
        else {
            Time.timeScale = 1.0;
            pauseGUI.enabled = false;
        }
    } 
}

如何将 JavaScript 代码转换为 C# for Unity2D

这不起作用的原因是因为你试图在错误的范围内更改GUITexture的属性。只能在方法外部创建和分配属性。将 pauseGUI.enabled 的赋值移动到构造函数,如下所示:

public Pause() {
    pauseGUI.enabled = true;
}

正如程序员指出的那样,您也可以在Start方法中执行此操作。

其次,这更像是一个风格问题,你永远不需要写if(x == true) - 只需写if(x)

件事会导致编译器错误

1( 7号线pauseGUI.enabled = false;

不能在类中设置类属性。您必须在类内部的函数中执行此操作。例如:

void Start ()
{
        pauseGUI.enabled = false; 
}

您也可以在OnTouchBegan((函数中执行此操作。
您还可以创建一个自定义函数,您可以调用该函数来启用您的 paugeGUI。

2(如果您修复第一个问题,则第17行和第21行也会导致错误。这些行包含

Time.timeScale = 0.0; and Time.timeScale = 1.0; 

它会导致错误,因为时间刻度浮点数的数据类型。要修复它,您必须在分配给timeScale 的每个数字的末尾添加"F"。它应该看起来像这样:

Time.timeScale = 0.0F;  and Time.timeScale = 1.0F;

以下是您的整个固定代码:

using UnityEngine;
using System.Collections;
public class Pause : TouchLogicV2  {
    bool pause = false;
    GUITexture pauseGUI;
    //pauseGUI.enabled = false;  This must be done inside a function 
    public override void OnTouchBegan()
    {
        if(pause==true){
            pause = false;
        }
        else {
            pause = true;
        } if(pause == true) {
            Time.timeScale = 0.0F; //Must have F at the end of the number
            pauseGUI.enabled = true;
        }
        else {
            Time.timeScale = 1.0F; //Must have F at the end of the number
            pauseGUI.enabled = false; 
        }
    } 
}