最近在B站乱七八糟看了很多不同的视频, 发现弧线的跟踪弹实现的思路基本都是类似的
思路
固定物体的速度,利用圆形弧线差值来改变物体的方向。 Vector3.Slerp(Vector3 origin,Vector3 end, float smooth); smooth趋近0返回第一个参数,smooth趋近1返回第二个参数, 0到1之间经过复杂的计算得到两个参数对应方向之间,根据 smooth/1.得到两者之间角度的占比,返回该角度对应的方向在弧线上的坐标。
演示
for (int i = 0; i < 11; i++)
{
Debug.DrawLine(vec3, Vector3.Slerp(point1.position, point2.position, i*0.1f), Color.red);
}
跟踪弹代码
private void FixedUpdate()
{
direction = (targetPos - transform.position).normalized;
if (!arrived)
{
transform.right = Vector3.Slerp(transform.right, direction, lerp / Vector2.Distance(transform.position, targetPos));
rigidbody.velocity = transform.right * speed;
}
if (Vector2.Distance(transform.position, targetPos) < 1f && !arrived)
{
arrived = true;
}
}
改成这样会让弧线更偏上
transform.up= Vector3.Slerp(transform.up, direction, lerp / Vector2.Distance(transform.position, targetPos));
|