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

如何基于相机视图将Unity对象恢复至初始视觉位置?

解决Unity中相机跟随对象的视图内复位问题

问题场景

需要让test对象在左键点击时,回到相机视角内的初始固定位置,而非世界坐标的初始位置。当前相机跟随test移动,原代码存储世界坐标originalPos的方式,复位时会回到世界空间的初始点,不符合需求。尝试多种相机坐标转换方法(如WorldToScreenPoint、ViewportToWorldPoint等)均无效,甚至未移动对象就点击左键也会导致移位。

解决方案

核心是存储test相对于相机的位置偏移量,而非世界坐标。相机跟随移动时,其世界位置会变化,但对象与相机的相对位置关系固定,复位时基于当前相机位置加上偏移量,即可让对象回到相机视角内的初始位置。

修改后的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WalkParent : MonoBehaviour
{
    GameObject test;
    // 存储test与相机的世界位置偏移量
    Vector3 cameraRelativeOffset;
    [SerializeField] private Camera mainCamera;  

    void Start()
    {
        test = GameObject.FindWithTag("TT");
        // 计算初始状态下,test相对于相机的位置差值
        cameraRelativeOffset = test.transform.position - mainCamera.transform.position;
    }

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            // 用当前相机位置加上偏移量,得到test的目标位置
            test.transform.position = mainCamera.transform.position + cameraRelativeOffset;
        }
    }
}

原方法无效原因说明

之前尝试的坐标转换方法(如WorldToViewportPoint)仅记录了视图空间的二维坐标(x,y),未保留对象到相机的Z轴深度信息。例如使用ViewportToWorldPoint时,若只传入视图坐标,Z值默认为0,会将对象放置在相机近裁剪面位置,导致移位。而存储相对偏移量的方式,直接保留了对象与相机在三维空间中的位置关系,无论相机如何移动,都能确保对象回到视角内的初始位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:07:42