Unity中经过任意两点的抛物线运动

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;
        }
    }
}

这个减速仍然沿着原路线运动只是速度减慢,如果要模拟真实的在抛物线运动中被英雄子弹击中后的减速运动,只需根据英雄子弹的方向,调整小怪的水平和竖直速度即可。

猜你喜欢

转载自blog.csdn.net/Teddy_k/article/details/79710498