统一公共游戏对象 CS0117.
本文关键字:对象 CS0117 游戏 | 更新日期: 2024-11-07 00:49:47
这是我的脚本
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 GameObject myObject;
// Use this for initialization
void Start () {
myObject.enabled = false;
}
在 myObject.enabled 中是红色文本并说"错误 CS0131:赋值的左侧必须是变量、属性或索引器"
为什么?
更新问题-------
最热门的问题是如何改变
public Canvas myCanvas;
自
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;
启用。
但是当我想将画布更改为游戏对象时如何?
我必须在这里更改什么
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所以我可以像逻辑一样更改我的对象,如果if(model_1 false)model_1 上再次单击BtnLeft。(如果model_1打开)model_1假model_2 上像下一个对象
这不是一个难题。因为游戏对象没有启用的属性。
您需要做的是将代码更改为:
myCanvas.SetActive(false);
我对学习unity3d的建议是阅读更多文档并观看更多教程。Evem 非常基本的。
附言
Google is a better teacher than SO.
如果你想让开关工作,看来你的逻辑是对的。您只需要将代码添加到 Update
.
void Update(){
if(Input.GetMouseDown(0)){
OnMouseDown();
}
}
我知道
这有点晚了,但我想如果你仍然有问题,你可能仍然需要帮助。首先,您不能使用 .enabled
禁用游戏对象,因为.enabled
仅适用于组件,不适用于游戏对象。要禁用游戏对象,您需要使用 SetActive。所以你会做:
myObject.SetActive(false);
现在回答您对蒂姆帖子的评论。您目前有这个;
if (myCanvase.enabled)
{
myCanvas.enabled = false;
}
else
{
myCanvas.enabled = true;
}
您必须使用 activeSelf
。如果游戏对象处于活动状态,这将返回true
。所以把它改成这样:
if (myCanvas.activeSelf)
{
myCanvas.SetActive(false);
}
else
{
myCanvas.SetAcive(true);
}