栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity 区域内生成多个不穿透的物体

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity 区域内生成多个不穿透的物体

红色区域内生成多个互相不穿透的物体 

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();
    }

    //物体的缩放
    public void Scale()
    {
        //这里是重点!!!
        //判断生成的物体是否与其它物体发生重合
        //因为我用的是圆形碰撞,所以用OverlapCircleAll
        var colliders = Physics2D.OverlapCircleAll(transform.position, transform.GetComponent().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);
       
    }   
    
}

最终效果如下:实现了点击屏幕生成物体,物体一边放大一边移动,并且不会超过区域外,每个物体之间不会发生重叠

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号