【问题标题】:Limit Unity Orthographic Camera Panning Movement限制 Unity 正交相机平移运动
【发布时间】:2015-12-22 07:49:32
【问题描述】:

我有一个脚本,通过使用鼠标中键来控制 Unity 中的正交相机平移运动。位于世界中心 (0,0,0) 的空游戏对象(例如名称为 MainCamPivot(请参见图片))充当相机的父对象。相机本身具有 Vector3(45f, 225f, 0f) 的局部欧拉角。使用此脚本(附加到相机),我可以很好地在 X 和 Y 轴上平移/移动相机:

public float panSpeed = 0.05f;

private Vector3 lastMousePos;

void Start ()
{
    lastCamPos = transform.position;
}

void Update()
{
   if(Input.GetMouseButtonDown(2))
   {
      lastMousePos = Input.mousePosition;
   }
   if(Input.GetMouseButton(2))
   {
      Vector3 touchDeltaPosition = Input.mousePosition - lastMousePos;
      transform.Translate(-touchDeltaPosition.x * panSpeed, -touchDeltaPosition.y * panSpeed, 0);
      lastMousePos = Input.mousePosition;
   }

   // To limit the orthographic camera panning movement:
   if(transform.localPosition.x < 10f) transform.localPosition = new Vector3(10f, transform.localPosition.y, 16.3f);
   if(transform.localPosition.x > 23f) transform.localPosition = new Vector3(23f, transform.localPosition.y, 16.3f);
   if(transform.localPosition.y < 15f) transform.localPosition = new Vector3(transform.localPosition.x, 15f, 16.3f);
   if(transform.localPosition.y > 28f) transform.localPosition = new Vector3(transform.localPosition.x, 28f, 16.3f);
}

为了限制相机平移运动,我为相机的 X 和 Y 位置设置了一些限制。问题是相机的Z位置值总是在变化,所以给相机的Z位置设置一个固定的位置会使相机像下图那样对角平移/移动:

使用脚本正确限制正交相机平移运动的最佳方法是什么? (如下图)

【问题讨论】:

  • 删除我的答案,我意识到你已经在玩本地位置了。
  • 你解决了吗?尝试使用两个枢轴,一个具有脚本,另一个反映 z 变化。我为我的一个项目做了这样的事情。

标签: c# unity3d game-engine orthographic


【解决方案1】:

如何不使用枢轴,而是根据玩家按住按钮时鼠标位置的差异来设置相机的位置。您在上面尝试做的是相对于块状物体移动相机。相反,您应该相对于自身移动相机。

获取用户点击按钮时的鼠标位置,在LateUpdate()中,当玩家仍然按住按钮时,调用:

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

public class CameraMovement : MonoBehaviour {

    private Vector3 InitialClickPosition;
    private bool Pan = false;
    private const int MOUSE_BUTTON = 0;

    private void LateUpdate()
    {
        if (Input.GetMouseButtonDown(MOUSE_BUTTON))
        {
            InitialClickPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        }
        else if (Input.GetMouseButton(MOUSE_BUTTON))
        {
            var difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position;
            Camera.main.transform.position = InitialClickPosition - difference;
        }
    }
}

这行得通。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多