这是我的剧本
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 像下一个对象
答案 0 :(得分:1)
这不是一个难题。因为gameobject没有启用属性。
您需要做的是将代码更改为:
myCanvas.SetActive(假);
我对unity3d的建议是阅读更多文档并观看更多教程。 Evem是非常基本的。
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);
}