【发布时间】:2020-11-30 01:38:12
【问题描述】:
我已经为此奋斗了一段时间。这个想法是让玩家沿着 x 轴围绕其父级拖动一个子级。我不希望他们能够将它移到左侧或右侧之外。在大多数情况下,代码会阻止他们向左拖动,但一旦这样做,他们就不能再将其拖回另一种方式。我尝试将 BoxCollider2D 添加到父级,认为它会阻止它越过边界,但事实并非如此。我在子对象上有一个 CapsuleCollider2D。
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);
}
}
【问题讨论】:
标签: unity3d