基本的には、ユーザーがパワーアップボタンを押すたびに自由に悪魔に変身できるプレーヤーを作りたいのですが、60秒後に変身を終了させたいです(変身が終了したら、プレーヤーを元の状態に戻したい)。また、プレイヤーが敵に襲われたら変身を終了させたいです。これまでのところ、このコードを作成して動作しますが、プレイヤーが敵に襲われた場合、およびユーザーがボタンを押してプレイヤーを元に戻すことを決定した場合、イールド待機を 60 秒にリセットするのに問題があります。悪魔に。誰でもこの問題を解決できますか?
私のヒエラルキーでは、プレイヤーを親、デーモン プレイヤーを子としています。プレーヤーにアタッチされたプレーヤー移動スクリプトと、以下の変換スクリプト:
public GameObject demon;
public BoxCollider2D col;
public Renderer rend;
public ParticleSystem par1;
public static Vector3 target;
void Start () {
target = transform.position;
}
void Update () {
target.z = transform.position.z;
}
public void DemonCharacter() {
StartCoroutine (PowerUpCoroutine ());
}
private IEnumerator PowerUpCoroutine() {
yield return new WaitForSeconds (0.3f);
par1.Play (); // particle system animation to cover transformation happening
par1.transform.position = target;
yield return new WaitForSeconds (0.2f);
demon.SetActive (true); // activates demon gameobject
rend.enabled = false; // deactivate players spriterenderer
col.enabled = false;
yield return new WaitForSeconds (60f);
demon.SetActive (false); // deactivates demon gameobject
rend.enabled = true; // activate players spriterenderer
col.enabled = true;
par1.Stop ();
}
そして、デーモン プレーヤーにこのスクリプトを添付しました。私は動作しますが、ユーザーがボタンをクリックして悪魔に変身するとき、yield waitforseconds は止まりません。
public BoxCollider2D Playercol;
public Renderer PlayerRend;
void Start()
{
}
void Update ()
{
}
void OnTriggerEnter2D(Collider2D col) {
if (col.tag == "enemy") {
demon.SetActive (false);
PlayerRend.enabled = true;
Playercol.enabled = true;
}
}