77 lines
1.7 KiB
C#
77 lines
1.7 KiB
C#
using UnityEngine;
|
|
|
|
public class ChaseObstacleTrigger : MonoBehaviour
|
|
{
|
|
private float contactTimer = 0f;
|
|
private bool isPlayerTouching = false;
|
|
private ChasePlayerController player;
|
|
|
|
private void HandleEnter(GameObject obj)
|
|
{
|
|
if (!obj.CompareTag("Player")) return;
|
|
|
|
player = obj.GetComponent<ChasePlayerController>();
|
|
if (player != null)
|
|
{
|
|
isPlayerTouching = true;
|
|
contactTimer = 0f;
|
|
player.OnObstacleHit(); // First hit (stumble)
|
|
}
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
private void HandleStay()
|
|
{
|
|
if (!isPlayerTouching || player == null) return;
|
|
|
|
contactTimer += Time.deltaTime;
|
|
|
|
if (contactTimer >= 1f)
|
|
{
|
|
player.OnObstacleHit(); // Second hit = GameOver
|
|
isPlayerTouching = false; // Prevent further hits
|
|
}
|
|
}
|
|
|
|
private void HandleExit(GameObject obj)
|
|
{
|
|
if (!obj.CompareTag("Player")) return;
|
|
|
|
isPlayerTouching = false;
|
|
contactTimer = 0f;
|
|
player = null;
|
|
}
|
|
|
|
// ---------- For Collision ----------
|
|
private void OnCollisionEnter(Collision collision)
|
|
{
|
|
HandleEnter(collision.gameObject);
|
|
}
|
|
|
|
private void OnCollisionStay(Collision collision)
|
|
{
|
|
HandleStay();
|
|
}
|
|
|
|
private void OnCollisionExit(Collision collision)
|
|
{
|
|
HandleExit(collision.gameObject);
|
|
}
|
|
|
|
// ---------- For Trigger ----------
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
HandleEnter(other.gameObject);
|
|
}
|
|
|
|
private void OnTriggerStay(Collider other)
|
|
{
|
|
HandleStay();
|
|
}
|
|
|
|
private void OnTriggerExit(Collider other)
|
|
{
|
|
HandleExit(other.gameObject);
|
|
}
|
|
}
|