using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 电线对象 /// public class WireObject : MonoBehaviour { private Transform start, end; private Vector3 startPos, endPos; private float sagRatio; private Transform parent; /// /// 创建 /// /// 父物体 /// 起点 /// 终点 /// 弧垂 /// public static WireObject CreateWire(Transform _parent, Transform _start, Transform _end, float _sagRatio) { GameObject wire = new GameObject("wire"); var lr = wire.AddComponent(); //Material mat = new Material(WireCreater.Instance.linmaterial); //mat.color = WireCreater.Instance.wireColor; lr.material = WireCreater.Instance.linmaterial; var dev_wire = wire.AddComponent(); dev_wire.start = _start; dev_wire.end = _end; dev_wire.sagRatio = _sagRatio; dev_wire.startPos = _start.position; dev_wire.endPos = _end.position; dev_wire.parent = _parent; if (_parent != null) wire.transform.SetParent(_parent); dev_wire.InitWire(); return dev_wire; } /// /// 创建 /// /// 父物体 /// 起点 /// 终点 /// 弧垂 /// 名称 /// public static WireObject CreateWire(Transform _parent, Transform _start, Transform _end, float _sagRatio, string wireName) { GameObject wire = new GameObject(string.IsNullOrEmpty(wireName) ? "wire" : wireName); var lr = wire.AddComponent(); //Material mat = new Material(Shader.Find("Unlit/Color")); //mat.color = WireCreater.Instance.wireColor; lr.material = WireCreater.Instance.linmaterial; var dev_wire = wire.AddComponent(); dev_wire.start = _start; dev_wire.end = _end; dev_wire.sagRatio = _sagRatio; dev_wire.startPos = _start.position; dev_wire.endPos = _end.position; dev_wire.parent = _parent; if (_parent != null) wire.transform.SetParent(_parent); dev_wire.InitWire(); return dev_wire; } /// /// 初始化连线 /// public void InitWire() { for (int i = transform.childCount - 1; i >= 0; i--) { Destroy(transform.GetChild(i).gameObject); } WireCreater.Instance.CreateNewLine(this, start.position, end.position, sagRatio); } /// /// 设置弧垂 /// /// public void SetRatio(float _sagRatio) { sagRatio = _sagRatio; InitWire(); } Vector3 GetPointPos(int index) { LineRenderer lr = gameObject.GetComponent(); return lr.GetPosition(index); } private void Update() { if (WireCreater.Instance.realTimeWire) { if (start.position != startPos || end.position != endPos) { InitWire(); startPos = start.position; endPos = end.position; } } } }