using System.Collections; using UnityEngine; namespace BNG { /// /// This component can push the player backwards when it collides with a wall / object. Attach to the /// public class HeadCollisionMove : MonoBehaviour { [Tooltip("Enable collision? Set to false if you don't want to enable this")] public bool CollisionEnabled = true; [Tooltip("Only collide against the specified World Tag?")] public bool OnlyCollideAgainstWorld = true; [SerializeField] private string worldTag = "World"; [SerializeField] private GameObject cameraRig; [SerializeField] private Transform centerEyeAnchor; void Start() { } void OnCollisionStay(Collision collision) { // Component may not be enabled if (!CollisionEnabled) { return; } // Additionally check for world collision if (OnlyCollideAgainstWorld && !collision.collider.CompareTag(worldTag)) { return; } StartCoroutine(PushBackPlayer()); } void OnCollisionExit(Collision collision) { if (OnlyCollideAgainstWorld && !collision.collider.CompareTag(worldTag)) { return; } StopCoroutine(PushBackPlayer()); } IEnumerator PushBackPlayer() { if (!CollisionEnabled) { yield break; } var delta = transform.position - centerEyeAnchor.position; delta.y = 0f; cameraRig.transform.position += delta; } } }