using System; using System.Collections; using Convention; using Dreamteck.Splines; using UnityEngine; namespace Demo.Game { public class SplineTubeRenderer : BasicSplineRenderer { public static SplineTubeRenderer Make() { return new GameObject().AddComponent(); } public const bool DefaultIsDoubleSide = true; public const int DefaultSidesCount = 12; [Content] public bool IsDoubleSide = DefaultIsDoubleSide; [Content] public int SidesCount = DefaultSidesCount; protected override IEnumerator DoSomethingDuringApplyScript() { if (MyDefaultMaterial == null) MyDefaultMaterial = Resources.Load("Tube/Default"); yield return base.DoSomethingDuringApplyScript(); } public override void SetupMeshGenerator(TubeGenerator meshGenerater) { base.SetupMeshGenerator(meshGenerater); meshGenerater.doubleSided = IsDoubleSide; meshGenerater.sides = SidesCount; } public override IEnumerator UnloadScript() { yield return base.UnloadScript(); // Reset { IsDoubleSide = DefaultIsDoubleSide; SidesCount = DefaultSidesCount; } } /// /// 禁用双面渲染,用于优化性能 /// [Convention.RScript.Variable.Attr.Method] public void DisableDoubleSide() { IsDoubleSide = false; } /// /// 设置面数,越高越圆润 /// /// [Convention.RScript.Variable.Attr.Method] public void SetSides(int sides) { SidesCount = Mathf.Min(3, sides); } } }