unity-根据定点生成路劲

参考视频:

unity如何做任务指引轨迹(带路)?_哔哩哔哩_bilibili

1.在场景中新建空对象MissionGuide,子对象分别是空对象Line和Trial

2.空对象Line下添加Line Renderer

在这里可以更改它的宽度,颜色,对齐方式选择变换z

3,空对象Trial下添加Trial Renderer

4,在场景中随意添加一些3D对象球体,作为生成路径的路线

5.Missionguide脚本如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MissionGuide : MonoBehaviour
{
    public Transform[] lineTarget;
    public Transform[] trailTarget;

    public LineRenderer lineRenderer;
    public TrailRenderer trialRenderer;

    public float trailSpeed;

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(DelayForKeepUpdate());
    }

    private IEnumerator DelayForKeepUpdate()
    {
        WaitForSeconds waitTimes = new(1 / 30);

        int index = 1;

        Vector3 currentDirection;
        while (true)
        {
            yield return waitTimes;

            UpdateLineRenderer();

            Vector3[] trailPoints = new Vector3[trailTarget.Length];
            for(int i = 0; i < trailTarget.Length; i++)
            {
                trailPoints[i] = trailTarget[i].position;
                trailPoints[i].y = 0.1f;
            }
            Vector3 currentTarget = trailPoints[index];
            currentDirection = (currentTarget - trialRenderer.transform.position).normalized;
            Vector3 nextPos = trialRenderer.transform.position + currentDirection * trailSpeed;
            Vector3 nexToTargetVector = (currentTarget - nextPos).normalized;

            if (currentDirection != nexToTargetVector)
            {
                nextPos = currentTarget;

                index++;
                
            }
            trialRenderer.transform.position = nextPos;

            if (index >= trailTarget.Length)
            {
                index = 1;
                
                yield return new WaitForSeconds(trialRenderer.time);
                trialRenderer.emitting = false;
                trialRenderer.transform.position = trailPoints[0];
                trialRenderer.Clear();
                trialRenderer.emitting = true;

                continue;
            }

        }
    }

    private void UpdateLineRenderer()
    {
        Vector3[] linePoints = new Vector3[lineTarget.Length];
        for (int i = 0; i < lineTarget.Length; i++)
        {
            linePoints[i] = lineTarget[i].position;
            linePoints[i].y = 0.1f;
        }

        lineRenderer.positionCount = linePoints.Length;
        lineRenderer.SetPositions(linePoints);
    }

    // Update is called once per frame
   
}

6,将要生成的Line路线和Trial路线的小球分别设置好位置并拖入作为路线参数

线段渲染器和Trial Renderer分别是MissionGuide下的Line和Trial

Trial Speed是该Trial的生成速度,可按照需求自行调整

7,效果如图所示

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一种简易的Unity-2D随机生成地图及障碍物的方法: 1. 创建一个空物体,命名为MapGenerator,将其挂载一个脚本MapGenerator.cs。 2. 在脚本中定义一些公共变量,如地图大小、障碍物数量、障碍物大小等。 3. 在Start()方法中,使用循环生成地图和障碍物。可以使用随机数来生成地图和障碍物的位置和大小。 4. 生成地图时,可以使用Tilemap组件来创建砖块地图。可以使用Tile Palette工具来创建不同的砖块,并在脚本中随机选择一些砖块来生成地图。 5. 生成障碍物时,可以使用SpriteRenderer组件来创建障碍物。可以使用多个Sprite来创建不同的障碍物,并在脚本中随机选择一些Sprite来生成障碍物。 6. 最后,将生成的地图和障碍物放置在MapGenerator物体下,并运行游戏即可。 下面是MapGenerator.cs的代码示例: ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; public class MapGenerator : MonoBehaviour { public int mapWidth = 100; public int mapHeight = 100; public int obstacleCount = 20; public float obstacleSize = 1f; public Tilemap tilemap; public TileBase[] tiles; public Sprite[] obstacles; // Start is called before the first frame update void Start() { GenerateMap(); GenerateObstacles(); } void GenerateMap() { for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapHeight; y++) { tilemap.SetTile(new Vector3Int(x, y, 0), tiles[Random.Range(0, tiles.Length)]); } } } void GenerateObstacles() { for (int i = 0; i < obstacleCount; i++) { GameObject obstacle = new GameObject("Obstacle"); obstacle.transform.parent = transform; SpriteRenderer sr = obstacle.AddComponent<SpriteRenderer>(); sr.sprite = obstacles[Random.Range(0, obstacles.Length)]; float size = Random.Range(obstacleSize / 2f, obstacleSize); obstacle.transform.localScale = new Vector3(size, size, 1f); float x = Random.Range(0f, mapWidth); float y = Random.Range(0f, mapHeight); obstacle.transform.position = new Vector3(x, y, 0f); } } } ``` 在这个示例中,我们使用了Tilemap组件来生成地图,并使用了SpriteRenderer组件来生成障碍物。你可以根据自己的需求来修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值