Unity2D简单实现物体跟随鼠标移动并旋转

2020年03月01日 15:28 1 点赞 1 评论 更新于 2025-11-21 21:33

在Unity 2D开发中,有时需要实现物体跟随鼠标移动并旋转的效果。下面将详细介绍如何实现这一功能,同时给出具体的代码示例。

效果图

由于这里无法直接展示效果图,你可以根据下面提供的代码在Unity中运行来查看具体效果。

代码实现

以下是实现物体跟随鼠标移动并旋转的完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowMouse : MonoBehaviour
{
// 该方法在脚本实例被启用时调用,这里不做初始化操作
void Start()
{
// 此处可添加初始化代码
}

// Update方法会在每一帧被调用
void Update()
{
FollowMouseRotate();
FollowMouseMove();
}

// 物体跟随鼠标旋转的方法
private void FollowMouseRotate()
{
// 获取鼠标的屏幕坐标,鼠标坐标的Z轴为0
Vector3 mouse = Input.mousePosition;
// 获取物体的世界坐标,并将其转换为屏幕坐标,以便与鼠标坐标处于同一坐标系
Vector3 obj = Camera.main.WorldToScreenPoint(transform.position);
// 通过屏幕坐标向量相减,得到指向鼠标点的目标向量
Vector3 direction = mouse - obj;
// 将目标向量的Z轴置为0,确保物体的旋转操作在2D平面内进行
direction.z = 0f;
// 将目标向量转换为单位向量,只保留向量的方向信息,去除长度信息
direction = direction.normalized;
// 使物体自身的Y轴与目标向量方向保持一致,实现物体的旋转
transform.up = direction;
}

// 物体跟随鼠标移动的方法
private void FollowMouseMove()
{
// 定义物体的移动速度
float moveSpeed = 3.0f;
// 如果按下鼠标左键,增加物体的移动速度
if (Input.GetMouseButton(0))
{
moveSpeed = 6.0f;
}
// 根据计算得到的移动速度,让物体沿着自身的Y轴方向移动
transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
}
}

代码解释

  1. Start方法:该方法在脚本实例被启用时调用,通常用于初始化操作。在这个例子中,没有需要初始化的内容,你可以根据实际需求添加相关代码。
  2. Update方法:每一帧都会调用该方法,在该方法中调用了FollowMouseRotateFollowMouseMove方法,确保物体在每一帧都能跟随鼠标进行旋转和移动。
  3. FollowMouseRotate方法
    • 获取鼠标的屏幕坐标和物体的屏幕坐标。
    • 通过向量相减得到指向鼠标的目标向量。
    • 将目标向量的Z轴置为0,确保在2D平面内操作。
    • 将目标向量转换为单位向量,只保留方向信息。
    • 使物体的Y轴与目标向量方向一致,实现旋转。
  4. FollowMouseMove方法
    • 定义物体的初始移动速度。
    • 如果按下鼠标左键,增加移动速度。
    • 根据移动速度和Time.deltaTime(帧间隔时间),让物体沿着自身的Y轴方向移动。

通过以上代码和解释,你可以在Unity 2D项目中轻松实现物体跟随鼠标移动并旋转的效果。