unity2d里实现鼠标拖拽物体的功能

在 Unity 中实现鼠标拖拽物体的功能需要使用到 Unity 的 Physics 系统。

要实现鼠标拖拽物体,你需要在场景中添加以下内容:

  1. 一个 Rigidbody 2D 组件,用于控制物体的运动。

  2. 一个 Box Collider 2D 组件,用于检测鼠标与物体的碰撞。

  3. 一个脚本,用于监听鼠标的输入,并在鼠标按下时拖拽物体。

这里是一个简单的脚本示例,它可以实现鼠标拖拽物体的功能:

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

public class DragObject : MonoBehaviour
{
    private Rigidbody2D rb;
    private Vector3 mousePosition;
    private Vector3 objectPosition;
    private float distance;// 声明一个浮点数变量,用于记录鼠标与物体的距离
    private bool isDragging;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
            // 如果碰撞到了物体
            if (hit.collider != null && hit.collider.gameObject == gameObject)
            {
                // 开始拖拽物体
                isDragging = true;
                rb.isKinematic = true;
                // 设置物体为运动学物体,以便拖拽
                mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                // 记录鼠标位置
                objectPosition = transform.position - mousePosition;
                // 记录物体位置
                distance = Vector3.Distance(transform.position, Camera.main.transform.position);
                // 记录鼠标与物体的距离
            }
        }
        else if (Input.GetMouseButtonUp(0))
        {
            isDragging = false;
            rb.isKinematic = false;
        }

        if (isDragging)
        {
            mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = new Vector3(mousePosition.x + objectPosition.x, mousePosition.y + objectPosition.y, distance);
        }
    }
}

将这个脚本挂在你想要拖拽的物体上,然后运行游戏即可看到效果。

猜你喜欢

转载自blog.csdn.net/aimerman/article/details/128606846