问题:

现在要做点击屏幕,然后判断是否击中了3d场景中的一个物体.(就像子弹发射出去,打击目标一样)

思路:

一开始我想的是,我点击屏幕,那么拥有点击处的坐标,然后从点击处创建一个gameobject,然后沿着直线发射出去,然后检测是否发生碰撞.

然后我就这样做:

 void Update () {if(Input.GetMouseButtonDown(0)){Vector3 vec1 = Camera.main.ScreenToWorldPoint(Input.mousePosition);}}

此时我进行了调试,发现无论我点击哪里vec1的值都不改变,也不知道原因是什么,百度了一下发现这个:

Hi,

I'm currently experimenting with ScreenToWorldPoint(), and something just doesn't seem to be working right...

Whenever I use this code:

  1. function Update() {
  2. Debug.Log(camera.ScreenToWorldPoint(Input.mousePosition));
  3. }

It just shows (0.0 ,125.0, 0.0) all the time in the Debug console, regardless of how much I move the cursor around the screen.

How can I make my code display the actual world coordinates my mouse is currently passing over?

Thanks in advance. :)

回答:

ScreenToWorldPoint receives a Vector3 argument where x and y are the screen coordinates, and z is the distance from the camera. Since Input.mousePosition.z is always 0, what you're getting is the camera position.The mouse position in the 2D screen corresponds to a line in the 3D world passing through the camera center and the mouse pointer, thus you must somehow select which point in this line you're interested in - that's why you must pass the distance from the camera in z.If you try something like this:

  1. function Update() {
  2. var mousePos = Input.mousePosition;
  3. mousePos.z = 10; // select distance = 10 units from the camera
  4. Debug.Log(camera.ScreenToWorldPoint(mousePos));
  5. }

you will get the world point at 10 units from the camera.

翻译一下:

ScreenToWorldPoint 接收一个Vector3 参数,其中x和y是屏幕的坐标,z是与摄像机的距离。如果 Input.mousePosition.z 为0,那么这个函数的返回值将一直是摄像机的位置.

我们点击屏幕的点和摄像机的位置构成一条从摄像机开始发射的射线(这条射线穿透了整个视景体,即:近剪裁平面和远剪裁平面构成的平截头体),从这条射线可以得到一个射线方程,其中的变量就是z值,所以我们只要指定了z值,那么我们就可以得到x和y的坐标。这样就得到了世界坐标空间下的坐标点。

最终的处理办法:

 void Update () {if(Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray)){Debug.Log("okok");}}}

产生一条射线(从摄像机开始,沿着我们点击的点发射出去),然后Raycast 会检测这个射线是否碰撞到物体,如果碰撞返回true

unity3d点击屏幕判断是否击中场景中物体相关推荐

  1. 【虚幻引擎UE】场景中物体闪烁抖动摩尔纹问题集合

    问题列表 1.出现摩尔纹 摩尔纹是一种在数码照相机或者扫描仪等设备上,感光元件出现的高频干扰的条纹,是一种会使图片出现彩色的高频率不规则的条纹. 2.共面闪烁 两个面叠在一起会一直闪烁 3.移动过程中 ...

  2. Unity Editor自制工具(1)--“Editor目录栏按钮+全局搜索方法+自制Editor窗口”实现搜索与删除场景中任意名称游戏物体

    1,制作Editor上方目录按钮 在C#静态方法上方加上[MenuItem("目录")],可在Editor中上方目录栏生成一个按钮. using System.Collection ...

  3. Unity Shader Graph 使用安装步骤缺失材质球,以及场景原本物体材质球丢失问题解决

    Unity Shader Graph 使用安装步骤,以及原本物体材质球丢失问题 我是用的版本是2019.3.9版本的,仅供参考. 第1步:Window-PackageManager-点击All Pac ...

  4. Unity3d鼠标点击屏幕来控制人物的走动

    今天呢,我们来一起实现一个在RPG中游戏中十分常见的功能,通过鼠标点击屏幕来控制人物的走动.首先来说一下原理,当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位 ...

  5. Unity3D入门Demo-Cube移动-触发球体-切换场景

    Unity3D入门Demo-Cube移动-触发球体-切换场景 新建Unity3D项目--选择3D类型 编写场景切换脚本ChangeScenes 添加场景切换脚本到游戏物体并保存Menu场景 新建Gam ...

  6. 【Unity3D】缩放、平移、旋转场景

    1 前言 场景缩放.平移.旋转有两种实现方案,一种是对场景中所有物体进行同步变换,另一种方案是对相机的位置和姿态进行变换. 对于方案一,如果所有物体都在同一个根对象下(其子对象或孙子对象),那么只需要 ...

  7. python点击屏幕_Python Appium 滑动、点击等

    1.手机滑动-swipe 查看源码 Ctrl + 鼠标右键点击 driver.swipe() 查看源码语法,起点和终点四个坐标参数. 手机屏幕从左上角开始为0,向右为x轴坐标,向下为y轴坐标. dur ...

  8. python手机屏幕自动点击代码_鼠标隔段时间自动点击屏幕

    知识点:Python库及简单定时器的使用 1. 鼠标自动点击屏幕代码 (1). 首先 pip install pymouse (2).  运行代码出现:ModuleNotFoundError: No ...

  9. Android 点击屏幕空白处隐藏软键盘

    前言 最近在重构老项目 把之前的拍照功能也搬过来了 在输入打卡号的时候 软键盘一直在打开着 点签到按钮 很麻烦 所以想实现 点击屏幕空白处隐藏软键盘!! 封装工具 据传入控件的坐标和用户的焦点坐标,判 ...

最新文章

  1. 每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?
  2. 数据结构源码笔记(C语言):顺序查找
  3. python学习-元组的复习及进阶使用(iterable、indexing and slicing、sequence unpacking、immutable、named tuple)
  4. 重构的小故事 Change Value to Reference or Vice Verse
  5. request.getAttribute()和request.getParameter()区别
  6. 个性化推荐认知之----数字化转型浪潮下,产品经理应如何重新认知个性化推荐?...
  7. 数据通信与计算机网络第2版,数据通信与计算机网络(第2版)习题1
  8. 百度编辑器ueditor 的 submit 表单提交
  9. java voip 的sip服务器搭建_SIP协议开源SIP服务器搭建和客户端安装
  10. 2021年游戏项目的十大编程语言
  11. 阿里云设置DDNS(动态域名解析)
  12. Python体重指数计算器源代码
  13. Markdown中给图片增加超链接
  14. 大数据,why python
  15. MySQL unique啥意思_数据库中unique是什么意思
  16. 用Python的Pandas和Matplotlib绘制股票KDJ指标线
  17. Linux克隆Mac地址一样,详解Linux系统中网卡MAC地址克隆方法
  18. 计算机二级access知识点6,2016计算机二级《Access》知识点
  19. google chrome支持建行网银
  20. java毕业设计网站SSM幼儿园信息管理系统

热门文章

  1. could not connect to server: No route to host Is the server running on host 192.168.163.181 and a
  2. 快速搭建开发环境(Vs Code)
  3. Style和Script中的注释问题。
  4. 20-21-2网络管理quiz6
  5. 【ROS系统】解决找不到用户工作空间下的程序包的问题——E:No such package
  6. 解决springmvc报No converter found for return value of type: class java.util.ArrayList问题
  7. 对于HTTP过程中POST内容加密的解决方案
  8. 针对github权限导致hexo部署失败的解决方案
  9. springboot解决第三方依赖jar包的问题
  10. ubuntu 18.04,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法