unity3d 鼠标点击物体_unity3d鼠标点击物体 - CSDN
  • 第一种 OnMouse 在需要检测的物体上 首先物体要有Collider 添加脚本 使用OnMouse系列方法(脚本的enable不影响OnMouse的调用) //当鼠标悬停在网格上时, ...当鼠标悬浮在物体上 void OnMouseOver() { ...

    第一种 OnMouse

    在需要检测的物体上  首先物体要有Collider  添加脚本 使用OnMouse系列方法(脚本的enable不影响OnMouse的调用)

    
        //当鼠标悬停在网格上时,
        void OnMouseEnter()
        {
           
        } 
    
        // ...当鼠标悬浮在物体上
        void OnMouseOver()
        {
        
        } 
    
        // ...当鼠标移开时
        void OnMouseExit()
        {
           
        }
     // ...当鼠标点击
        void OnMouseDown()
        {
           
        }
     // ...当鼠标抬起
        void OnMouseUp()
        {
           
        }

    //第二种方法 射线检测(首先物体要有Collider 然后挂载脚本)

    /************************************************************
      Copyright (C), 2007-2017,BJ Rainier Tech. Co., Ltd.
      FileName: RayCastHitControl.cs
      Author:   Version :1.0       Date: 2018/8/15
      Description:  射线点击
    ************************************************************/
    
    using UnityEngine;
    using System.Collections;
    
    public class RayCastHitControl : MonoBehaviour {
    
    	// Use this for initialization
    	void Start () {
    	
    	}
        Ray ray;
        RaycastHit hit;
        GameObject obj;
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                Debug.Log("点击鼠标左键");
                ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit))
                {
                    Debug.Log(hit.collider.gameObject.name);
                    obj = hit.collider.gameObject;
                    //通过名字
                    if (obj.name.Equals("BeiJiuChuan"))
                    {
                        Debug.Log("点中"+obj.name);
                    }
                    //通过标签
                    if (obj.tag == "move")
                    {
                        Debug.Log("点中" + obj.name);
                    }
                }
            }
        }
    }
    

    //第三种方法  游戏物体 EventTrigger 物体动态事件监听

    先说一下 有哪些封装好的公共方法

    OnBeginDrag 在拖动开始之前调用。
    OnCancel 发生Cancel事件时由EventSystem调用。
    OnDeselect 在选择新对象时由EventSystem调用。
    ondragDown 每次在拖动期间移动指针时由EventSystem调用。
    OnDrop 当对象接受丢弃时由EventSystem调用。
    OnEndDrag 拖动结束后由EventSystem调用。
    OnInitializePotentialDrag 在找到拖动时,但在有效开始拖动之前由EventSystem调用。
    OnMove 发生Move事件时由EventSystem调用。
    OnPointerClick 发生Click事件时由EventSystem调用。
    OnPointerDown 发生PointerDown事件时由EventSystem调用。
    OnPointerEnter 当指针进入与此EventTrigger关联的对象时由EventSystem调用。
    OnPointerExit 当指针退出与此EventTrigger关联的对象时,由EventSystem调用。
    OnPointerUp 发生PointerUp事件时由EventSystem调用。
    OnScroll 当Scroll事件发生时由EventSystem调用。
    ONSELECT 当Select事件发生时由EventSystem调用。
    OnUpdateSelected 更新与此EventTrigger关联的对象时由EventSystem调用。

    然后说一下使用方法

    1.通过编辑器中添加

        在Inspector中添加EventTrigger的componnent组件,然后点击Add New Event Type按钮添加一个基本的事件

    当我们选择一个事件的时候,就相当于将要于此事件绑定了,例如当我们选择Pointer Click的时候,绑定了这个组件的物体将接受Pointer Click 事件的消息,当我们在物体上按下鼠标的时候,(当然空间中的物体我们是无法通过鼠标点击的,但是当我们可以通过射线碰撞的方法,来实现Pointer Enter,Pointer Exit等事件的触发)这里我们用来绑定这个EventTrigger 的是一个UI Panel 这样便可以让它接受我们自定义的单击事件了

    然后脚本方法

    /************************************************************
      Copyright (C), 2007-2017,BJ Rainier Tech. Co., Ltd.
      FileName: OnClickMouseDown.cs
      Author:     Version :1.0       Date: 2018/8/15
    ************************************************************/
    
    using UnityEngine;
    using System.Collections;
    using UnityEngine.EventSystems;
    using System.Collections.Generic;
    using UnityEngine.Events;
    
    public class OnClickMouseDown : MonoBehaviour
    {
      
        void Start()
        {
            //获取或添加EventTrigger组件
            EventTrigger trigger = transform.GetComponent<EventTrigger>();
            if (trigger == null)
            {
                trigger = transform.gameObject.AddComponent<EventTrigger>();
            }
            //初始化EventTrigger.Entry的数组
            trigger.triggers = new List<EventTrigger.Entry>();
            //创建各种 EventTrigger.Entry的类型
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.PointerEnter;//设置Entry的eventID类型 即EventTriggerType的各种枚举(比如鼠标点击,滑动,拖动等)
            UnityAction<BaseEventData> callback =new UnityAction<BaseEventData>(OnEventTrigger);  //注册代理
            entry.callback.AddListener(callback);//添加代理事件到EventTrigger.Entry
            EventTrigger.Entry entry2 = new EventTrigger.Entry();
            entry2.eventID = EventTriggerType.PointerDown;
            UnityAction<BaseEventData> callback1 =new UnityAction<BaseEventData>(OnMouseDown);
            entry2.callback.AddListener(callback1);
    
            //在EventTrigger.Entry的数组添加EventTrigger.Entry
            trigger.triggers.Add(entry);
            trigger.triggers.Add(entry2);
        }
    
        private void OnMouseDown(BaseEventData arg0)
        {
            Debug.Log("OnMouseDown");
        }
    
        private void OnEventTrigger(BaseEventData arg0)
        {
            Debug.Log("OnEventTrigger");
        }
    }
    

    最后 别忘了 在摄像机下添加一个Physics Raycaster的组件,用来检测鼠标射线

    展开全文
  • 写在前面:本人初学unity3D,仅仅是菜鸟的一点小心得,想记录下来,欢迎大神来指导,也欢迎其他初学者同学来交流,互相勉励,共同进步 unity中有关于鼠标位置的函数,Input.mousePosition。但不得不说,这个函数不...

    账号被盗,文章被修改,博主已将博文删除

    展开全文
  • Unity3D物体添加点击事件脚本,Unity3D物体添加点击事件脚本。实测,真实可用
  • 如果需要处理鼠标点击物体的情况, 可以当数据接触物体时,鼠标手势改变,然后点击后和NPC产生对话等: using UnityEngine; using System.Collections; public class example : MonoBehaviour { void ...

    如果需要处理鼠标点击物体的情况,

    可以当数据接触物体时,鼠标手势改变,然后点击后和NPC产生对话等:

    using UnityEngine;
    using System.Collections;
    
    public class example : MonoBehaviour {
        void OnMouseOver() {
            renderer.material.color -= new Color(0.1F, 0, 0) * Time.deltaTime;
        }
    }

     

    转载于:https://www.cnblogs.com/sunxun/p/5886941.html

    展开全文
  • 基于Highlighting System插件的鼠标选中物体时,使物体高亮显示。在这个插件的基础上,改动部分没必要的功能,使物体可以高亮显示。直接调用该脚本里的方法就可实现物体高亮显示。
  • 以前转载了一篇关于在Unity3d鼠标控制物体的旋转、移动、缩放的代码 然后发现错误比较多,就重新写了一个代码,自我感觉简单实用。。。特意分享出来供大家参考 原文章也贴出来吧 【Unity3d 鼠标滚动拉近模型、鼠标...

    一、前言

    以前转载了一篇关于在Unity3d中鼠标控制物体的旋转、移动、缩放的代码
    然后发现错误比较多,就重新写了一个代码,自我感觉简单实用。。。特意分享出来供大家参考
    原文章也贴出来吧
    【Unity3d 鼠标滚动拉近模型、鼠标右键旋转模型、鼠标中键拖拽模型】
    https://blog.csdn.net/q764424567/article/details/78630649

    效果图:
    在这里插入图片描述

    二、知识点

    • Input.GetMouseButton(0)
      获取鼠标输入,参数为一个int值
      为0的时候获取的是左键

    • Input.GetMouseButton(1)
      为1的时候获取的是右键

    • Input.GetMouseButton(2)
      为2的时候获取的是中键(就是那个滑轮)

    • Input.GetMouseButton
      鼠标按压

    • Input.GetMouseButtonUp
      鼠标点击

    • Input.GetMouseButtonDown
      鼠标松开

    • Camera.main.ScreenToWorldPoint
      屏幕坐标转化为世界坐标

    • Quaternion rotation = Quaternion.Euler(0, 0, 0);
      欧拉角转化为四元数

    三、代码分享

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class MouseControlModel : MonoBehaviour
    {
        //旋转最大角度
        public int yMinLimit = -20;
        public int yMaxLimit = 80;
        //旋转速度
        public float xSpeed = 250.0f;
        public float ySpeed = 120.0f;
        //旋转角度
        private float x = 0.0f;
        private float y = 0.0f;
    
        void Update()
        {
            if (Input.GetMouseButton(0))
            {
                //将屏幕坐标转化为世界坐标  ScreenToWorldPoint函数的z轴不能为0,不然返回摄像机的位置,而Input.mousePosition的z轴为0
                //z轴设成10的原因是摄像机坐标是(0,0,-10),而物体的坐标是(0,0,0),所以加上10,正好是转化后物体跟摄像机的距离
                Vector3 temp = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));
                transform.position = temp;
            }
            else if (Input.GetMouseButton(1))
            {
                //Input.GetAxis("MouseX")获取鼠标移动的X轴的距离
                x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
                y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
                y = ClampAngle(y, yMinLimit, yMaxLimit);
                //欧拉角转化为四元数
                Quaternion rotation = Quaternion.Euler(y, x, 0);
                transform.rotation = rotation;
            }
            else if (Input.GetAxis("Mouse ScrollWheel") != 0)
            {
                //鼠标滚动滑轮 值就会变化
                if (Input.GetAxis("Mouse ScrollWheel") < 0)
                {
                    //范围值限定
                    if (Camera.main.fieldOfView <= 100)
                        Camera.main.fieldOfView += 2;
                    if (Camera.main.orthographicSize <= 20)
                        Camera.main.orthographicSize += 0.5F;
                }
                //Zoom in  
                if (Input.GetAxis("Mouse ScrollWheel") > 0)
                {
                    //范围值限定
                    if (Camera.main.fieldOfView > 2)
                        Camera.main.fieldOfView -= 2;
                    if (Camera.main.orthographicSize >= 1)
                        Camera.main.orthographicSize -= 0.5F;
                }
            }
        }
    
        //角度范围值限定
        static float ClampAngle(float angle, float min, float max)
        {
            if (angle < -360)
                angle += 360;
            if (angle > 360)
                angle -= 360;
            return Mathf.Clamp(angle, min, max);
        }
    }
    
    

    谢谢大家!

    展开全文
  • 需求:制作一个鼠标中键移动缩放和鼠标右键旋转的功能(鼠标右键旋转可以自行改成鼠标左键旋转) 效果图: 1.新建一个名为Target的立方体cube 2.新建一个材质球 Yellow颜色的并挂载到Target立方体上 3...
  • 先把与射线发生碰撞的游戏物体的Layer层改成MapCube 添加脚本
  • 同时,本文也将继《【Unity3D】用鼠标点击事件、AddForce完成跳跃与二段跳》(点击打开链接)说明鼠标点击屏幕屏幕进一步说明鼠标点击任一物体的监听。 下面将举一个例子说明这个物体,如图,血条代表10格血
  • unity 3d 鼠标旋转物体脚本
  • //unity3d鼠标拖动物体的一段代码 var mouseOverColor = Color.blue;//声明变量为蓝色 private var originalColor:Color;//声明变量来存储本来颜色 function Start() { originalColor = renderer....
  • Unity3d鼠标拖拽物体实现任意角度自旋转 主要涉及函数Input.GetAxis(“Mousex”) 可取得鼠标横向(x轴)移动增量Input.GetAxis(“Mousey”) 可取得鼠标竖向(y轴)移动增量通过勾股定理获取拖拽长度,长度越长旋转越...
  • using UnityEngine; using System.Collections; public class Rotate : MonoBehaviour { public GameObject cube; //要拖拽的物体 Vector3 mouse; //鼠标 Vector3 screeenV; //存储cube的屏幕坐标 Vect...
  • Unity3D由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。过去Unity支持三种编程语言:...
  • unity点击一个物体飞出 然后鼠标控制放大缩小 任意角度旋转
  • Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1、声明一个观察的摄像机、一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的RaycastHit; 2、将射线Ray定义为从摄像机原点...
  • 我们在使用Unity开发当中,可能会遇到这个问题,如何鼠标点击物体,在物体旁边出现UI呢 今天我就把我自己的思路分享给大家 1.鼠标点击,出现射线,用射线判断点击到的物体 2.将UI设置到鼠标点击到的位置坐标 OK...
  • 1.物体zengjbox collider碰撞器 2.代码 using UnityEngine; using System.Collections; public class MemoryCard : MonoBehaviour { public void OnMouseDown(){ Debug.Log ("ssssssssssssss"); } ...
  • 前言:在实际项目开发中涉及很多鼠标与场景中物体交互功能的开发,如鼠标接触物体鼠标脱离接触物体鼠标直接拖动物体等功能的开发,在这里开这么一个帖子,简单记录一下这些功能简单的实现。 1.在场景中添加一个...
1 2 3 4 5 ... 20
收藏数 5,715
精华内容 2,286
关键字:

unity3d 鼠标点击物体