Открытый игровой объект Unity CS0117

это мой сценарий

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 в общедоступный GameObject

public GameObject myObject;

    // Use this for initialization
    void Start () {

        myObject.enabled = false;
    }

в myObject.enabled - красный текст с надписью «ошибка CS0131: левая часть присваивания должна быть переменной, свойством или индексатором»

Почему ?

ОБНОВЛЕНИЕ ВОПРОСА -------

главный вопрос, как изменить

public Canvas myCanvas;

to

public GameObject myCanvas;

с участием

myCanvas.enabled = false;

верная ошибка. потому что игровой объект не нужен

но вот мой настоящий сценарий

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 if (model_1 false) model_1 снова щелкнуть BtnLeft (если model_1 включен) model_1 false model_2 на как следующий объект


person cybercutte    schedule 21.04.2016    source источник


Ответы (2)


Это не сложная проблема. Поскольку у gameobject нет свойства enabled.

Что вам нужно сделать, так это изменить код на:

myCanvas.SetActive (ложь);

Мой совет для изучения unity3d - читать больше документов и смотреть больше руководств. Evem самые простые.

P.S.

Google is a better teacher than SO.

Если хочешь, чтобы переключатель работал, казалось, твоя логика верна. Вам просто нужно добавить коды в Update.

void Update(){
    if(Input.GetMouseDown(0)){
        OnMouseDown();
    }
}
person tim    schedule 21.04.2016
comment
если (myCanvas.enabled) myCanvas.enabled = false; иначе myCanvas.enabled = true; || что я должен здесь изменить, когда хочу включить / выключить - person cybercutte; 22.04.2016
comment
ваш OnMouseDown - частный метод, он не будет работать. Логика верная. Возможно, вы сможете добавить новые коды в ответ на Update - person tim; 22.04.2016
comment
вижу, я сначала меняю свой вопрос, но все еще ссылки - person cybercutte; 22.04.2016
comment
Извините, я давно не работаю над вуфорией. Я думаю, вы можете попробовать пойти на форум vuforia, чтобы найти решение о виртуальной кнопке. - person tim; 22.04.2016
comment
Еще один совет: задайте новый вопрос о виртуальной кнопке вуфории. - person tim; 22.04.2016

Я знаю, что это немного поздно, но я подумал, что если у вас все еще есть проблемы, вам все равно может понадобиться помощь. Во-первых, вы не можете отключить GameObjects с помощью .enabled, потому что .enabled предназначен только для компонентов, а не для GameObjects. Чтобы отключить GameObject, вам необходимо использовать SetActive. Итак, вы бы сделали:

myObject.SetActive(false);

Теперь отвечу на ваши комментарии к сообщению Тима. В настоящее время у вас есть это;

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

Вы должны использовать activeSelf. Это возвращает true, если GameObject активен. Так что измените его на это:

if (myCanvas.activeSelf)
{
    myCanvas.SetActive(false);
}
else
{
    myCanvas.SetAcive(true);
}
person bpgeck    schedule 26.04.2016
comment
я люблю людей делиться знаниями. Это работает, сэр !!! Моя проблема не только в вуфории. Это просто, как использовать if в общедоступном игровом объекте, потому что включен красный текст (ошибка). Спасибо, очень соответствуете Решенная проблема - person cybercutte; 04.05.2016