using System.Collections.Generic; using UnityEngine; namespace Passer { /// /// Target side /// public enum Side { AnySide, Left, Right, } /// /// A main tracking transform /// public abstract class Target : MonoBehaviour { protected bool _showRealObjects = true; /// /// show the target meshes /// public virtual bool showRealObjects { get { return _showRealObjects; } set { _showRealObjects = value; } } public virtual void InitComponent() { } public abstract void StartTarget(); public abstract void InitSensors(); public virtual void StartSensors() { } protected virtual void UpdateSensors() { } public virtual void StopSensors() { } public abstract void UpdateTarget(); public static List SetColliderToTrigger(GameObject obj) { Rigidbody rb = obj.GetComponent(); if (rb != null) return SetColliderToTrigger(rb); else { List changedColliders = new List(); Collider[] colliders = obj.GetComponentsInChildren(); for (int j = 0; j < colliders.Length; j++) { if (!colliders[j].isTrigger) { colliders[j].isTrigger = true; changedColliders.Add(colliders[j]); } } return changedColliders; } } public static List SetColliderToTrigger(Rigidbody rb) { List changedColliders = new List(); Collider[] colliders = rb.GetComponentsInChildren(); for (int j = 0; j < colliders.Length; j++) { Rigidbody colliderRigidbody = colliders[j].attachedRigidbody; if (colliderRigidbody == null || colliderRigidbody == rb) { if (!colliders[j].isTrigger) { colliders[j].isTrigger = true; changedColliders.Add(colliders[j]); } } } return changedColliders; } public static void UnsetColliderToTrigger(List colliders) { if (colliders == null) return; foreach (Collider c in colliders) { if (c != null) c.isTrigger = false; } } public static void UnsetColliderToTrigger(List colliders, Collider collider) { if (colliders == null || collider == null) return; if (colliders.Contains(collider)) collider.isTrigger = false; } } }