Unity-防止子对象被拖动到父对象之外



我已经为此斗争了一段时间。这个想法是让玩家沿着x轴绕着它的父母拖动一个孩子。我不希望他们能够把球移到左侧或右侧之外。在大多数情况下,代码会阻止他们向外向左拖动,但一旦这样做,他们就不能再以另一种方式向后拖动了。我试着在父对象中添加一个BoxCollider2D,认为它可以阻止它越过边界,但它没有。我在子对象上有一个CapuleCollider2D。

public class DragDrop : MonoBehaviour
{
private Vector3 mOffset;
private float mZCoord;
void OnMouseDown()
{
mZCoord = Camera.main.WorldToScreenPoint(
gameObject.transform.position).z;
// Store offset = gameobject world pos - mouse world pos
mOffset = gameObject.transform.position - GetMouseAsWorldPoint();
}
private Vector3 GetMouseAsWorldPoint()
{
// Pixel coordinates of mouse (x,y)
Vector3 mousePoint = Input.mousePosition;
// z coordinate of game object on screen
mousePoint.z = mZCoord;
// Convert it to world points
return Camera.main.ScreenToWorldPoint(mousePoint);
}
void OnMouseDrag()
{
var pos = GetMouseAsWorldPoint() + mOffset;
var minX = GetComponent<SpriteRenderer>().bounds.min.x;
var maxX = GetComponent<SpriteRenderer>().bounds.max.x;
var minXp = transform.parent.GetComponent<SpriteRenderer>().bounds.min.x;
var maxXp = transform.parent.GetComponent<SpriteRenderer>().bounds.max.x;

if (minXp < 0)
{
if (minX < minXp)
{
return;
}
}
else if (maxX > maxXp)
return;
transform.position = new Vector3(pos.x, transform.position.y, transform.position.z);
}
}

而不是返回->不做任何事情,你应该像一样夹住机芯本身

// The distance in negative X direction
// between position and bounds.min.x
var deltaNeg = transform.position.x - minX;
// The distance in positive x direction 
// between position and bounds.max.x
var deltaPos = transform.position.x - maxX;
// pos has to stay within parents bounds with given delta distances
pos.x = Mathf.Clamp(pos.x, minXp + deltaNeg, maxXp + deltaPos);
transform.position = new Vector3(pos.x, transform.position.y, transform.position.z);

注意:在智能手机上打字,但我希望这个想法能清楚

最新更新