Unity抛物线的制作

一.unity抛物线的制作

先上抛物线的效果图
在这里插入图片描述

1.1 抛物线的高度可以设置(设置完高度抛物线弧度是不一样的)

在这里插入图片描述

1.2 代码示例:

下面是代码

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

public class SeletParabola : MonoBehaviour
{
    public GameObject startPoint;  //起点
    public GameObject endPoint;    //终点
    public int lineSegmentNum = 50;   
    public float heightFloat = 0.5f;  //抛物线的高度
    private LineRenderer lineRenderer;
    private List<Vector3> listLines = new List<Vector3>();
    private Material material;
    private float aa;
    void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
        material = lineRenderer.material;
        lineRenderer.positionCount = lineSegmentNum;
        DrawParabola();
    }

    void DrawParabola()
    {
        listLines.Clear();
        Vector3 start = startPoint.transform.position;
        Vector3 end = endPoint.transform.position;
        float step = 1f / lineSegmentNum;

        for (int i = 1; i <= lineSegmentNum; i++)
        {
            float t = step * i;
            Vector3 lineposition = CalculateParabola(start, end, t, heightFloat);
            listLines.Add(lineposition);
            //lineRenderer.SetPosition(i - 1, lineposition);
        }
        lineRenderer.SetPositions(listLines.ToArray());
    }

    public Vector3 CalculateParabola(Vector3 start, Vector3 end, float t, float heigh)
    {
        Vector3 height = Vector3.up * (end - start).magnitude * heigh;
        Vector3 midPoint = (start + end) * 0.5f + height;

        Vector3 P0 = start;
        Vector3 P1 = midPoint;
        Vector3 P2 = end;
        float u = 1 - t;
        float tt = t * t;
        float uu = u * u;
        Vector3 p = uu * P0;
        p += 2 * u * t * P1;
        p += tt * P2;
        return p;
    }
    private void Update()
    {
        aa += Time.deltaTime;
        material.SetTextureOffset("_MainTex", new Vector2(-aa, 0));
    }

}

1.3 下面是材质球所用到的贴图

复制使用即可
请添加图片描述

1.4 最后运行测试即可

效果如下

unity两点之间的抛物线

二.unity根据位置生成路径

2.1 创建空物体,给空物体加上LineRenderer组件,然后创建一个新的材质球给lineRenderer

材质球需要的贴图如下
在这里插入图片描述

2.2 效果如下图

在这里插入图片描述

2.3 代码示例

直接上代码自己测试即可(代码不多,需要其他功能效果请自行扩展)

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

public class PathTool : MonoBehaviour
{
    public LineRenderer lineRenderer;   //线预制体
    public Material lineMaterial;      //线的材质球
    private float oaa;
    private LineRenderer linshiObj;
    public List<Transform> pathTransforms = new List<Transform>(); //所有的位置点
    // Start is called before the first frame update
    void Start()
    {
        List<Vector3> ookok = new List<Vector3>();
        for (int i = 0; i < pathTransforms.Count; i++)
        {
            ookok.Add(pathTransforms[i].position);
        }
        PathCreate(ookok);
    }
    public void PathCreate(List <Vector3>paths)
    {
        if (linshiObj==null)
        {
            linshiObj = Instantiate(lineRenderer);
        }
        linshiObj.gameObject.SetActive(true);
        linshiObj.SetVertexCount(paths.Count);
        linshiObj.SetPositions(paths.ToArray());
        linshiObj.transform.position = lineRenderer.GetPosition(0);
    }
    public void LineClose(bool bol)
    {
        linshiObj.gameObject.SetActive(bol);
    }
    // Update is called once per frame
    void Update()
    {
        if (oaa <100)
        {
            oaa += Time.deltaTime;

            lineMaterial.SetTextureOffset("_MainTex", new Vector2(-oaa, 0));
        }
        else
        {
            oaa = 0;
        }
    }
}

2.4 最后效果如下

根据位置生成路径

三.总结

以上就是抛物线的制作,和根据位置生成路径的方法,如需其他功能请自行添加

如果用的着的话,可以三连哦

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity是一款强大的游戏开发引擎,支持创建各种3D和2D游戏。在Unity中,要创建抛物线效果的网格(mesh),可以使用以下步骤: 1. 首先,在Unity中创建一个空物体作为抛物线网格的父物体。 2. 在该空物体上添加一个Mesh Filter(网格过滤器)组件,并设置其Mesh属性为一个新创建的Mesh实例。 3. 继续在该空物体上添加一个Mesh Renderer(网格渲染器)组件,这样就可以在游戏场景中看到抛物线网格的显示效果。 4. 在代码中,先创建一个空的Mesh实例,并获取其顶点、法线、三角形索引等属性的引用。 5. 使用for循环来生成抛物线上的顶点位置。 6. 将顶点位置数据赋值给Mesh实例的vertices属性。 7. 计算并赋值Mesh实例的法线数据,以确保抛物线网格正确渲染光照效果。 8. 生成并赋值Mesh实例的三角形索引数据,用于指定顶点之间的连接顺序。 9. 调用Mesh实例的RecalculateBounds()方法来重新计算其边界,以确保抛物线网格在场景中正确显示。 10. 使用Mesh Filter组件的sharedMesh属性引用生成的Mesh实例,进而实现抛物线网格的显示。 通过以上步骤,我们可以在Unity中创建一个抛物线的网格。这个网格可以用于渲染游戏场景中的物体,或者用于创建一些特殊的游戏效果,如飞行轨迹、弹道轨迹等。而Mesh这个类则是Unity中用于创建和操纵网格的重要组件,通过设置其顶点、法线、纹理等属性,我们可以根据需求生成不同形状和效果的网格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心疼你的一切

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值