Unity新手求助:如何在两个游戏对象间实现平滑线性平移
两个立方体之间的平滑线性平移实现方案
嘿,作为Unity新手,想搞定两个立方体之间的平滑平移完全没问题!我看你已经有了初步的代码框架,我来帮你完善并解释清楚怎么实现~
首先先修正你代码里的小问题:类名LinearTrasnformation拼写错啦,应该是LinearTransformation,少了个字母'f'哦。接下来咱们用两种常用的平滑移动方法来实现需求,你可以根据自己的场景选合适的。
完整实现代码
public class LinearTransformation : MonoBehaviour { // 拖拽两个立方体到这里 public GameObject cube1, cube2; // 移动速度,可在Inspector面板直接调整 public float moveSpeed = 2f; // 标记是否正在移动 private bool isMoving = false; void Update () { // 按上箭头触发向cube2移动 if(Input.GetKeyDown(KeyCode.UpArrow)) { isMoving = true; } // 按下箭头停止移动 if(Input.GetKeyDown(KeyCode.DownArrow)) { isMoving = false; } if(isMoving) { // 方法1:匀速移动到目标点(推荐用于需要恒定速度的场景) cube1.transform.position = Vector3.MoveTowards( cube1.transform.position, cube2.transform.position, moveSpeed * Time.deltaTime ); // 方法2:缓动减速到目标点(更自然的平滑效果) // cube1.transform.position = Vector3.Lerp( // cube1.transform.position, // cube2.transform.position, // moveSpeed * Time.deltaTime // ); // 当立方体接近目标时自动停止,避免微小抖动 if(Vector3.Distance(cube1.transform.position, cube2.transform.position) < 0.01f) { isMoving = false; cube1.transform.position = cube2.transform.position; // 确保位置完全对齐 } } } }
关键细节解释
- 速度控制:添加了
moveSpeed变量,你可以在Unity编辑器的Inspector面板直接拖动调整数值,不用每次改代码重新编译 - 输入处理:用
Input.GetKeyDown代替GetKey,这样按一次按键只会触发一次状态切换,不会按住时一直重复触发 - 两种平滑方式:
Vector3.MoveTowards:保持匀速移动,到达目标点就停止,适合需要稳定速度的场景Vector3.Lerp:移动速度会随着和目标点的距离缩短而变慢,最后平滑停下,视觉效果更柔和
- 停止判断:用
Vector3.Distance检测两个立方体的距离,当小于0.01时自动停止,避免因为浮点精度问题导致的微小抖动
使用步骤
- 在Unity里创建一个空物体(或者直接挂载到其中一个立方体上)
- 将上述脚本挂载到这个物体上
- 在Inspector面板中,把你的两个立方体分别拖拽到
cube1和cube2的引用框里 - 调整
moveSpeed到你觉得合适的数值(比如2f对应每秒移动2个单位) - 运行游戏,按上箭头启动移动,按下箭头停止移动
内容的提问来源于stack exchange,提问作者Mohit Gandhi
相关产品推荐
相关产品推荐

