私はノックバック効果を出した単純な2Dプラットフォーマーゲームに取り組んでいます。プレイヤーが現在スパイクである障害物に当たったとき、彼はノックバックと一時的な不安定性を持っているので、不安定状態の間にスパイクを立てると、ヒットしません。しかし、一度invicibilityが終了すると、私は次のGIFのようにスパイクによってプレイヤーにヒットを与えたい。トラップを立てたときの不意打ちの後のヒット
https://media.giphy.com/media/26FeVTRop5PhBrJQs/giphy.gif
invicibilityがなくなって、それがスパイクの上に立っているので、プレイヤーがヒットを取得します。私が持っている問題は、敵意がなくなり、プレイヤーがまだスパイクに立っているなら、それは撃たれず、スパイクから降りるまで傷つけられないということです。この問題をどうやって解決するのかを提案できますか?ここでは、プレイヤーを狙うためのコードです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HitThePlayer : MonoBehaviour
{
public int damage;
GameObject player;
PlayerController playerController;
PlayerMovement playerMovement;
void Start()
{
player = GameObject.FindGameObjectWithTag ("Player");
playerController = GameObject.FindGameObjectWithTag ("GameController").GetComponent<PlayerController>();
playerMovement = player.GetComponent<PlayerMovement>();
}
void OnTriggerEnter2D (Collider2D other)
{
if (!playerController.isInvicible)
{
if (other.gameObject.CompareTag ("Player"))
{
playerController.AddPlayerHealth (-damage);
playerMovement.isKnockedBacked = true;
if (other.transform.position.x < transform.position.x)
{
playerMovement.knockFromRight = true;
}
else
{
playerMovement.knockFromRight = false;
}
StartCoroutine ("KnockBackEffectsDuration");
}
}
}
IEnumerator KnockBackEffectsDuration()
{
player.GetComponent<Animator>().SetTrigger ("GotHurt");
StartCoroutine (playerController.Invicibility (3.0f));
yield return new WaitForSeconds (0.2f);
playerMovement.isKnockedBacked = false;
playerMovement.enabled = false;
yield return new WaitForSeconds (0.2f);
playerMovement.enabled = true;
}
}
また、別のスクリプトのInvicibility IEnumeratorもあります。
public IEnumerator Invicibility (float duration)
{
isInvicible = true;
yield return new WaitForSeconds (duration);
isInvicible = false;
player.GetComponent<Animator>().SetTrigger ("GoIdle");
}
HitThePlayerスクリプトは他のスクリプトを参照していますので、私もこれらのスクリプトを起動する必要がある場合はお知らせください。
ええ、これは、ありがとうございます。 :) – Alexander
クール!その場合は、他の人が – ryeMoss
を知っているように、それを最良の回答としてマークしてください。申し訳ありません。私はスタックオーバーフローのために新しいので、私はそれらのことを忘れています。 – Alexander