revival/game/Assets/Scripts/Traps/Arrow.cs

53 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Arrow : MonoBehaviour
{
Rigidbody rb;
// Float for speed of the arrow.
[SerializeField] private float speed;
// Float for time in seconds to wait to destroy the arrow on contact with any other gameobject that is no the player.
[SerializeField] private float waitToDestroy;
// Vector3 to set direction of travel for the arrow once the trigger is activated.
[SerializeField] private Vector3 direction;
private void Start()
{
rb = GetComponent<Rigidbody>();
}
private void OnTriggerEnter(Collider other)
{
// Checks to make sure other collider is the Player using tag.
if (other.gameObject.CompareTag("Player"))
{
rb.velocity = direction * speed;
}
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.TryGetComponent(out PlayerDeath playerDeath))
{
// Start Respawn coroutine.
playerDeath.Respawn();
// Destroy arrow on contact with player.
Destroy(gameObject);
}
else
{
// If arrow makes contact with any other gameobject start DestroyArrow corountine.
StartCoroutine(DestoryArrow());
}
}
public IEnumerator DestoryArrow()
{
// set arrow velocity to zero wait for destory time and then destory the arrow.
rb.velocity = Vector3.zero;
yield return new WaitForSeconds(waitToDestroy);
Destroy(gameObject);
}
}