从脚本中启用/禁用GameObject组件[Unity3D]

6

我需要获取一个布尔值(存储在变量“bouclier”中),并将其应用于启用或禁用GameObject。

该变量在游戏对象Player中(此处为右下角):

enter image description here

我需要启用或禁用这个游戏对象("Bouclier01"):

enter image description here

为了实现这个功能,我将脚本附加到游戏对象“Bouclier01”上。以下是脚本内容:
using UnityEngine;
using System.Collections;

public class ShowBouclier : MonoBehaviour {

    public GameObject Bouclier01;
    public bool bouclier;

    // Use this for initialization
    void Start () {
        Bouclier01 = Bouclier01.GetComponent<GameObject>();
    }

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

        Bouclier01.enabled = false;
        if (bouclier == true) {
            Bouclier01.enabled = true;
        }
    }
}

我一定是漏掉了什么,因为这会出现这个错误信息:

enter image description here

有什么好的方法可以正确地完成这个任务吗?

启用/禁用是针对组件的。 - Martin Dawson
在提问之前,你应该先查找答案。这个问题已经被问过并回答了无数次。 - DzoniGames
2个回答

12
您可以使用 GameObject.SetActive() 函数来激活或停用一个游戏对象(我认为 GameObject.enabled 是旧 API 中的):
Bouclier.SetActive(false);

顺便提一下,如果您想知道游戏对象的当前激活状态,请使用GameObject.activeSelf,这是一个只读变量:

Debug.Log(Bouclier.activeSelf);

谢谢!这是一件错误的事情,但我认为还有更多... 我似乎无法在玩家层面上读取“bouclier”的值。我的脚本中是否还有其他明显的错误? - Lucien S.
你到底发生了什么事,能说得更详细些吗? - mt3d
我正在制作一个小视频来解释情况,一两分钟内就会发布 :) - Lucien S.
这是视频链接!https://www.youtube.com/watch?v=N0dAZw52Hlk 我应该问另一个问题吗? - Lucien S.
1
我看到你在Move脚本中更改了变量bouclier,但是ShowBouclier脚本中的变量bouclier呢?这两者之间有什么关系吗?我认为你应该更改ShowBouclier.bouclier而不是Move.bouclier。 - mt3d

1

it will works

public GameObject otherobj;//your other object
public string scr;// your secound script name
void Start () {
(otherobj. GetComponent(scr) as MonoBehaviour).enabled = false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接