unity3d-射线(Ray)
射线Ray
射线是一个点向另外一个点发生的一条线,一旦与其他模型发生碰撞,他将停止发射。注意这条件是逻辑上的,界面上看不到。
一般使用射线判断是否发射至某个游戏对象上或者获得鼠标点击的游戏对象等。
用Camera.main.ScreenPointToRay向屏幕发射一条射线。
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if(Physics.Raycast(ray,out hit)//如果命中
- {
- //hit.collider.gameObject可以获得命中的游戏对象
- }
Raycast和RaycastAll的区别
Raycast:一旦与其他模型发生碰撞,他将停止发射。
RaycastAll:投射一条光线并返回所有碰撞
我们来做个小案例演示下。这个两个的区别。我分别模拟鼠标左键和右键单击并发射射线,
1:Raycast碰撞的物体。设置为蓝色
1:RaycastAll碰撞的所有物体。设置为红色
从上图可以看出来。当右键单击。射线穿过了两个cube,都变成了红色。 可以在scene中可以看到效果,而左键单击变成了蓝色。
- void Update()
- {
- if (Input.GetMouseButtonDown()) //单击鼠标左键
- {
- //案例一:演示Raycast,
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit)) //如果命中,则改变为蓝颜色
- {
- hit.transform.renderer.material.color = Color.blue;
- //hit.collider.gameObject.transform.renderer.material.color = Color.red;
- }
- }
- if (Input.GetMouseButtonDown())//单击鼠标右键
- {
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- //案例二:演示RaycastAll
- RaycastHit[] hi = Physics.RaycastAll(ray);
- if (hi.Length > )
- {
- for (int i = ; i < hi.Length; i++) //改变所有命中对象的为红颜色
- {
- hi[i].collider.transform.renderer.material.color = Color.red;
- }
- }
- }
- }
此时你是不是想看到那个射线的轨迹?我们可以通过GL画出来,但这里可以通过Debug.DrawLine()方法调试出来
注:这个轨迹只能在Scene视图中看到,
我们改动下上面的代码。在://案例一:演示Raycast,中改动如下:
- if (Physics.Raycast(ray, out hit)) //如果命中,则改变为蓝颜色
- {
- hit.transform.renderer.material.color = Color.blue;
- Debug.DrawLine(ray.origin, hit.point); //画轨迹
- }
在Scene视图中可以看出,当命中游戏对象后。看到了轨迹。
天空盒子(Skyboxes)
游戏场景中有没有发现天空是晴朗的艳阳天,看着心情都舒服很多。这是unity自带的包,操作如下:
1:导包
2:导入完成后可以在资源文件夹中看到
3:设置场景中的天空的渲染方式
两种方式都可以设置:直接拖拽或者打开窗口选择。
unity3d-射线(Ray)的更多相关文章
- 【转】Unity3D 射线Ray实现点击拾取
游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果.原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我 ...
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...
- unity3d 射线的原理,基础用法
射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 . Ray射线类和RaycastHit射线投射信息类是射线中常用的两个工具类. 用途:射线多 ...
- unity3d射线控制移动
看看效果图 代码: using UnityEngine; using System.Collections; public class T2 : MonoBehaviour { // Use this ...
- 【Unity3d】Ray射线初探-射线的原理及用法
http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...
- Unity3D 射线指定层获取GameObject 注意 LayerMask
这一篇是纯技术讨论,看过我前面文章的童鞋应该清楚,我的奔跑是靠鼠标响应的,鼠标点到哪就跑到哪,后来又有了界面,麻烦就来了,我的界面居然能点 穿.我不希望点界面的时候还能点到界面后面的地面上,角色傻不拉 ...
- unity3d 射线扫描 忽略图层
原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Ve ...
- unity3D射线检测敌人是否在前方
//发射一条射线,去检测玩家是否在自己面前,用来随后的发射炮弹 bool isForward = false; var TranformShootPoint = ai.WorkingMemory.Ge ...
- threejs通过射线Ray获取指定的点
例:获取cube方向上的面的中点坐标(该cube默认方向为(0,1,0)) (中心点向cube quaternion 方向上发射射线,与正前方的面相交的点即为目标点; 由于ray只支持box和face ...
- Unity Ray 射线
射线:射线是3D世界一个向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射. 用途:射线范围比较广,多用于碰撞检测(如:子弹飞行是否击中目标).角色移动等. Ray是一个结 ...
随机推荐
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...
- smali-2.2.4.jar & baksmali-2.2.4.jar
https://bitbucket.org/JesusFreke/smali/downloads/
- 题目1100:最短路径(最短路径问题进阶dijkstra算法)
题目链接:http://ac.jobdu.com/problem.php?pid=1100 详细链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- LeetCode 9 Palindrome Number(回文数字判断)
Long Time No See ! 题目链接https://leetcode.com/problems/palindrome-number/?tab=Description 首先确定该数字的 ...
- 第三步 Cordova 3.0(及以上版本) 添加插件
1.使用命令生成项目 例:cordova create jy110 com.example.jy110 jy110 2.使用命令添加插件(如果报错,可能是网络问题,可以多试几次,直到成功) 例:cor ...
- slf4j + log4j 是如何初始化的
SLF4J的全称是 Simple Logging Facade for Java(简单java日志门面) SLF4J自己不提供具体的日志功能实现,只是提供了一个统一的日志门面,在这个统一的门面之下,用 ...
- C语言位操作--不用中间变量交换两数值
1.使用加法与减法交换两数值: #define SWAP(a, b) ((&(a) == &(b)) || \ (((a) -= (b)), ((b) += (a)), ((a) = ...
- Facebook Cache Token Issue
https://developers.facebook.com/docs/ios/token-caching-ios-sdk/ What's session? https://developers.f ...
- Rails: could not connect to database postgres: FATAL: Peer authentication failed for user "username"
/var/lib/pgsql/9.2/data/pg_hba.conf 打开之后找到 local all postgres/all peer 改成 local all postgres trust 保 ...
- django之admin设置
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的配置 ...