【问题标题】:alternate two methods for x seconds, with a pause of y seconds交替使用两种方法 x 秒,暂停 y 秒
【发布时间】:2021-12-26 15:47:14
【问题描述】:

我有两种方法,PaintRedPaintDefault。 我希望这两种方法交替 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;
    }
}

}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    类似的东西?

    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 上创建一个 event 并从您当前的脚本中订阅它(这将是更简洁的方式)

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 2010-11-07
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2014-03-27
      相关资源
      最近更新 更多