// Magica Cloth 2. // Copyright (c) 2025 MagicaSoft. // https://magicasoft.jp using System.Collections.Generic; using UnityEngine; namespace MagicaCloth2 { [System.Serializable] public class CullingSettings : IDataValidate { /// /// Camera culling mode. /// カメラカリングモード /// public enum CameraCullingMode { /// /// No culling. /// カリングは行わない /// Off = 0, /// /// Simulation resets when hidden from camera. /// カメラから非表示になるとシミュレーションはリセットされる /// Reset = 10, /// /// Simulation pauses when hidden from camera. /// カメラから非表示になるとシミュレーションは一時停止する /// Keep = 20, /// /// Automatically set from linked animator. /// 連動アニメーターから自動設定する /// - Animator.CullingMode.AlwaysAnimate -> Off /// - Animator.CullingMode.CullUpdateTransforms -> Reset /// - Animator.CullingMode.CullCompletely -> Keep /// AnimatorLinkage = 30, } /// /// Camera culling method. /// カリング方式 /// public enum CameraCullingMethod { /// /// Work with an animator. /// アニメーターと連動する /// AutomaticRenderer = 0, /// /// Determine from user-specified renderer. /// ユーザー指定のレンダラーから判定する /// ManualRenderer = 10, } /// /// Camera culling mode. /// カメラカリングモード /// [OK] Runtime changes. /// [NG] Export/Import with Presets /// public CameraCullingMode cameraCullingMode = CameraCullingMode.AnimatorLinkage; /// /// Camera culling judgment method. /// カメラカリング判定方式 /// [OK] Runtime changes. /// [NG] Export/Import with Presets /// public CameraCullingMethod cameraCullingMethod = CameraCullingMethod.AutomaticRenderer; /// /// User-specified camera culling judgment renderer. /// ユーザー指定のカメラカリング判定用レンダラー /// [OK] Runtime changes. /// [NG] Export/Import with Presets /// public List cameraCullingRenderers = new List(); /// /// 距離カリングの状態と距離 /// Distance Culling State and Distance. /// [OK] Runtime changes. /// [NG] Export/Import with Presets /// public CheckSliderSerializeData distanceCullingLength; /// /// 距離カリングのフェード割合(0.0 ~ 1.0) /// Distance culling fade rate (0.0 to 1.0). /// [OK] Runtime changes. /// [NG] Export/Import with Presets /// [Range(0.0f, 1.0f)] public float distanceCullingFadeRatio; /// /// 距離カリングの測定対象(None=メインカメラ) /// Distance culling measurement target (None = main camera). /// [OK] Runtime changes. /// [NG] Export/Import with Presets /// public GameObject distanceCullingReferenceObject; //========================================================================================= public struct CullingParams { public bool useDistanceCulling; public float distanceCullingLength; public float distanceCullingFadeRatio; public void Convert(CullingSettings cullingSettings) { useDistanceCulling = cullingSettings.distanceCullingLength.use; distanceCullingLength = cullingSettings.distanceCullingLength.value; distanceCullingFadeRatio = cullingSettings.distanceCullingFadeRatio; } } //========================================================================================= public CullingSettings() { distanceCullingLength = new CheckSliderSerializeData(false, 30.0f); distanceCullingFadeRatio = 0.2f; } public void DataValidate() { distanceCullingLength.DataValidate(0.0f, Define.System.DistanceCullingMaxLength); distanceCullingFadeRatio = Mathf.Clamp01(distanceCullingFadeRatio); } public CullingSettings Clone() { return new CullingSettings() { cameraCullingMode = cameraCullingMode, cameraCullingMethod = cameraCullingMethod, cameraCullingRenderers = new List(cameraCullingRenderers), distanceCullingLength = distanceCullingLength.Clone(), distanceCullingFadeRatio = distanceCullingFadeRatio, distanceCullingReferenceObject = distanceCullingReferenceObject, }; } /// /// エディタメッシュの更新を判定するためのハッシュコード /// (このハッシュは実行時には利用されない編集用のもの) /// /// public override int GetHashCode() => 0; } }