我试图创造一种类似于Curve Fever的游戏,其中有一些蛇'随着尾巴越来越多。我想要达到的目标是每隔x秒就会在线间产生间隙。
目前我正在使用LineRenderer并设置如下所示的点:
void Update() {
if(Vector3.Distance(points.Last(), snake.position) > pointSpacing)
SetPoint();
}
public void SetPoint(){
if (noGap)
{
if (points.Count > 1)
coll.points = points.ToArray<Vector2>();
points.Add(snake.position);
line.numPositions = points.Count;
line.SetPosition(points.Count - 1, snake.position);
}
}
public IEnumerator LineGap(){
while (enabled)
{
yield return new WaitForSeconds(2f);
noGap = false;
yield return new WaitForSeconds(.5f);
noGap = true;
}
}
使用上面的协程我尝试不是每2秒创建一次点数0.5秒,但是LineRenderer会在每2点之间创建一条线。
有没有办法实现我想要做的事情?也许通过使用另一种渲染器?
答案 0 :(得分:1)
一种选择是为每个线段创建一个新的LineRenderer。然后你的蛇将跟踪一个LineRenderers列表。如果您将LineRenderer GameObject作为预制件,则可以很容易地动态生成它。你的Snake
课程看起来像这样:
public class Snake
{
public GameObject LinePrefab; //Prefab gameobject with LineRenderer
private List<LineRenderer> pathList; //List of line segments
private LineRenderer line; //Current line
private void Start(){
this.pathList = new List<LineRenderer>();
SpawnNewLineSegment();
//Other initialization code
}
public void Update(){
if (!noGap && Vector3.Distance(points.Last(), snake.position) > pointSpacing)
SetPoint()
}
public void SetPoint(){
if (points.Count > 1)
coll.points = points.ToArray<Vector2>();
points.Add(snake.position);
//Increment the number of points in the line
line.numPositions = line.numPositions + 1;
line.SetPosition(line.numPositions - 1, snake.position);
}
public IEnumerator LineGap(){
while (enabled)
{
yield return new WaitForSeconds(2f);
noGap = false;
yield return new WaitForSeconds(.5f);
noGap = true;
//We are starting a new line, create a new line segment
SpawnNewLineSegment();
}
private LineRenderer SpawnNewLineSegment(){
//Spawn the gameobject as a parent of this object
GameObject go = Instantiate(this.LinePrefab, this.transform);
this.line = go.GetComponent<LineRenderer>();
this.pathList.Add(this.line)
//Set the first point on the line
SetPoint()
}
}
唯一的问题是你想如何处理你的碰撞(我认为这是coll
的意思)。碰撞是否跨越间隙或是否在那里留下了一个洞?如上所述,看起来对撞机将是连续的(没有间隙)。
如果您担心在运行时生成新GameObjects的性能,您可以在初始化时创建它们的池,然后在需要它们之前禁用它们。