如何在Unity3d中使GUI Button激活脚本(JS或C#)

时间:2014-04-21 11:36:20

标签: variables user-interface unity3d runtime-error unityscript

我真的需要你的帮助来制作我的GUI.Button启动附加到GameObject的JS脚本(或C#)。这是我在申请中的内容。一个JS脚本“doRotate.js”,它在GameObject上进行旋转。

如果通过在检查器中单击将“public var doRotation = false”的值设置为“true”,则旋转开始

    #pragma strict

    public var doRotation = false;

    function Update()
    {
        if (doRotation)
        {
            transform.Rotate(new Vector3(0, 50, 0) * Time.deltaTime);
        }
    }

我还有一个JS脚本,可以呈现一些GUI.buttons。我想要按钮2,一旦按下调用(运行)“doRotate.js”脚本,意味着访问布尔“doRotation”并将其值设置为“true”,就好像它是在检查员。

以下是我到目前为止所尝试的,但是我收到此错误“错误BCE0020:访问非静态成员'doRotation'需要'doRotate'类型的实例。(BCE0020)”。 这是GUI.button上的代码:

    var native_width :  float = 480;
    var native_height : float = 320;
    var addImage : Texture2D;

    var btnTexture1 : Texture;
    var btnTexture2 : Texture;


    function OnGUI ()
    {
    var rx : float = Screen.width / native_width;
    var ry : float = Screen.height / native_height;
    GUI.matrix = Matrix4x4.TRS (Vector3(0, 0, 0), Quaternion.identity, Vector3 (rx, ry, 1));

    GUI.Box( Rect(20, 200, 429, 129) ,addImage, "");
      if (!btnTexture1) {
            Debug.LogError("Please assign a texture on the inspector");
            return;
            }

            GUI.Button(Rect(54, 222, 52, 35), btnTexture1);

    if (!btnTexture2) {
            Debug.LogError("Please assign a texture on the inspector");
            return;
            }

            if(GUI.Button(Rect(118, 222, 52, 35), btnTexture2));

                var runScript : GameObject[] =
                GameObject.FindGameObjectsWithTag("markerObject");
                for(var doRotation : GameObject in runScript) {
                var script : doRotate = doRotation.GetComponent(doRotate);
                if(script)
                doRotate.doRotation(); //Error BCE0020: An instance of type 'doRotate' is required to access non static member 'doRotation'. (BCE0020)
            }

我做错了什么?我已经尝试了好几天,让它工作没有成功。如何在点击GUI.Button?

时访问此变量

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

发生此错误是因为您正在尝试访问" doRotate"的非静态成员。与一个类,而不是它的实例。

在以下代码中:

var script : doRotate = doRotation.GetComponent(doRotate);
if(script)
   doRotate.doRotation(); //Error BCE0020: An instance of type 'doRotais    required to access non static member 'doRotation'. (BCE0020)

您正在将doRotate的实例设置为var script,此var存储doRotate实例的引用,您可以访问var" doRotation"并改变他的价值。

这样的事情:

var script : doRotate = doRotation.GetComponent(doRotate);
if(script)
   script.doRotation = true;