关于unity中鼠标选取物体的解决方案

杭者 杭者     2022-09-14     560

关键词:

今天修改了之前写的飞机大战的代码,原来的不足之处是点击屏幕的任意一点都可以移动飞机,也就是没有检测鼠标到底有没有点到飞机上。

我先是用之前的3D拾取技术,发现没有反应,才意识到我这个plane飞机节点挂载的是Box Collier2D的碰撞器组件,不是Box Collier,3D射线拾取技术在2D游戏里面还用不了。

后来我百度了一下,才知道用UGUI写的2D游戏用鼠标选取物体不用射线检测,要用事件系统。但是我不会用OnMouseEnter()和OnPointerEnter(),所以还是想用射线来解决,我就找2D射线拾取,结果真的有。

所以这里总结了一些鼠标选取物体的解决方案。

 

 

2D游戏(UGUI)

1.使用OnMouseEnter(),OnMouseExit()接口

2.使用OnPointerEnter(),OnPointerExit()接口

3.使用射线

if(Input.GetMouseButtonDown(0))//判断鼠标是否按下
{
        Ray myRay = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出一条射线
        RaycastHit2D hit = Physics2D.Raycast(new Vector2(myRay.origin.x, myRay.origin.y), Vector2.zero);//射线从鼠标点击屏幕的那个点出发,射到以当前点击位置为原点的坐标系中的垂直于(0,0)的位置,
                                                                //如果从3D的视角看就是摄像机的射线垂直射到Canvas上
        if (hit.collider)//如果碰到有Collider2D组件的物体,就做一些事情
        {
             if (hit.transform.gameObject.name == "plane")//如果碰到的是飞机
              {
                    Debug.Log(hit.transform.name);//打印出碰撞到的节点的名字
              }
        }  

}

 

 

3D游戏

1.使用射线

 if (Input.GetMouseButtonDown(0)) {//判断鼠标是否按下
            // 从摄像机开始,到屏幕触摸点,发出一条射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            // 撞击到了哪个3D物体
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit)) {
                Debug.Log(hit.transform.name);//打印出碰撞到的节点的名字
            }
        }

 

unity2d中使用鼠标拖动物体移动(代码片段)

...很多问题都一一解决了,印象最深的问题就是如何用鼠标拖动飞机的移动。今天我就把我的方法拿出来分享。我的方法是在飞机物体中写一个脚本。在Update中先检测鼠标是否按下。代码是这样的:privateboolisMouseDown=false... 查看详情

unity射线检测(raycast)(代码片段)

...上后,具体点在Unity场景中,三维世界的哪个点上 这种解决方案,就是射线检测: 通过鼠标点击屏幕,由屏幕上的点向Unity三维直接发射一条无限长的射线 当检测到碰撞物体后,便会返回被碰撞物体的所有信息,以及交点... 查看详情

unity中怎么让物体随着鼠标移动?

unity让物体随着鼠标移动的方法:transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition + new Vector3(0, 0, Camera.main.farClipPlane));拓展:在unity3d中用鼠标移动物体控制每步移动的距离的相关理解步骤:1、如... 查看详情

unity让物体跟随鼠标移动(代码片段)

...下学习的成果吧。本文最终结果是要实现一个小飞机跟随鼠标移动的效果。看下图片。向量在Unity中,每个对象都有自己的位置属性,组件叫做Transform,通过Transform可以获取对象的位置属性。在上面的实例中,我们需要... 查看详情

unity让物体跟随鼠标移动(代码片段)

...下学习的成果吧。本文最终结果是要实现一个小飞机跟随鼠标移动的效果。看下图片。向量在Unity中,每个对象都有自己的位置属性,组件叫做Transform,通过Transform可以获取对象的位置属性。在上面的实例中,我们需要... 查看详情

unity3d灵巧小知识点☀️|unity通过射线获取鼠标的世界坐标和鼠标点击的物体信息(代码片段)

...助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、 查看详情

unity3d中,怎样让鼠标点击一个物体后,摄像机就去拍摄这个物体?

参考技术A将摄像机的GamObject的transform.position移动到对应的坐标就可以 查看详情

在unity中实现鼠标拖拽物体,滚轮控制物体远近的效果

在场景中除默认camera和light外,添加cube物体,并挂载脚本。1usingSystem.Collections;2usingSystem.Collections.Generic;3usingUnityEngine;45publicclassColliderDemo:MonoBehaviour{67privatevoidOnMouseDrag()8{9Vector3v=Input.mous 查看详情

你好,请问在unity3d中如何实现用鼠标左键拖拽控制一个组合物体的旋转啊?

请问在UNITY3D中如何实现用鼠标左键拖拽控制一个组合物体的旋转啊?网上有很多这类解答,但是旋转效果很奇怪,物体旋转后就永远都回不去了。能不能实现像在3DSMAX中通过鼠标中键的那种柔和的旋转方式呢?急求啊~参考技术A... 查看详情

关于unity中渲染顺序问题

1,Camera是渲染顺序的最大总指挥顺序由Camera的Depth值决定,值越小视野范围内的游戏物体越先渲染2,layer是对游戏中所有物体的分类别划分如UIlayer,waterlayer,3DModelLayer,smallAssetsLayer,effectLayer等。将不同类的物体划分到不同的层,便... 查看详情

关于unity中坐标系的种类

坐标空间1:物体空间:3D物体自己的坐标空间一般设计时几何体以中心为原点,人物以双脚为原点;2:世界空间:3D物体在场景中的世界坐标,整个游戏场景的空间;3:摄像机空间:以观察摄像机为原点的坐标系下的坐标空间;4:投影成像3D坐... 查看详情

unity中鼠标点击触发物体运动

求教程!急用!你要控制物体移动的话,可以通过iTween插件来控制物体运动,简单的运动你可以看看网上的iTween教程。移动模型时候用到的几个核心方法如下:iTween.MoveTo():让模型移动到一个位置,它的底层函数是通过动态的修... 查看详情

unity笔记物体朝着鼠标位置移动

其实思路也很简单,就是先获取到鼠标的坐标,然后赋值给目标物体即可。voidUpdate(){//物体跟随鼠标移动Vector2mousePos=Input.mousePosition;gameObject.transform.position=mousePos;} 这是物体即时改变位置的做法,如果想要物体朝鼠标位置缓... 查看详情

unity中实现物体的拖拽到指定位置的功能

unity中实现鼠标点击生成物体a(a物体是20个中的任意一个),再次点击生成物体b(b物体也是20个中的任意一个),然后实现鼠标拖拽b到a的位置小于一定距离时自动吸附到a上类似于三维软件中的捕捉功能求C#代码思路也可以实现方... 查看详情

unity3d鼠标坐标和世界坐标问题

...加个TRIGGER,在物体上添加脚本执行就可以了。 参考技术C关于鼠标和键盘的例子先学一学 参考技术Dhit.point 查看详情

unity3dugui鼠标穿透ui问题的解决方法

参考技术A当我们使用UGUI的时候会经常遇到鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会触发3D中物体的鼠标事件。比如下图中:完整版记得观察控制台的输出喔 查看详情

关于unity中物体分别在本地和世界坐标系对应方向的移动

方向Vector3可以定义以世界坐标轴为参考的三维矢量,Vector3.forward,Vector3.up,Vector3.right方别对应物体世界坐标系的Z,Y,X轴方向的单位向量,或者叫三维单位方向向量,是矢量this.transform.forward,this.transform.up,this.transform.right分... 查看详情

关于unity中物理引擎的使用

物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态物理世界计算刚体的运行状态,通过贴图显现出运算结果。一、物理引擎1:Unity2D物理引擎基于Box2D封装而成;2:物理引擎模拟物理运动和计算,物理引擎... 查看详情