[英]Can't toggle light component in Unity 3D
我有一個附加到 led1 的腳本,如下圖所示。 它的唯一目的是檢測我何時單擊 LED 並切換子“led1 燈。檢測單擊的 LED 與 Raycast 完美配合,但是嘗試打開和關閉 LED 不適用於簡單的light.enabled =.light.enable
但如果我做light.enabled = true
或light.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.