写在前面

3D拾取功能在实际项目开发中是一种非常常用的功能,尤其是在3D游戏中,拾取技术是必不可少的基础操作,拾取技术极大的增强了游戏的交互性。

3D拾取原理

简单的来说,3D拾取是通过屏幕上的一个点与摄像机的位置(摄像机控件原点)构成一条射线,然后与场景中物体进行相交,判断是否相交,进而进行拾取操作,这个相交判断的实际是射线与三角形的相交判断算法。在实际开发中,更多的使用包围盒等算法。想要深入了解3D拾取原理的同学,请点击。深入了解3D拾取原理。

Unity中简单实现3D拾取功能

1: 代码编写

  (1) 发射一条射线: Ray ray = Camera.main.ScreenPointToRay(Touch.position);

  (2) 检测撞到那个物体: Raycast hit; bool Physics.Raycast(ray, out hit);

  (3) hit.transform, 获得物体的transform组件, name可以获得被碰撞的物体的名字;

  (4) Camera.main获取当前我们的主Camera

  (5) 如果要拾取,需要有一个碰撞器

2.源代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CatchScript : MonoBehaviour
{private GameObject gameobj;private bool CubeFlag = false;private bool SphereFlag = false;private bool CapsuleFlag = false;public Texture2D texture;void Start(){}void Update(){//鼠标监听 是否点击if (Input.GetMouseButtonDown(0)){//创建射线 Camera.main 只是代表tag标签为main camera 的摄像机 其可以替换为任何摄像机Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//创建碰撞体对象RaycastHit hit;//判断是否碰撞if (Physics.Raycast(ray,out hit)){//打印拾取物体的名称Debug.Log(hit.transform.name);SetObj(hit.transform.name);        }else{CubeFlag = false;CapsuleFlag = false;SphereFlag = false;}}if (CubeFlag){gameobj.GetComponent<Renderer>().material.mainTexture = texture;gameobj.transform.Rotate(0, 10, 0);}if (SphereFlag){gameobj.transform.Translate(0, 0.02f, 0);}if (CapsuleFlag){gameobj.transform.Rotate(0, 10, 0);}}void SetObj(string hitname){switch(hitname){case "Cube":gameobj = GameObject.Find("Cube");CubeFlag = true;CapsuleFlag = false;SphereFlag = false;break;case "Sphere":gameobj = GameObject.Find("Sphere");SphereFlag = true;CubeFlag = false;CapsuleFlag = false;break;case "Capsule":gameobj = GameObject.Find("Capsule");CapsuleFlag = true;CubeFlag = false;SphereFlag = false;break;default:CubeFlag = false;CapsuleFlag = false;SphereFlag = false;break;}}
}

3.将该脚本挂在对应摄像机上。

这样我们就在Unity中简单实现了3D拾取功能。

Unity中实现3D拾取功能及其原理相关推荐

  1. 学习 launch-editor 源码整体架构,探究 vue-devtools「在编辑器中打开组件」功能实现原理...

    1. 前言 你好,我是若川[1],微信搜索「若川视野」关注我,专注前端技术分享,一个愿景是帮助5年内前端开阔视野走向前列的公众号.欢迎加我微信ruochuan12,长期交流学习. 这是学习源码整体架构 ...

  2. Unity中实现溶解(Dissolve)特效及其原理解析

    Unity中实现溶解(Dissolve)特效及其原理解析 今天我们分享一个Unity中非常常见的特效: 溶解. 下面先来看看效果. 大家可能和我一样, 在不了解实现方式的时候, 会觉得这个效果很神奇, ...

  3. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换

    一 :3d空间坐标系  x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...

  4. Unity中的3D数学—02向量与矩阵

    1.向量 1.1 向量的运算 运算 公式 矢量和标量的乘/除法 k v = ( k v x , k v y , k v z ) k\mathbf{v}=(kv_x,kv_y,kv_z) kv=(kvx ...

  5. 在Unity中创建3D直升机游戏

    In this lecture from Colton Ogden, you can learn game development principles by coding a Helicopter ...

  6. 在Unity中实现画图/字帖功能

    前段时间总是加班,也没啥心情和精力去研究新东西,总结一下自己之前做的字帖的功能 先上效果图: 文章分为几部分: (一) 画图板实现原理 (二) 画图具体实现过程中的核心点 (三) 在画图板的基础上 演 ...

  7. Unity中实现放大镜的功能

    一个项目中需要实现一个放大镜的功能,对图片或者模型的某一个部分进行局部的放大,但是不能够改变原图片或者原模型的大小和样式,大致效果如下图所示: 相对来说还是比较简单的,借助Unity的UGUI和Ren ...

  8. unity中实现3d物体的颜色随时间渐渐消失

    实现的原理就是修改material的color属性的Alpha值,通过把值逐渐变为0来达到消失 注意:这种方法只对部分shader有作用,我用的是 下面是代码: using System.Collec ...

  9. Unity中实现3D人物残影效果

    一:效果演示 二:思路 --使用SkinnedMeshRenderer类中的BakeMesh方法去复制出新的Mesh --再使用Graphics.DrawMesh绘制会Mesh 三:核心代码实现 -- ...

  10. 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    文章目录 一.向 Unity 中添加 FBX 模型 二.向 Scene 场景中添加 FBX 模型 三.3D 物体渲染 四.3D 物体材质设置 一.向 Unity 中添加 FBX 模型 Unity 中使 ...

最新文章

  1. 云时代传统服务器被“唱衰”,服务器厂商面临“大考”
  2. JS简单循环遍历json数组的方法
  3. php error 2,一起搞懂PHP的错误和异常(二)
  4. CodeBlacks16\17\20版本下载
  5. 【2020蓝桥杯】Python组真题解析 - 第十一届蓝桥杯
  6. 下周见| 重量级演讲阵容首曝光DTCC 2020阿里云议题抢鲜看
  7. 【牛客 - 317B】小a与204(贪心,构造,水题)
  8. 机器人 蓝buff 钩_机器人要在S赛登场了?Ming韩服练起来了,这是RNG黑科技?
  9. c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt
  10. 【TensorFlow】TensorFlow是什么?
  11. sublime text 3 插件推荐?
  12. halcon中如何生成椭圆_Halcon拟合系列(2)直线/圆/椭圆/矩形拟合算子
  13. 【Linux】创建逻辑卷管理(LVM)
  14. Mini 容器学习笔记10——方法注入
  15. 最强大的数据恢复软件
  16. ESP32 系统篇: 优化系统启动时间
  17. 基于深度学习的目标检测模型(基于候选区域的方法)
  18. Activity 审批流简单介绍
  19. 2022黑马Python学习笔记
  20. 查询oracle数据库表名和中文名

热门文章

  1. 硬盘sata供电不启动,必须用大4pin转sata的情况
  2. VMware 虚拟机的使用
  3. python可视化数据分析交互作用_R数据分析:双分类变量的交互作用作图
  4. 已知闭合曲线上各点的坐标,如何求曲线上的凹点
  5. 机器学习算法应用场景实例六十则
  6. 08.音频系统:第004课_Android音频系统详解:第002节_以例子说明几个重要概念
  7. C语言练习实例——费氏数列
  8. 基于Radon滤波反投影算法的CT图像重建matlab仿真
  9. 2、硬件工程师之元器件学习—电阻(二)
  10. Steam Deck 游戏掌机可运行 Windows