Unity2D 利用代码模拟鱼在屏幕内进行平面运动,同时鼠标点击之后,点击范围内的鱼会有躲避效果
时间: 2024-04-14 16:25:53 浏览: 149
跟着鼠标移动的鱼,很有意思的,大家可以试试啊
5星 · 资源好评率100%
要在Unity中利用代码模拟鱼在屏幕内进行平面运动,并实现鼠标点击范围内的鱼有躲避效果,可以通过以下步骤来实现:
1. 创建一个空的GameObject,并将其命名为"Fish"。
2. 在Fish对象上添加一个Sprite Renderer组件,并将鱼的图片作为Sprite。
3. 添加一个Rigidbody2D组件,并将其设置为Kinematic,以便我们可以通过代码控制鱼的运动。
4. 创建一个新的C#脚本,命名为"FishMovement",并将其附加到Fish对象上。
```csharp
using UnityEngine;
public class FishMovement : MonoBehaviour
{
public float speed = 2f; // 鱼的移动速度
public float avoidanceDistance = 2f; // 躲避距离
private Vector3 targetPosition;
private Vector3 avoidanceDirection;
private void Start()
{
SetRandomTargetPosition();
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
// 获取鼠标点击位置
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 检查点击位置是否在鱼的范围内
if (Vector3.Distance(transform.position, mousePosition) < avoidanceDistance)
{
// 计算躲避方向
avoidanceDirection = (transform.position - mousePosition).normalized;
}
}
// 如果有躲避方向,则设置目标位置为当前位置加上躲避方向
if (avoidanceDirection != Vector3.zero)
{
targetPosition = transform.position + avoidanceDirection * avoidanceDistance;
}
else
{
// 没有躲避方向时,设置目标位置为随机位置
targetPosition = SetRandomTargetPosition();
}
// 计算移动方向和距离
Vector3 direction = (targetPosition - transform.position).normalized;
float distance = Vector3.Distance(targetPosition, transform.position);
// 移动鱼
transform.Translate(direction * speed * Time.deltaTime);
// 如果鱼与目标位置之间的距离小于0.1,则重新选择新的目标位置
if (distance < 0.1f)
{
avoidanceDirection = Vector3.zero;
targetPosition = SetRandomTargetPosition();
}
}
private Vector3 SetRandomTargetPosition()
{
// 在屏幕内的随机位置设置新的目标位置
float randomX = Random.Range(-Screen.width / 2f, Screen.width / 2f);
float randomY = Random.Range(-Screen.height / 2f, Screen.height / 2f);
Vector3 targetPos = new Vector3(randomX, randomY, transform.position.z);
return targetPos;
}
}
```
这个脚本会在每一帧更新时,检查鼠标左键是否按下。如果按下了鼠标左键,我们会获取鼠标点击位置,并检查该位置是否在鱼的范围内(这里我们假设鱼的范围半径为躲避距离)。如果在范围内,我们会计算躲避方向,并将目标位置设置为当前位置加上躲避方向乘以躲避距离。
然后,在每一帧更新时,如果有躲避方向,我们会将目标位置设置为当前位置加上躲避方向乘以躲避距离。如果没有躲避方向,我们会调用SetRandomTargetPosition函数来设置一个随机位置作为目标位置。
接下来,我们计算移动方向和距离,并使用Translate方法将鱼移动到目标位置。如果鱼与目标位置之间的距离小于0.1,我们会重新选择一个新的目标位置,并将躲避方向重置为零。
记得将FishMovement脚本附加到Fish对象上,然后你就可以在Unity中运行场景。当你点击鼠标左键时,如果点击范围内有鱼,它们将会躲避你的点击位置。同时,鱼会在屏幕内进行随机运动。
阅读全文