unity3d 点击物体_unity 3d物体的点击事件检测不到3d物体是什么原因 - CSDN
  • Unity 鼠标进入点击3D物体的3种方法

    万次阅读 2018-10-09 10:08:38
    在需要检测的物体上 首先物体要有Collider 添加脚本 使用OnMouse系列方法(脚本的enable不影响OnMouse的调用) //当鼠标悬停在网格上时, void OnMouseEnter() { } // ...当鼠标悬浮在物体上 void ...

    第一种 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为3D物体添加点击事件

    千次阅读 2018-10-18 17:05:09
    1.相机添加脚本《ClickEvent》: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;...public class ClickEvent : MonoBehaviour { ...

    1.相机添加脚本《ClickEvent》:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class ClickEvent : MonoBehaviour {
    
        public GameObject[] cube1; //3D物体集合
    
        private void Start()
        {
            //为相机添加3个组件
            if (this.gameObject.GetComponent<PhysicsRaycaster>() == null) {
                gameObject.AddComponent<PhysicsRaycaster>();
            }
            if (this.gameObject.GetComponent<EventSystem>() == null)
            {
                this.gameObject.AddComponent<EventSystem>();
            }
    
            if (this.gameObject.GetComponent<StandaloneInputModule>() == null)
            {
                gameObject.AddComponent<StandaloneInputModule>();
            }
            
            //为3D物体添加点击事件
            for (int i = 0; i < cube1.Length; i++)
            {
                AddObjectClickEvent(cube1[i]);
            }
        }
    
        public void AddObjectClickEvent(GameObject itemObject) {
            var box = itemObject.GetComponent<BoxCollider>();
            if (box == null)
            {
                box = itemObject.AddComponent<BoxCollider>();
            }
            
            // ThreeD_Object为3D物体挂载的脚本
            var item = itemObject.GetComponent<ThreeD_Object>();
            if (item == null)
            {
                item = itemObject.AddComponent<ThreeD_Object>();
            }
                
            EventTrigger trigger = itemObject.GetComponent<EventTrigger>();
            if (trigger == null)
            {
                trigger = itemObject.AddComponent<EventTrigger>();
            }
    
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.PointerClick;
            UnityEngine.Events.UnityAction<BaseEventData> click = new UnityEngine.Events.UnityAction<BaseEventData>(item.OnClickCubeItem);
            entry.callback.AddListener(click);
    
            trigger.triggers.Clear();
            trigger.triggers.Add(entry);
        }
    }
    

    2.为3D物体添加脚本《Threed_Object》:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CubeEventItemBind : MonoBehaviour {
    
    
        public void OnClickCubeItem(UnityEngine.EventSystems.BaseEventData data = null)
        {
            Debug.Log("点击了" + transform.name);
            //点击对应事件
        }
    }
    

     

    展开全文
  • Unity 实现点击物体

    千次阅读 2016-01-06 18:34:06
    void Update () { if (Input.GetMouseButtonDown (0)) { ClickCube(); } ...点击物体 */ private void ClickCube(){ RaycastHit raycastHit; var ray = Camera.main.ScreenPointToRay(Input.mou
    void Update () {
        if (Input.GetMouseButtonDown (0)) {
            ClickCube();
        }
    }
    
    /*
    点击物体
    */
    private void ClickCube(){
        RaycastHit raycastHit;
        var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast (ray, out raycastHit)) {
            Debug.Log(raycastHit.transform.name);
            //raycastHit.point 为点击的物体的具体位置
        }
    }
    
    展开全文
  • 3D场景中基本的操作就是鼠标对物体点击和悬浮并获得该物体 1.从摄像机发出射线,发射目标为鼠标点击的位置,判断是否碰撞到物体 2.针对每种物体或每个物体设置相应的内容 场景设置如下: 下面的程序是处理...

    在3D场景中基本的操作就是鼠标对物体的点击和悬浮并获得该物体

    1.从摄像机发出射线,发射目标为鼠标点击的位置,判断是否碰撞到物体

    2.针对每种物体或每个物体设置相应的内容

    场景设置如下:

    下面的程序是处理点击获取物体的基本架构

    public class clickedinfo: MonoBehaviour
    {
        // Update is called once per frame
        void Update()
        {
            RaycastHit hit;
            if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
            {
                bool cube = false;
                bool sphere = false;
                bool cylinder = false;
                //鼠标悬浮的操作(鼠标点击场景任何地方后)
                if(hit.collider.gameObject.name=="Cube")
                {
                    Debug.Log("Mouse on the Cube");                
                    cube = true;
                }
                else if (hit.collider.gameObject.name == "Sphere")
                {
                    Debug.Log("Mouse on the Sphere");
                    sphere = true;
                }
                else if(hit.collider.gameObject.name == "Cylinder")
                {
                    Debug.Log("Mouse on the Sphere");
                    cylinder = true;
                }
                else
                {
                    Debug.Log("Mouse on Nothing");
                }
                //鼠标点击的操作
                if (Input.GetMouseButtonDown(0))
                {
                    if (cube)
                    {
                        Debug.Log("CUBE");
                    }
                    else if (sphere)
                    {
                        Debug.Log("SPHERE");
                    }
                    else if (cylinder)
                    {
                        Debug.Log("CYLINDER");
                    }
                    else
                    {
                        Debug.Log("NOTHING!");
                    }
                }
            }
        }
    }

     

    展开全文
  • unity3d实现3D物体上的点击事件

    千次阅读 2017-10-10 14:05:22
    unity3d实现3D物体上的点击事件
  • unity3D 点击物体 出现一个列表框 从鼠标的顶点出发 引用 根据鼠标点击的位置而改变弹出的信息框位置,弹出框不能超出电脑屏幕 鼠标再一次右击,弹出的信息框消失
  • 如果需要处理鼠标点击物体的情况, 可以当数据接触物体时,鼠标手势改变,然后点击后和NPC产生对话等: using UnityEngine; using System.Collections; public class example : MonoBehaviour { void ...
  • unity 点击生成3D 物体

    千次阅读 2018-01-31 11:26:39
    using UnityEngine; using System.Collections; public class ClickObject : MonoBehaviour { //要生成物体的预制体。 public GameObject prefab; public float distance; void Start () { } void Up
  • Unity3D单击物体弹出GUI窗口

    万次阅读 2012-03-29 16:14:28
    2.单击物体弹出GUI窗口  [javascript] view plaincopy static var WindowSwitch : boolean = false;  var mySkin : GUISkin;  var windowRect = Rect (200, 80, 240,...
  • Unity3D物体添加点击事件脚本

    万次阅读 2020-09-05 10:34:28
    本段主要是为了学习记录,在Unity中怎么给一个BoxCollider添加事件脚本,以点击事件为例,并且,添加物体事件一些必要的前提。 首先是射线检测部分,如下类 AddEeventMonoTest.cs, 其中初始化阶段准备了 必要的一些...
  • Unity3D物体添加点击事件脚本,Unity3D物体添加点击事件脚本。实测,真实可用
  • unity3d点击屏幕选中物体

    千次阅读 2014-03-23 22:10:14
    前些天接触unity3d,想实现点击屏幕选中物体的功能。后来研究了下,实现原理就是检测从屏幕发出的射线与物体发生碰撞,而这个发生碰撞的物体就是你选中的物体
  • unity3D 点击物体飞出

    2020-07-30 23:30:27
    unity 场景中 点击其中物体 可以飞出到摄像机前面详细观察。
  • Unity3D鼠标点击物体高亮显示

    热门讨论 2020-07-30 23:32:14
    基于Highlighting System插件的鼠标选中物体时,使物体高亮显示。在这个插件的基础上,改动部分没必要的功能,使物体可以高亮显示。直接调用该脚本里的方法就可实现物体高亮显示。
  • 以前转载了一篇关于在Unity3d中鼠标控制物体的旋转、移动、缩放的代码 然后发现错误比较多,就重新写了一个代码,自我感觉简单实用。。。特意分享出来供大家参考 原文章也贴出来吧 【Unity3d 鼠标滚动拉近模型、鼠标...
  • emmm直接看代码using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShowWindow : MonoBehaviour { public string stage; public string tag; GameObject gameobjec
  • Unity3D 点击模型某部分出其属性信息框

    千次阅读 热门讨论 2016-05-23 10:13:02
    这几天一直在研究怎么实现点击模型中 的一个部分,弹出该部分对应属性信息 下来说一下OnMouseDown使用方法: 1:选中模型某一个部分作为触发对象,给该部分绑定BoxCollider组件,只有这样此部分才能接收到鼠标点击...
  • Unity3D和Flash一样,甚至可以说是和C#一样,拖完组件,再写一系列的脚本,完成编程,甚至可以说,就是带编程脚本的3DSMAX。那么如何完成最基本的物体、材质的设置、物体位移与旋转呢?下面用一个简单的Unity3D说明...
  • Unity3D实现点击物体旋转和拖动

    万次阅读 2014-01-22 17:31:15
    1选择物体 using UnityEngine;  using System.Collections;    public class roated : MonoBehaviour {   private bool roate;   private float RoatedSpeed = 1000.0F;   void...
  • Unity3D点击图片生成物体

    千次阅读 2018-12-06 13:34:31
    今天给大家分享一个如何点击图片生成物体的脚本,可以把这个脚本稍微封装一下,以后也可以方便使用。 主要试用与点击图片时候响应事件,具体用法还要大家多多摸索 二、效果 三、正文 步骤: ...
1 2 3 4 5 ... 20
收藏数 8,707
精华内容 3,482
关键字:

unity3d 点击物体