我有兩種方法,PaintRed和PaintDefault。我希望這兩種方法交替 x 秒,當變數_gm._playerHited等于 true時暫停 y 秒。我想在我的模型上獲得紅色閃爍效果。
我無法理解這一點。我可能需要使用協程,但我還沒有想出解決我的問題的方法。
using UnityEngine;
public class PaintModel : MonoBehaviour {
GameObject _player;
GameObject _model;
GameManagerScript _gm;
Color32[] objColor = new Color32[9];
private void Start() {
_player = GameObject.FindGameObjectWithTag("Player");
_model = GameObject.Find("Model");
_gm = GameObject.FindGameObjectWithTag("GM").GetComponent<GameManagerScript>();
GetColors();
}
private void Update() {
if (_gm._playerHited) {
}
}
void PaintRed() {
for (int i = 0; i < _model.GetComponent<SkinnedMeshRenderer>().materials.Length; i ) {
_model.GetComponent<SkinnedMeshRenderer>().materials[i].color = Color.red;
}
}
void PaintDefault() {
for (int i = 0; i < _model.GetComponent<SkinnedMeshRenderer>().materials.Length; i ) {
_model.GetComponent<SkinnedMeshRenderer>().materials[i].color = objColor[i];
}
}
void GetColors() {
for (int i = 0; i < _model.GetComponent<SkinnedMeshRenderer>().materials.Length; i ) {
objColor[i] = _model.GetComponent<SkinnedMeshRenderer>().materials[i].color;
}
}
}
uj5u.com熱心網友回復:
沿著這些路線的東西?
public void StartFlash() => StartCoroutine(EFlash());
private IEnumerator EFlash()
{
float startTime = Time.time;
bool b = false;
while(startTime DURATION > Time.time)
{
b = !b;
if (b) PaintRed();
else PaintDefault();
yield return new WaitForSeconds(FLASH_SPEED);
}
}
您可以在播放器被擊中時呼叫 StartFlash 方法,例如,如果 bool 已更改,則檢查更新 *(如果您這樣做,您希望確保 bool 僅活動一幀,否則它會多次呼叫該方法次)
或者
你可以在你的 gm 上創建一個事件并從你當前的腳本中訂閱它(這將是更簡潔的方式)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397775.html
上一篇:如何獲得與平臺平行的方向向量?
