namespace Fusion.Addons.KCC { using UnityEngine; /// /// Custom wrapper/cache for fast property checks and synchronization. /// Direct changes on the Collider component or the Game Object won't propagate here. /// public sealed partial class KCCCollider { // PUBLIC MEMBERS public GameObject GameObject; public Transform Transform; public CapsuleCollider Collider; public bool IsSpawned; public bool IsTrigger; public float Radius; public float Height; public int Layer; // PUBLIC METHODS public void Update(KCC kcc) { KCCSettings settings = kcc.Settings; if (IsSpawned == false) { IsTrigger = settings.IsTrigger; Radius = settings.Radius; Height = settings.Height; Layer = settings.ColliderLayer; GameObject = new GameObject("KCCCollider"); GameObject.layer = settings.ColliderLayer; Transform = GameObject.transform; Transform.SetParent(kcc.Transform, false); Transform.localPosition = Vector3.zero; Transform.localRotation = Quaternion.identity; Transform.localScale = Vector3.one; Collider = GameObject.AddComponent(); Collider.direction = 1; Collider.isTrigger = settings.IsTrigger; Collider.radius = settings.Radius; Collider.height = settings.Height; Collider.center = new Vector3(0.0f, settings.Height * 0.5f, 0.0f); IsSpawned = true; } if (IsTrigger != settings.IsTrigger) { IsTrigger = settings.IsTrigger; Collider.isTrigger = settings.IsTrigger; } if (Radius != settings.Radius) { Radius = settings.Radius; Collider.radius = settings.Radius; } if (Height != settings.Height) { Height = settings.Height; Collider.height = settings.Height; Collider.center = new Vector3(0.0f, settings.Height * 0.5f, 0.0f); } if (Layer != settings.ColliderLayer) { Layer = settings.ColliderLayer; GameObject.layer = settings.ColliderLayer; } OnUpdate(kcc); } public void Destroy() { if (IsSpawned == false) return; if (Collider != null) { Collider.enabled = false; } GameObject.Destroy(GameObject); GameObject = default; Transform = default; Collider = default; IsSpawned = default; IsTrigger = default; Radius = default; Height = default; Layer = default; OnDestroy(); } // PARTIAL METHODS partial void OnUpdate(KCC kcc); partial void OnDestroy(); } }