unity2D让游戏物体在不规则范围内随机移动

整体思路是,利用polygon collider 2D做了一个边缘的触发器,但是如果只是让游戏物体触碰到边缘后,随机改变方向,或者仅仅只是方向取反,会造成下列一些极限情况。
比如随机取一个方向,就直接从边缘朝外面移动了,这里如果说给一个随机方向的范围,但因为是不规则边缘,那么很有可能一开始游戏物体的运动方向和边缘的切线就只有10°,或者更小,那么无论怎样都会有个极限情况,让游戏物体飞到了外界。
如果取反的话,会看着游戏物体非常的僵硬。
下面我要做的就是让鸡在鸡圈中随机移动,并且不会移动到鸡圈外。
在这里插入图片描述
第一步,加一个polygon检测器
在这里插入图片描述
按照你想要的区域,把它勾出来即可

第二步,加几个随机点,这在后面,判断碰到碰撞器的时候有用。
注意随机点最好几个方向都有一个,并且要放在边缘碰撞检测的里面。
在这里插入图片描述

第三步,给挂有边缘检测的gameobject加一个脚本
用来判断,当游戏物体从检测器中离开的时候&#

1. 创建一个UI物体,比如一个圆形的Image组件。 2. 创建一个脚本,挂在UI物体上,用于控制UI物体移动。 3. 在脚本中,定义一个圆形的范围,可以用一个圆形碰撞体来表示。 4. 在Update函数中,随机生成一个点,判断该点是否在圆形范围内,如果在,则将UI物体移动到该点。 5. 使用Vector2.MoveTowards函数将UI物体移动到目标点,控制移动速度。 6. 在脚本中可以设置移动速度、圆形范围大小等参数,根据需求进行调整。 下面是一个示例代码: ``` using UnityEngine; using UnityEngine.UI; public class RandomMove : MonoBehaviour { public float moveSpeed = 50f; //移动速度 public float circleRadius = 100f; //圆形范围半径 private Vector3 targetPosition; //目标位置 private CircleCollider2D circleCollider; //圆形碰撞体 private void Start() { circleCollider = GetComponent<CircleCollider2D>(); } private void Update() { //生成随机位置 Vector3 randomPosition = new Vector3(Random.Range(-circleRadius, circleRadius), Random.Range(-circleRadius, circleRadius), transform.position.z); //判断随机位置是否在圆形范围内 if (circleCollider.bounds.Contains(randomPosition)) { targetPosition = randomPosition; } //移动到目标位置 transform.position = Vector2.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime); } private void OnDrawGizmosSelected() { //绘制圆形范围 Gizmos.color = Color.green; Gizmos.DrawWireSphere(transform.position, circleRadius); } } ``` 将该脚本挂在UI物体上,即可实现UI物体在圆形范围内进行随机移动
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值