簡體   English   中英

無法在 Unity 3D 中切換燈光組件

[英]Can't toggle light component in Unity 3D

我有一個附加到 led1 的腳本,如下圖所示。 它的唯一目的是檢測我何時單擊 LED 並切換子“led1 燈。檢測單擊的 LED 與 Raycast 完美配合,但是嘗試打開和關閉 LED 不適用於簡單的light.enabled =.light.enable但如果我做light.enabled = truelight.enabled = false它確實有效。這讓我很困惑,因為我看不出發生這種情況的原因。有人知道為什么我不能簡單地切換它嗎?

在此處輸入圖像描述

此代碼無法以任何方式打開任何東西。

void Update()
{
    // On left mouse click 
    const int left_mouse_click = 0;
    if (Input.GetMouseButtonDown(left_mouse_click))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        
        if (Physics.Raycast(ray, out hit, 600.0f))
        {
            if (hit.transform != null)
            {
                GameObject led = hit.transform.gameObject;
                Light light = led.transform.GetChild(light_source_child).GetComponent<Light>();

                // This code does not work for anything
                light.enabled = !light.enabled;
}

此代碼用於打開 LED,但它當然不會再次關閉。

void Update()
{
    // On left mouse click 
    const int left_mouse_click = 0;
    if (Input.GetMouseButtonDown(left_mouse_click))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit, 600.0f))
        {
            if (hit.transform != null)
            {
                GameObject led = hit.transform.gameObject;
                Light light = led.transform.GetChild(light_source_child).GetComponent<Light>();

                // Works for turning LED on
                light.enabled = true;
}

我已經實現了一個可行的解決方案,但它非常麻煩,因為我必須在字典中查找,而實現 object 的切換似乎應該非常簡單。

如果您沒有獲得 Light 組件,而是將其替換為 GameObject 組件,該怎么辦。

舊代碼:

GameObject led = hit.transform.gameObject;
Light light = led.transform.GetChild(light_source_child).GetComponent<Light>();

使用變換的新代碼:

foreach (Transform child in hit.transform)
    //Assigns the first child of the Hit Game Object
    GameObject light = child.GetChild(0).gameObject;

禁用/啟用 GameObejct:

// This code should work now
light.SetActive(!light.activeSelf);

我解決了這個問題。 我有幾個 LED 對象,我將腳本連接到每個對象。 這導致它執行了 64 次,並且從技術上講代碼可以工作,但是作為一個偶數,它看起來好像什么都沒發生,而且顯然很容易出錯。 因此將腳本移動到頂級父 object 並使用代碼light.enable =.light;enable; 工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM