之前分享了关于两点之间抛物线的“金手指”的实现方案,然后有朋友问我,一般情况下会给出速度,如何模拟自然的轨迹。
我一听这不是很容易实现么,根据之前的公式,得出两点之间时间恒定时,轨迹是确定的,也就是说平均速度是恒定。
那么反过来,在给定平均速度,然后再通过距离/速度,就可得出时间,那么轨迹也就确定了。
OK,我不多废话,直接上代码:
using UnityEngine; using System.Collections; public class PaoWuLine : MonoBehaviour { public float ShotSpeed = 10; private float time = 1;//代表从A点出发到B经过的时长 public Transform pointA;//点A public Transform pointB;//点B public float g = -10;//重力加速度 // Use this for initialization private Vector3 speed;//初速度向量 private Vector3 Gravity;//重力向量 private Vector3 currentAngle; void Start() { time = Vector3.Distance(pointA.position, pointB.position)/ShotSpeed; transform.position = pointA.position;//将物体置于A点 //通过一个式子计算初速度 speed = new Vector3((pointB.position.x - pointA.position.x) / time, (pointB.position.y - pointA.position.y) / time - 0.5f * g * time, (pointB.position.z - pointA.position.z) / time); Gravity = Vector3.zero;//重力初始速度为0 } private float dTime = 0; // Update is called once per frame void FixedUpdate() { Gravity.y = g * (dTime += Time.fixedDeltaTime);//v=at //模拟位移 transform.position += (speed + Gravity) * Time.fixedDeltaTime; currentAngle.x = -Mathf.Atan((speed.y + Gravity.y) / speed.z) * Mathf.Rad2Deg; transform.eulerAngles = currentAngle; } }
也可以在这个基础上修改为2d的,
①speed = new Vector3改为speed = new Vector2
②currentAngle.x = -Mathf.Atan中的currentAngle.x需要改为currentAngle.z
③(speed.y + Gravity.y) / speed.z)改为(speed.y + Gravity.y) / speed.x)
④currentAngle.z = -Mathf.Atan有时候需要改为currentAngle.z = Mathf.Atan
⑤public float ShotSpeed = 10;有是运行正常之后需要修改的主要参数,可能需要改为100等值,根据效果进行调整
⑥如果在①和②调整后,还有问题,可以考虑将(speed.y + Gravity.y) / speed.x改为(speed.x + Gravity.x) / speed.y
相关推荐
float angle = Mathf.Min (1, Vector3.Distance (this.transform.position, targetPos
整个Unity项目,使用简单项目展示如何在给定抛物线起点、终点及高度的情况下,运算抛物线抛射力,实现击中目标的最终效果
是2D UI上,根据XY来运行的,内含源码工程,导入工程后可直接运行,双击Scene场景运行,Unity版本:2018.4.10f
unity 生成网格线,用于移动轨迹,弹道,地图标注等
Vectrosity.v4.0.2 兼容所有unity4.0以上,有demo unity 画线插件, 直线 曲线 运动轨迹
unity5.6.3X64工程,功能是绘制场景中运动物体的轨迹,即游戏物体运动时把路过的轨迹用曲线绘制出来。任意曲线轨迹都可以实现。
获取一些抛物线上的点,然后相邻的两点和原点画三角面,这样可以用三角面拼成了“抛物面”了,而且还可以通过修改a的值来改变小山峰的陡峭程度。73
用javascript在网页设计中做的一个小球抛物运动,适合初学
unity工具,htc vive 利用抛物线移动。 HTC Vive Teleportation System with Parabolic Pointer
这里结合官方demo中的几个介绍这个插件的用法,其实很简单,学会后可以轻松拖出一条甚至多条复杂的轨迹,然后可以让物体沿着轨迹运动,更强大的是可以在轨迹上动态生成相应的赛道和轨道,可以控制刚体在轨道上自由...
unity3d,箭的抛物线轨道
主要模拟Unity开发VR手柄发射射线拖拽物体时候的曲线效果。BezierCurve的应用,也作为VR瞬移时候抛物线的实现参考。
unity画线
适合新手学习查看。 内容包含:单例使用,ui按钮点击,携程的使用。 看下方视频确定这个资源是否适合你。 视频地址:https://live.csdn.net/v/158767
主要为大家详细介绍了Unity实现画线条功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Unity画线插件
unity 贝塞尔曲线和Dotween配合的具体应用,可以配合你
C# unity3d 摄像机轨迹录制及播放
unity测量线Measure+Line+1.3c unity 画线插件,知道两点的坐标可以在两点间画线
该资源,是Unity 3D路径跟随,可以选择闭合曲线和非闭合曲线,目标跟随时可以选择旋转跟随和非旋转跟随,曲线的绘制采用Hermite曲线。