Unity - 限制相机移动XY轴

时间:2014-03-18 07:46:03

标签: unity3d

我有以下代码,可以使用可拖动鼠标滚动地图。我试图定义限制,以便我无法在x或y坐标中滚动太远。我已经看过各种代码示例,例如:     " transform.position.x = Mathf.Clamp(-100,100);"虽然无法将其合并到代码中。我是这一切的初学者,刚刚完成了一个动画僵尸的2D教程,并且有一个可以滚动的摄像头,但是想在任何给定方向上滚动的距离增加限制。

谢谢堆

亚当

using UnityEngine;
using System.Collections;

public class ViewDrag : MonoBehaviour {
    Vector3 hit_position = Vector3.zero;
    Vector3 current_position = Vector3.zero;
    Vector3 camera_position = Vector3.zero;
    float z = 0.0f;

    // Use this for initialization
    void Start () {

    }

    void Update(){
        if(Input.GetMouseButtonDown(0)){
            hit_position = Input.mousePosition;
            camera_position = transform.position;

        }
        if(Input.GetMouseButton(0)){
            current_position = Input.mousePosition;
            LeftMouseDrag();        
        }
    }

    void LeftMouseDrag(){
        // From the Unity3D docs: "The z position is in world units from the camera."  In my case I'm using the y-axis as height
        // with my camera facing back down the y-axis.  You can ignore this when the camera is orthograhic.
        current_position.z = hit_position.z = camera_position.y;

        // Get direction of movement.  (Note: Don't normalize, the magnitude of change is going to be Vector3.Distance(current_position-hit_position)
        // anyways.  
        Vector3 direction = Camera.main.ScreenToWorldPoint(current_position) - Camera.main.ScreenToWorldPoint(hit_position);

        // Invert direction to that terrain appears to move with the mouse.
        direction = direction * -1;

        Vector3 position = camera_position + direction;

        transform.position = position;
    }
}

1 个答案:

答案 0 :(得分:0)

你得到的错误究竟是什么?我想这是因为它不是变量而无法修改position的返回值。

如果是这种情况,您应该能够立即设置整个位置向量。所以尝试一下这个:

var pos = transform.position;
transform.position = new Vector3(
    Math.clampf(pos.x, -100, 100), 
    Math.clampf(pos.y, -100, 100),
    pos.z
);

您可能需要更换夹具Y和Z,具体取决于您的使用方式。