Unity的鼠标接触物体、离开物体、拖动物体简单功能的实现

前言:在实际项目开发中涉及很多鼠标与场景中物体交互功能的开发,如鼠标接触物体、鼠标脱离接触物体、鼠标直接拖动物体等功能的开发,在这里开这么一个帖子,简单记录一下这些功能简单的实现。
1.在场景中添加一个Cube物体。
在这里插入图片描述
2.创建一个脚本,命名为Mouse_Drag,脚本代码如下所示。

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

public class Mouse_Drag : MonoBehaviour
{
    //主场景Camera
    public Camera mCamera;
    //景深
    public float depth = 10f;

    /// <summary>
    /// 鼠标接触物体
    /// </summary>
    void OnMouseEnter()
    {
        this.transform.localScale = new Vector3(1.3f,1.3f,1.3f);
    }
    /// <summary>
    /// 鼠标离开物体
    /// </summary>
    void OnMouseExit()
    {
        this.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
    }
    /// <summary>
    /// 鼠标停在物体上
    /// </summary>
    void OnMouseOver()
    {
        this.transform.Rotate(Vector3.up,45*Time.deltaTime,Space.Self);
    }

    /// <summary>
    /// 鼠标拖拽物体
    /// </summary>
    void OnMouseDrag()
    {
        MoveObject_fixdepth();
    }
    /// <summary>
    /// 鼠标拖拽物体的实现逻辑
    /// </summary>
    void MoveObject_fixdepth()
    {
        Vector3 mouseScreen = Input.mousePosition;
        mouseScreen.z = depth;

        Vector3 mouseWorld = mCamera.ScreenToWorldPoint(mouseScreen);
        this.transform.position = mouseWorld;
    }
}

3.将此脚本挂载到需要拖拽的cube上,并将主场景Camera拖拽到物体的脚本中。
在这里插入图片描述
4.点击运行,发现已经实现了上述脚本实现的功能。
在这里插入图片描述
总结:上述脚本实现的功能较为简单,只是简单实现了上述功能,在实际开发中可以将此功能运用到实际项目中。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity中,我们可以使用以下步骤来实现鼠标拖拽物体移动,并限制拖动范围: 1.创建一个空物体作为拖拽物体的父级,将需要拖拽的物体作为子级添加到其中。 2.在父级上添加一个Box Collider组件,将其设置为Is Trigger。 3.添加一个脚本来控制拖拽行为。在脚本中声明一个变量来存储拖拽物体的初始位置,一个变量来存储鼠标按下时的屏幕坐标,以及一个变量来存储拖拽物体的限制范围。 4.在Update()函数中检测鼠标是否按下。如果按下,记录下鼠标按下时的屏幕坐标,并将拖拽物体的初始位置设置为当前位置。 5.如果鼠标一直按下,计算鼠标移动的距离,并将拖拽物体的位置设置为初始位置加上鼠标移动的距离。同时,检测拖拽物体是否超出了限制范围,如果超出了,将其位置设置为限制范围内的最近位置。 6.最后,将脚本添加到父级物体上,运行游戏即可实现鼠标拖拽物体移动,并限制拖动范围。 下面是示例代码: ``` using UnityEngine; public class DragObject : MonoBehaviour { private Vector3 initialPosition; private Vector3 mousePosition; private Vector3 limitMin; private Vector3 limitMax; private void Start() { // 设置拖拽物体的限制范围 limitMin = gameObject.GetComponent<BoxCollider>().bounds.min; limitMax = gameObject.GetComponent<BoxCollider>().bounds.max; } private void OnMouseDown() { // 记录鼠标按下时的屏幕坐标和拖拽物体的初始位置 mousePosition = Input.mousePosition; initialPosition = transform.position; } private void OnMouseDrag() { // 计算鼠标移动的距离,并设置拖拽物体的位置 Vector3 offset = Input.mousePosition - mousePosition; Vector3 newPosition = initialPosition + offset; // 检测拖拽物体是否超出限制范围,如果超出了,将其位置设置为限制范围内的最近位置 newPosition.x = Mathf.Clamp(newPosition.x, limitMin.x, limitMax.x); newPosition.y = Mathf.Clamp(newPosition.y, limitMin.y, limitMax.y); newPosition.z = Mathf.Clamp(newPosition.z, limitMin.z, limitMax.z); transform.position = newPosition; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波波斯维奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值