using System.Collections; using Convention; using Dreamteck.Splines; using UnityEngine; namespace Demo.Game { public class SplineNode : ScriptableObject { protected override bool IsSelfEnableUpdate => false; public static SplineNode Make() { var node = new GameObject("", typeof(Node)).AddComponent(); node.m_MyNode = node.GetOrAddComponent(); return node; } private Node m_MyNode; public float NodeSize = 1; public Color NodeColor = Color.white; public bool IsSetupNodeRotation = false; public Vector3 NodeRotation = Vector3.zero; public int MyNodeContent = 0; public Node MyNode => m_MyNode; public void AddTo(SplineCore core) { MyNodeContent = core.NodeContent; core.MySplineComputer.SetPointColor(MyNodeContent, NodeColor); core.MySplineComputer.SetPointSize(MyNodeContent, NodeSize); core.MySplineComputer.SetPointNormal(MyNodeContent, IsSetupNodeRotation ? NodeRotation.normalized : transform.up); MyNode.AddConnection(core.MySplineComputer, MyNodeContent); } /// /// 设置节点大小,默认为1 /// /// [Convention.RScript.Variable.Attr.Method] public void SetNodeSize(float size) { NodeSize = size; } /// /// 设置节点颜色,默认为(1,1,1,1) /// /// /// /// /// [Convention.RScript.Variable.Attr.Method] public void SetNodeColor(float r, float g, float b, float a) { NodeColor = new(r, g, b, a); } /// /// 设置节点旋转,节点正面forward向量为法线 /// /// /// /// [Convention.RScript.Variable.Attr.Method] public void SetNodeRotation(float x, float y, float z) { IsSetupNodeRotation = true; this.transform.localEulerAngles = NodeRotation = new(x, y, z); } } }