如何在统一的 3d 空间中平移?

Posted

技术标签:

【中文标题】如何在统一的 3d 空间中平移?【英文标题】:How to pan in unity 3d space? 【发布时间】:2021-10-17 03:13:18 【问题描述】:

我有两个附加到我的主相机对象的 c# 脚本。这些脚本围绕我的游戏对象旋转,还允许我放大和缩小。但我正在尝试平移。我该怎么做?

我有一些附加到我的主相机对象的类。它是旋转和放大和缩小。但它非常有限。我想通过游戏平移。我该怎么做?

这是我的旋转代码:

    [SerializeField] private Camera cam;
    private Vector3 previousPosition;

    void Update()
    
        Vector3 eulerAngles = transform.rotation.eulerAngles;
        eulerAngles = new Vector3(0, eulerAngles.y, 0);
        transform.rotation = Quaternion.Euler(eulerAngles);
        if (Input.GetMouseButtonDown(2))
        
            previousPosition = cam.ScreenToViewportPoint(Input.mousePosition);
        

        if (Input.GetKey(KeyCode.LeftShift) && Input.GetMouseButton(2))
        
            Vector3 direction = previousPosition - cam.ScreenToViewportPoint(Input.mousePosition);
            cam.transform.RotateAround(new Vector3(), new Vector3(1, 0, 0), direction.y * 45);
            cam.transform.RotateAround(new Vector3(), new Vector3(0, 1, 0), -direction.x * 360);
            // cam.transform.RotateAround(new Vector3(), new Vector3(1, 0, 0), -direction.y * 360);

            previousPosition = cam.ScreenToViewportPoint(Input.mousePosition);
        
    

这是我的缩放代码:

    [SerializeField] private Camera cam;

    void Update()
    
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
        
            cam.GetComponent<Camera>().fieldOfView--;
        
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        
            cam.GetComponent<Camera>().fieldOfView++;
        
    

正如我所提到的,它们都连接到我的主摄像头。这些脚本的问题是我想平移而这些脚本不这样做。如何围绕我的游戏对象平移我的相机?

【问题讨论】:

【参考方案1】:

就这样做

transform.Translate(direction * Time.deltaTime);

其中direction是一个Vector3,你想要平移的方向。

问题是,您的旋转脚本围绕位置 0,0,0 旋转。因此,一旦您从那里移动相机,旋转将无法正常工作。您必须更改旋转脚本才能使用正确的位置。

与实际平移相机相比,您会发现拥有一个空的游戏对象并让相机跟随该游戏对象更容易。当您想要移动相机时平移该对象,并使用对象的位置并围绕它旋转相机,假设您不希望相机跟随玩家。

【讨论】:

以上是关于如何在统一的 3d 空间中平移?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ARKit 中平滑多边形网格?

实现一个复杂的基于旋转的相机

如何在 STL 加载的 BufferGeometry 中平滑网格三角形

无法在缩放的 ScrollView 中平移图像?

如何在 PyQt 4 中平铺两个像素图?

在OpenGL中平移和移动相机的正确方法?