[英]How do I prevent UI button from resetting to start condition on every click? Unity3D
下面@Mario 提供的布爾問題的答案也解決了主要問題
原始帖子中的代碼(在該行下方)有一個不相關的問題('==' 而不是 '='),但是在修復這個問題時,我意識到我的字符串名稱 'cubeRend.material' 有問題它包括其后的附加實例,因此似乎在邏輯上不等於“材料[0]”的字符串名稱。
我不認為這是重置問題背后的問題,因為我確實在 Unity 回答論壇上找到了一個關於類似重置問題的問題: https : //answers.unity.com/questions/1303925/ui-buttons -images-resets-after-scene-reloads-scrip.html
不幸的是,沒有人提供任何我可以嘗試在這種情況下應用的問題的答案。 我將嘗試解決我的等效問題,然后使用改進的代碼進行更新
我試圖讓 UI 按鈕在每次點擊時更改立方體上的顏色。 材料在一個陣列中。 在 start 函數中,我將立方體渲染器的初始條件設置為 material[0]。 在 ChangeCubeColor 函數(在 UI 按鈕的檢查器中引用)中,我使用一個簡單的 if/else 語句來檢查當前分配給立方體的材質。 單擊按鈕時,Unity 似乎將材質重置回原始狀態,然后按照 if/else 指令將顏色設置為數組中的第二個顏色,然后肉眼不可見。 影響是第一次播放時,按鈕會改變顏色,但每次之后,顏色都卡在第二個顏色上。
這是我的代碼。 我為所有的調試語句道歉。 我試圖弄清楚狀態何時發生或未發生變化。 我還包括了我的控制台在第一次播放時和按鈕的前 3 次點擊時的屏幕截圖。 最后,為了清晰起見,刪除了帶有調試語句的代碼。
提前感謝您的任何想法。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
cubeRend.material = material[0];
Debug.Log(cubeRend.material);
}
public void CubeColorChange()
{
if(cubeRend.material = material[0])
{
Debug.Log("cubeRend.material = material[0]");
cubeRend.material = material[1];
Debug.Log("Make 1: "+cubeRend.material);
Debug.Log("cubeRend.material = material[1]");
}
else if (cubeRend.material = material[1])
{
Debug.Log("cubeRend.material = material[1]");
cubeRend.material = material[0];
Debug.Log("Make 0: " + cubeRend.material);
Debug.Log("cubeRend.material = material[0]");
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
cubeRend.material = material[0];
}
public void CubeColorChange()
{
if(cubeRend.material = material[0])
{
cubeRend.material = material[1];
}
else if (cubeRend.material = material[1])
{
cubeRend.material = material[0];
}
}
}
試試這個方法。 這適用於 2 種材料,如果您想要更多,您可以使用 int 索引並更新索引而不使用 if 對於每種材料
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
public bool state;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
cubeRend.material = material[0];
//state = false is material 0 //state = true is material 1
state = false;
}
public void CubeColorChange()
{
//Change the state to the other state
state = !state;
cubeRend.material = (state) ? material[1] : material[0];
}
}
編輯 1:
這是更多材料的指數變化
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
public int index;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
index = 0;
cubeRend.material = material[index];
}
public void CubeColorChange()
{
//Increase index
index = (material.Length - 1 > index) ? index + 1 : 0;
cubeRend.material = material[index];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.