Unity Public GameObject CS0117

时间:2016-04-21 08:41:45

标签: c# unity3d augmented-reality vuforia

这是我的剧本

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

    public class MouseDownText : MonoBehaviour {

        public Canvas myCanvas;

        // Use this for initialization
        void Start () {

            myCanvas.enabled = false;
        }

        // Update is called once per frame
        void Update () {
        }

        void OnMouseDown()
        {
            // for switch on/off

            if (myCanvas.enabled)
                myCanvas.enabled = false;
            else


    myCanvas.enabled = true;

}
} 

当我改变时。 public Canvas to public GameObject

public GameObject myObject;

    // Use this for initialization
    void Start () {

        myObject.enabled = false;
    }
myObject.enabled中的

是红色文本 并说“错误CS0131:作业的左侧必须是变量,属性或索引器”

为什么?

更新问题-------

最重要的问题是如何改变

public Canvas myCanvas;

public GameObject myCanvas;

myCanvas.enabled = false;
确定错误。因为gameobject不需要启用

但这是我的真实剧本

using UnityEngine;
using System.Collections.Generic;
using Vuforia;

public class VirtualButtonEventHandler : MonoBehaviour, IVirtualButtonEventHandler {

    // Private fields to store the models
    public Canvas model_1;

    void Start() {
        // Search for all Children from this ImageTarget with type VirtualButtonBehaviour
        VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour> ();
        for (int i = 0; i < vbs.Length; ++i) {
            // Register with the virtual buttons TrackableBehaviour
            vbs [i].RegisterEventHandler (this);
        }



        model_1.enabled=false;
    }
        public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) {
            //Debug.Log(vb.VirtualButtonName);
            Debug.Log("Button pressed!");

            switch(vb.VirtualButtonName) {
            case "btnLeft":
            if (model_1.enabled)
                model_1.enabled = false;
            else
                model_1.enabled = true;

                break;
                //  default:
                //  throw new UnityException("Button not supported: " + vb.VirtualButtonName);
                //  break;
            }

        }

        /// Called when the virtual button has just been released:
        public void OnButtonReleased(VirtualButtonAbstractBehaviour vb) {
            Debug.Log("Button released!");
        }
    }

它可以工作

public Canvas Model_1;

启用。

但是当我想将Canvas更改为GameObject时如何?

我必须在这里改变什么

public GameObject Model_1;

model_1.enabled=false;

switch(vb.VirtualButtonName) {
                case "btnLeft":
                if (model_1.enabled)
                    model_1.enabled = false;
                else
                    model_1.enabled = true;

因为我的模特不只是1 所以我可以像LOGIC一样改变我的对象 if(model_1 false) model_1 on 再次单击BtnLeft (如果是model_1) model_1错误 model_2 on 像下一个对象

2 个答案:

答案 0 :(得分:1)

这不是一个难题。因为gameobject没有启用属性。

您需要做的是将代码更改为:

  

myCanvas.SetActive(假);

我对unity3d的建议是阅读更多文档并观看更多教程。 Evem是非常基本的。

P.S。

Google is a better teacher than SO.

如果你想让开关工作,你的逻辑似乎是正确的。您只需将代码添加到Update

void Update(){
    if(Input.GetMouseDown(0)){
        OnMouseDown();
    }
}

答案 1 :(得分:0)

我知道这有点晚了但我想如果你还有问题,你可能仍然需要帮助。首先,您无法使用.enabled禁用GameObjects,因为 .enabled仅适用于组件,而不适用于GameObjects 。要禁用GameObject,您需要使用SetActive。所以你会这样做:

myObject.SetActive(false);

现在回答你关于蒂姆的帖子的评论。你现在有这个;

if (myCanvase.enabled)
{
    myCanvas.enabled = false;
}
else
{
    myCanvas.enabled = true;
}

您必须使用activeSelf。如果GameObject处于活动状态,则返回true。所以改成它:

if (myCanvas.activeSelf)
{
    myCanvas.SetActive(false);
}
else
{
    myCanvas.SetAcive(true);
}