欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

荐 Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

程序员文章站 2022-04-03 12:10:54
Unity 基础 之 OnMouseDown 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果一、简单介绍Unity中的一些基础知识点。本节介绍,使用 OnMouseDown 函数,简单的就实现游戏物体或者UI,随着鼠标的移动而移动的效果。二、实现原理1、 OnMouseDown 监控点中 游戏物体或者 UI2、......

 

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

目录

Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

六、关键代码


 

一、简单介绍

Unity中的一些基础知识点。

本节介绍,使用 OnMouse 函数,简单的就实现游戏物体或者UI,随着鼠标的移动而移动的效果。

 

二、实现原理

1、 OnMouse 监控点中 游戏物体或者 UI

2、WorldToScreenPoint 和 ScreenToWorldPoint 的函数把物体和鼠标的坐标做转换,得到物体的随鼠标移动,最终实现效果

 

三、注意事项

1、这里还是通过camera 转换的位置,如果该camera 旋转移动了,效果你们可测试下哈

2、使用的该移动方法,在移动 UI 的时候 ,对应的Canvas 的Render Mode 不能是 Screen Space - Overlay ,Event Camera ,要进行对应设置

3、如果要在 Canvas 的Render Mode 是 Screen Space - Overlay 移动 UI ,建议使用其他方法

 

四、效果预览

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

五、实现步骤

1、打开Unity,新建空工程

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

2、在场景中布局UI和游戏物体,如图

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

3、设置 Canvas 的 Render Mode 为 Screen Space - Camera 或者 World Space

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

4、设置 Canvas 的 Event Camera

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

5、因为要移动 UI 的 Image ,所以给 Image 添加 碰撞器,注意调整大小合适

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

6、新建脚本,编写代码

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

7、把脚本挂载到 Cube 和 Image 上

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

8、运行场景,效果如上

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

 

六、关键代码

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

public class MouseMoveGameObjectOrUI : MonoBehaviour
{
   
    private Vector3 screenSpace;
    private Vector3 offset;
    private Vector3 curScreenSpace;
    private Vector3 CurPosition;

    Camera mCamera ;
    // Use this for initialization
    void Start()
    {
        mCamera = Camera.main;
        
        StartCoroutine(OnMouseDown());

    }

    // Update is called once per frame
    void Update()
    {

    }
    void OnMouseEnter()
    {
        Debug.Log("OnMouseEnter");
    }
    void OnMouseExit()
    {
        Debug.Log("OnMouseExit");
    }
    private void OnMouseUp()
    {
        Debug.Log("OnMouseUp");
    }

    IEnumerator OnMouseDown()
    {
        Debug.Log("OnMouseDown");
        if (mCamera)
        {
            //转换对象到当前屏幕位置
            Vector3 screenPosition = mCamera.WorldToScreenPoint(transform.position);

            //鼠标屏幕坐标
            Vector3 mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
            //获得鼠标和对象之间的偏移量,拖拽时相机应该保持不动
            Vector3 offset = transform.position - mCamera.ScreenToWorldPoint(mScreenPosition);
            //print ("drag starting:"+transform.name);

            //若鼠标左键一直按着则循环继续
            while (Input.GetMouseButton(0))
            {

                //鼠标屏幕上新位置
                mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);

                // 对象新坐标
                transform.position = offset + mCamera.ScreenToWorldPoint(mScreenPosition);


                //协同,等待下一帧继续
                yield return new WaitForFixedUpdate();
            }

            Debug.Log("drag compeleted");

        }
    }
}

 

荐
                                                        Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果

本文地址:https://blog.csdn.net/u014361280/article/details/107349318