如何限制在某一范围内放置?
- 首先在场景中新建一个空物体。
- 然后添加Sprite Renderer组件,拖进一张类似放置范围形状的图片,样子无所谓,因为透明度可以设成0,添加碰撞体后还可以删掉。
- 接着添加碰撞体,碰撞体类型也是根据放置范围的形状需要,并将碰撞体的Is Trigger属性勾选上。
public Collider2D boardA; // 表示范围的物体引用
private Vector2 generatePosition; // 生成位置
private Bounds boundsA; // 范围边界
private bool isInsideBoundA; // 判断是否在范围内触碰屏幕
boundsA = boardA.bounds; // 获取范围边界
if (Input.GetMouseButtonDown(0))
{
generatePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
isInsideBoundA = boundsA.Contains(generatePosition); // 核心语句
if (isInsideBoundA)
Generate(); // 在范围内,调用放置函数
}
如何判断是否重叠?
- 对于每个放置的物体,添加一个同名子物体,该子物体用于表示“不可重叠的范围”。
private bool isInsideOthers;
Collider2D[] colls = Physics2D.OverlapPointAll(generatePosition); // 核心语句
isInsideOthers = false;
foreach (Collider2D coll in colls)
{
if (coll.name == "Unplaceable")
isInsideOthers = true;
}
if(!isInsideOthers)
Generate(); // 若不在重叠范围内,允许放置