如何在统一的 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 空间中平移?的主要内容,如果未能解决你的问题,请参考以下文章