unity3d——基础篇2刷(Mathf练习题)
第一种方式:先快后慢的跟随(平滑加速减速)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowCube : MonoBehaviour
{
public Transform B;
public float moveSpeed;
private Vector3 pos;
void Update()
{
// 先快后慢的形式
pos.x = Mathf.Lerp(pos.x, B.position.x, Time.deltaTime * moveSpeed);
pos.y = Mathf.Lerp(pos.y, B.position.y, Time.deltaTime * moveSpeed);
pos.z = Mathf.Lerp(pos.z, B.position.z, Time.deltaTime * moveSpeed);
this.transform.position = pos;
}
}
第二种方式:匀速运动的跟随
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowCube : MonoBehaviour
{
public Transform B;
public float moveSpeed;
private Vector3 pos;
private Vector3 bNowPos;
private Vector3 startPos;
private float time;
void Update()
{
// 匀速运动
if (bNowPos != B.transform.position)
{
time = 0;
bNowPos = B.transform.position;
startPos = this.transform.position;
}
time += Time.deltaTime;
pos.x = Mathf.Lerp(startPos.x, bNowPos.x, time);
pos.y = Mathf.Lerp(startPos.y, bNowPos.y, time);
pos.z = Mathf.Lerp(startPos.z, bNowPos.z, time);
this.transform.position = pos;
}
}
在第一种方式中,pos
变量存储了当前的跟随位置,并且每帧都会根据 Time.deltaTime
和 moveSpeed
来平滑地插值到目标位置 B.position
。这种方式的特点是跟随速度会随着接近目标而逐渐减慢,给人一种先快后慢的感觉。
在第二种方式中,使用了 startPos
和 bNowPos
来记录起始位置和目标位置,并且使用 time
变量来控制插值的速度。这种方式的特点是无论距离目标有多远,都会以恒定的速度向目标移动,直到到达目标位置。
这两种方式都可以实现跟随效果,但它们在实际应用中会有不同的表现和适用场景。