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;
}
}
}
}