You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D技术问询:如何实现模型跨屏幕左右瞬移?

实现Stick模型跨屏幕瞬移的方案

嘿,我来帮你搞定这个瞬移需求!核心思路就是检测模型是否超出相机的左右可视边界,一旦超出就直接把它的位置瞬移到对面的边界内。下面给你具体的实现步骤和代码:

核心逻辑步骤

  • 先获取相机的左右可视边界坐标(因为相机X轴固定,边界值可以提前缓存,不用反复计算)
  • 每一帧检查模型的X坐标是否超出左/右边界
  • 超出时将模型瞬移到对面的对应位置(加个小偏移避免模型卡在边界上反复触发瞬移)

代码实现(适配正交相机,最常用场景)

把这个脚本挂在你的Stick模型上即可:

using UnityEngine;

public class StickTeleport : MonoBehaviour
{
    private Camera mainCamera;
    private float leftBoundary;
    private float rightBoundary;
    // 瞬移时的偏移量,避免模型刚好卡在边界上反复触发检测
    public float teleportOffset = 0.1f;

    void Start()
    {
        mainCamera = Camera.main;
        // 把相机视口的左右边缘(视口坐标x=0是左,x=1是右)转换成世界坐标
        Vector3 leftWorldPos = mainCamera.ViewportToWorldPoint(new Vector3(0, 0, mainCamera.nearClipPlane));
        Vector3 rightWorldPos = mainCamera.ViewportToWorldPoint(new Vector3(1, 0, mainCamera.nearClipPlane));
        
        // 提取X轴的边界值
        leftBoundary = leftWorldPos.x;
        rightBoundary = rightWorldPos.x;
    }

    void Update()
    {
        Vector3 currentPos = transform.position;

        // 超出右边界时,瞬移到左边界右侧
        if (currentPos.x > rightBoundary)
        {
            currentPos.x = leftBoundary + teleportOffset;
            transform.position = currentPos;
        }
        // 超出左边界时,瞬移到右边界左侧
        else if (currentPos.x < leftBoundary)
        {
            currentPos.x = rightBoundary - teleportOffset;
            transform.position = currentPos;
        }
    }
}

额外注意点

  • 如果你的相机是透视相机,上面的视口转世界坐标方法依然可用,只需注意nearClipPlane的设置即可;也可以改用ScreenToWorldPoint计算边界,逻辑完全一致
  • teleportOffset的数值可以根据你的模型大小调整,确保瞬移后不会立刻再次触发边界检测
  • 因为相机X轴静止,所以边界值在Start里计算一次就足够,不用每帧重复计算,能节省性能

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:14:31