Unity3d 如何限制精灵在统一中移动的位置?

Unity3d 如何限制精灵在统一中移动的位置?,unity3d,2d,Unity3d,2d,我对Unity还比较陌生,所以请耐心听我说,我试着到处寻找答案,但没有运气 基本上,我使用onMouseDrag在教室1366x768(有一张桌子)的背景上移动精灵。然而,我想限制精灵可以去哪里,这样它就不会离开屏幕或离开我背景上的桌子 我的精灵有2d长方体碰撞器和刚体组件,附加重力设置为零,并且处于固定角度。我认为,通过在区域周围放置四个2d框碰撞器,我想将精灵保持在其中,这足以容纳它,但精灵只是直接穿过它们 我也读过关于使用Mathf.Clamp限制区域的内容,但从我所看到的示例中,我并不真

我对Unity还比较陌生,所以请耐心听我说,我试着到处寻找答案,但没有运气

基本上,我使用onMouseDrag在教室1366x768(有一张桌子)的背景上移动精灵。然而,我想限制精灵可以去哪里,这样它就不会离开屏幕或离开我背景上的桌子

我的精灵有2d长方体碰撞器和刚体组件,附加重力设置为零,并且处于固定角度。我认为,通过在区域周围放置四个2d框碰撞器,我想将精灵保持在其中,这足以容纳它,但精灵只是直接穿过它们

我也读过关于使用Mathf.Clamp限制区域的内容,但从我所看到的示例中,我并不真正理解如何使用它

下面是我移动精灵的代码:

using UnityEngine;
using System.Collections;

public class MovementScript : MonoBehaviour {

    float x;
    float y;

    void Update() {
        x = Input.mousePosition.x;
        y = Input.mousePosition.y;
    }

    public void OnMouseDrag() {
        transform.position = Camera.main.ScreenToWorldPoint (new Vector3 (x, y, 1.0f));
    }
}

任何帮助都将不胜感激

使用对象的变换移动对象与移动对象不同

当您使用转换时,对象不会移动,它会传送少量的每次更新。不幸的是,刚体无法在运动时检测到位置的变化,因此不会与任何碰撞器发生反应。无论如何,这可能是更复杂的方法。使用夹钳肯定更容易

这是一个非常简单的函数。它有三个参数:值、最小值和最大值。如果值小于最小值或大于最大值,则返回该边界。否则,它将返回值本身

比如说,

Mathf.Clamp(5, 1, 3); //returns 3
Mathf.Clamp(2, 1, 3); //returns 2
Mathf.Clamp(-2, 1, 3); //returns 1
这只是一个方便的函数,用于以下内容:

if(val > max) {
    return max;
} else if(val < min) {
    return min;
} else {
    return val;
}

Clamp会将变换的X和Y坐标分别保持在minX、maxX和minY、maxY的范围内。您可以将这些变量创建为inspector变量,以便可以动态更改它们。

谢谢您提供的信息。我理解您所说的一切,并尝试实现代码。我将inputX和inputY更改为x和y,并在检查器中输入最小和最大坐标值。然而,只要我点击精灵,它就会直接进入屏幕的左下角,我无法移动它。
//to avoid confusion, I'm referring to your x and y variables
//as inputX and inputY. they represent the mouse position.
public void OnMouseDrag() {
    Vector3 pos = Vector3.zero;
    pos.x = Mathf.Clamp(inputX, minX, maxX);
    pos.y = Mathf.Clamp(inputY, minY, maxY);
    pos.z = 1.0;
    transform.position = Camera.main.ScreenToWorldPoint (pos);
}