找到ACC_Trail脚本自动定位关掉
using System;
using System.Collections.Generic;
using UnityEngine;
using NOT_Lonely;
[ExecuteAlways]
public class CablesBuild : MonoBehaviour
{
public List<GameObject> towerList = new List<GameObject>();
public Material[] newMaterials;
private List<List<Transform>> _transList = new List<List<Transform>>();
//前一次的位置,监听位置是否变化,实时更新
private List<List<Vector3>> _pointsListLate = new List<List<Vector3>>();
private List<ACC_Trail> _trails = new List<ACC_Trail>();
[SerializeField][Header("电线连接的方向")] private LinkDirect _linkDirect = LinkDirect.后向;
[SerializeField][Header("重力大小")] private float cableGravity= 0.005f;
[SerializeField][Header("半径")] private float cableRadius = 0.05f;
private void OnEnable()
{
UpdateCable();
}
enum LinkDirect
{
前向,
后向
}
private string Flip(string str)//字符串转换
{
if (str.Contains("前"))
return str.Replace("前", "后");
else if (str.Contains("后"))
{
return str.Replace("后", "前");
}
else return string.Empty;
}
private void UpdateCable()
{
// Log.red("CableBuild.cs=>UpdateCable()");
// 销毁
for (int i=transform.childCount-1; i >=0; i--)
{
DestroyImmediate(transform.GetChild(i).gameObject);
}
_transList.Clear();
_pointsListLate.Clear();
_trails.Clear();
for(int i=0;i<towerList.Count-1;i++)
{
for (int j =0; j < towerList[i].transform.childCount;j++)
{
var childStart = towerList[i].transform.GetChild(j);
var word = _linkDirect == LinkDirect.前向 ? "Point前" : "Point后";
if (childStart.name.Contains(word))
{
try
{
//如果
var childEnd = towerList[i + 1].transform.Find(Flip(childStart.name));
if(childEnd)
{
var o = new GameObject($"Cable_{towerList[i].name}_{childStart.name}", typeof(ACC_Trail))
{
transform =
{
parent = this.transform
}
};
var trail = o.GetComponent<ACC_Trail>();
trail.controlPoints = new List<Transform>{childStart, childEnd};
trail.lengthDependentHeight = cableGravity;//弯曲度
// cablesTrail.lengthSegments = 12;//路径方向的段数
trail.thickness = new Vector2(cableRadius, cableRadius);//半径
trail.materials = newMaterials;
//...etc
trail.CreateFirstCableSegment(trail.transform);
trail.UpdateAllSequences();
//update
trail.UpdateCableTrail();
_transList.Add(trail.controlPoints);
var vs = new List<Vector3>();
//更新pointLate
trail.controlPoints.ForEach(t=>vs.Add(t.position));
_pointsListLate.Add(vs);
_trails.Add(trail);
}
}
catch (Exception e)
{
//Log.blue(e.ToString());
}
}
}
}
// _pointsListLate = _transList;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
UpdateCable();
}
// 监听位置是否变化
for (int i = 0; i < _transList.Count; i++)
{
for (int j = 0; j < _transList[i].Count; j++)
{
if (_transList[i][j].position != _pointsListLate[i][j])
{
UpdateCable();
break;
}
}
}
}
}
orient/strip%7CimageView2/2/w/1240)
1.塔的预制体点位 前后名字要保持一致,不得有空格,否则会出现连不上的情况
2.新建空物体,把脚本拖入到空物体上,并按照先后顺序排列。开关脚本可以刷新
网友评论