Unity中经过任意两点的抛物线运动
需求:一个小怪在空间中任意两点做抛物线运动(开口朝下),并且被英雄攻击后减速。
代码
using UnityEngine;
public class TestJump : MonoBehaviour
{
public Transform jumpFrom; // 起始点
public Transform jumpTo; // 终点
private Vector3 posStart, posEnd;
public float moveSpeed = 2; // 实际速度
public float moveSpeedFixed = 2; // 移动速度
public float jumpTime = 1.5f; // 起始点-终点的总时间
private float jumpTimer;
private bool jumpInit = false;
void Update()
{
if (!jumpInit)
{
posStart = jumpFrom.position;
posEnd = jumpTo.position;
jumpInit = true;
}
Jump();
}
void Jump()
{
jumpTimer += Time.deltaTime * (moveSpeed / moveSpeedFixed);
float f1 = jumpTimer / jumpTime;
float f2 = jumpTimer - jumpTimer * f1; // 竖直加速运动
Vector3 v1 = Vector3.Lerp(posStart, posEnd, f1); // 水平匀速运动
transform.position = v1 + f2 * Vector3.up;
if (jumpTimer >= jumpTime)
{
jumpTimer = 0;
jumpInit = false;
}
}
}
这个减速仍然沿着原路线运动只是速度减慢,如果要模拟真实的在抛物线运动中被英雄子弹击中后的减速运动,只需根据英雄子弹的方向,调整小怪的水平和竖直速度即可。