Unity中实现3D拾取功能及其原理
写在前面
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拾取功能及其原理相关推荐
- 学习 launch-editor 源码整体架构,探究 vue-devtools「在编辑器中打开组件」功能实现原理...
1. 前言 你好,我是若川[1],微信搜索「若川视野」关注我,专注前端技术分享,一个愿景是帮助5年内前端开阔视野走向前列的公众号.欢迎加我微信ruochuan12,长期交流学习. 这是学习源码整体架构 ...
- Unity中实现溶解(Dissolve)特效及其原理解析
Unity中实现溶解(Dissolve)特效及其原理解析 今天我们分享一个Unity中非常常见的特效: 溶解. 下面先来看看效果. 大家可能和我一样, 在不了解实现方式的时候, 会觉得这个效果很神奇, ...
- Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换
一 :3d空间坐标系 x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...
- 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 ...
- 在Unity中创建3D直升机游戏
In this lecture from Colton Ogden, you can learn game development principles by coding a Helicopter ...
- 在Unity中实现画图/字帖功能
前段时间总是加班,也没啥心情和精力去研究新东西,总结一下自己之前做的字帖的功能 先上效果图: 文章分为几部分: (一) 画图板实现原理 (二) 画图具体实现过程中的核心点 (三) 在画图板的基础上 演 ...
- Unity中实现放大镜的功能
一个项目中需要实现一个放大镜的功能,对图片或者模型的某一个部分进行局部的放大,但是不能够改变原图片或者原模型的大小和样式,大致效果如下图所示: 相对来说还是比较简单的,借助Unity的UGUI和Ren ...
- unity中实现3d物体的颜色随时间渐渐消失
实现的原理就是修改material的color属性的Alpha值,通过把值逐渐变为0来达到消失 注意:这种方法只对部分shader有作用,我用的是 下面是代码: using System.Collec ...
- Unity中实现3D人物残影效果
一:效果演示 二:思路 --使用SkinnedMeshRenderer类中的BakeMesh方法去复制出新的Mesh --再使用Graphics.DrawMesh绘制会Mesh 三:核心代码实现 -- ...
- 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )
文章目录 一.向 Unity 中添加 FBX 模型 二.向 Scene 场景中添加 FBX 模型 三.3D 物体渲染 四.3D 物体材质设置 一.向 Unity 中添加 FBX 模型 Unity 中使 ...
最新文章
- 云时代传统服务器被“唱衰”,服务器厂商面临“大考”
- JS简单循环遍历json数组的方法
- php error 2,一起搞懂PHP的错误和异常(二)
- CodeBlacks16\17\20版本下载
- 【2020蓝桥杯】Python组真题解析 - 第十一届蓝桥杯
- 下周见| 重量级演讲阵容首曝光DTCC 2020阿里云议题抢鲜看
- 【牛客 - 317B】小a与204(贪心,构造,水题)
- 机器人 蓝buff 钩_机器人要在S赛登场了?Ming韩服练起来了,这是RNG黑科技?
- c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt
- 【TensorFlow】TensorFlow是什么?
- sublime text 3 插件推荐?
- halcon中如何生成椭圆_Halcon拟合系列(2)直线/圆/椭圆/矩形拟合算子
- 【Linux】创建逻辑卷管理(LVM)
- Mini 容器学习笔记10——方法注入
- 最强大的数据恢复软件
- ESP32 系统篇: 优化系统启动时间
- 基于深度学习的目标检测模型(基于候选区域的方法)
- Activity 审批流简单介绍
- 2022黑马Python学习笔记
- 查询oracle数据库表名和中文名
热门文章
- 硬盘sata供电不启动,必须用大4pin转sata的情况
- VMware 虚拟机的使用
- python可视化数据分析交互作用_R数据分析:双分类变量的交互作用作图
- 已知闭合曲线上各点的坐标,如何求曲线上的凹点
- 机器学习算法应用场景实例六十则
- 08.音频系统:第004课_Android音频系统详解:第002节_以例子说明几个重要概念
- C语言练习实例——费氏数列
- 基于Radon滤波反投影算法的CT图像重建matlab仿真
- 2、硬件工程师之元器件学习—电阻(二)
- Steam Deck 游戏掌机可运行 Windows