Unity 2D中实现物体到达指定点后传送回初始位置的方法
实现方法
按以下逻辑修改脚本即可实现汽车循环往复移动的效果:
- 初始化时记录汽车的初始出生位置,作为重置后的返回点位
- 修正原移动逻辑的帧率适配问题:原写法中移动速度未乘以
Time.deltaTime,会导致不同设备帧率不同时汽车移动速度不一致,需要调整计算方式 - 每帧完成移动后,判断汽车是否到达下方设定的重置边界,触发边界后直接将汽车坐标重置为初始位置即可
- 可选优化:如果要降低玩法规律性,重置位置时可以在预设范围内随机X轴坐标,避免每次汽车都从完全相同的位置下落
修改后的完整代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { [Header("移动参数")] public float moveSpeed = 5f; public float resetYThreshold = -10f; // 汽车Y坐标小于该值时触发重置 public bool randomXOnReset = false; // 重置时是否随机X坐标 public float minRandomX = -5f; public float maxRandomX = 5f; private Vector3 _startPos; void Start () { // 记录初始出生位置 _startPos = transform.position; } void Update () { // 修正后的帧率无关移动逻辑 transform.Translate(0, -moveSpeed * Time.deltaTime, 0); // 到达重置阈值时回到初始位置 if (transform.position.y <= resetYThreshold) { Vector3 resetPos = _startPos; if (randomXOnReset) { resetPos.x = Random.Range(minRandomX, maxRandomX); } transform.position = resetPos; } } }
参数调整说明
- 所有public字段都可以直接在Unity Inspector面板调整,不需要修改代码重新编译
resetYThreshold根据你的游戏场景地面/屏幕下边界位置设置即可,建议设为汽车完全移出玩家视野后的Y值,避免重置动作被玩家看到- 原脚本中声明的
public Transform tf;字段未被使用,没有其他逻辑需求的话可以直接删除
内容的提问来源于stack exchange,提问作者Froyleduckle Gaming
相关产品推荐
相关产品推荐

