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(); } 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); } }