红色区域内生成多个互相不穿透的物体
1、四周的边界需创建大尺寸的Collider防止穿透

并且Rigidbody2d需进行如下设置,设置Constraints锁定固定物体的位置和旋转角度,防止被生成的物体挤出

2、设置要生成的物体的Collider和Rigidbody2d,这里我锁定了旋转

3、代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BallCtrl : ReusableObject
{
Rigidbody2D _rigidbody;//物体的刚体
private void Awake()
{
_rigidbody = transform.GetComponent<Rigidbody2D>();
}
//物体的缩放
public void Scale()
{
//这里是重点!!!
//判断生成的物体是否与其它物体发生重合
//因为我用的是圆形碰撞,所以用OverlapCircleAll
var colliders = Physics2D.OverlapCircleAll(transform.position, transform.GetComponent<CircleCollider2D>().radius * transform.localScale.x - 0.1f);
bool scale = true;
for (int i = 0; i < colliders.Length; i++)
{
if (colliders[i].gameObject == gameObject)
{
//物体第一个碰到的永远是自己,跳过
continue;
}
else
{
scale = false;
}
}
if (scale)
{
transform.localScale += Vector3.one * Time.deltaTime * Const.BallScaleSpeed;
}
}
//物体的移动
public void MovePosition(Vector2 worldPos)
{
// 修改为刚体控制移动 --> 则不会被穿透了
_rigidbody.MovePosition(worldPos);
}
}
最终效果如下:实现了点击屏幕生成物体,物体一边放大一边移动,并且不会超过区域外,每个物体之间不会发生重叠

版权声明:本文为cuijiahao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。