射线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)的更多相关文章

  1. 【转】Unity3D 射线Ray实现点击拾取

    游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果.原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我 ...

  2. 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子

    原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...

  3. unity3d 射线的原理,基础用法

    射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 . Ray射线类和RaycastHit射线投射信息类是射线中常用的两个工具类. 用途:射线多 ...

  4. unity3d射线控制移动

    看看效果图 代码: using UnityEngine; using System.Collections; public class T2 : MonoBehaviour { // Use this ...

  5. 【Unity3d】Ray射线初探-射线的原理及用法

    http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...

  6. Unity3D 射线指定层获取GameObject 注意 LayerMask

    这一篇是纯技术讨论,看过我前面文章的童鞋应该清楚,我的奔跑是靠鼠标响应的,鼠标点到哪就跑到哪,后来又有了界面,麻烦就来了,我的界面居然能点 穿.我不希望点界面的时候还能点到界面后面的地面上,角色傻不拉 ...

  7. unity3d 射线扫描 忽略图层

    原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Ve ...

  8. unity3D射线检测敌人是否在前方

    //发射一条射线,去检测玩家是否在自己面前,用来随后的发射炮弹 bool isForward = false; var TranformShootPoint = ai.WorkingMemory.Ge ...

  9. threejs通过射线Ray获取指定的点

    例:获取cube方向上的面的中点坐标(该cube默认方向为(0,1,0)) (中心点向cube quaternion 方向上发射射线,与正前方的面相交的点即为目标点; 由于ray只支持box和face ...

  10. Unity Ray 射线

    射线:射线是3D世界一个向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射. 用途:射线范围比较广,多用于碰撞检测(如:子弹飞行是否击中目标).角色移动等. Ray是一个结 ...

随机推荐

  1. sencha touch 常见问题解答(26-50)

    26.sencha touch在华为.红米等部分手机下hide事件失效,msgbox无法关闭怎么办 答:请看http://www.cnblogs.com/cjpx00008/p/3535557.htm ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验七:PS/2模块① — 键盘

    实验七:PS/2模块① — 键盘 实验七依然也是熟烂的PS/2键盘.相较<建模篇>的PS/2键盘实验,实验七实除了实现基本的驱动以外,我们还要深入解PS/2时序,还有PS/2键盘的行为.不 ...

  3. Pry的安装

    Pry 用于rails应用的调试 在Gemfile中添加 gem 'pry', :group =>:development bundle install 即可.pry代替irb方法,直接运行: ...

  4. tomcat+redis会话共享

    1.基础环境: jdk1. tomcat7 redis nginx 2.添加依赖的jar包到tomcat的lib目录(http://pan.baidu.com/s/1eRAwN0Q) 3.配置tomc ...

  5. python获取windows所有com口

    import serial import serial.tools.list_ports port_list = list(serial.tools.list_ports.comports()) po ...

  6. thinkCMF----调用幻灯片

    还是在Common.php上写: /* * slide 获取幻灯片 * 具体使用: <?php $slide = slide();?> <foreach name="sli ...

  7. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

  8. Redis 如何保持和MySQL数据一致

    1. MySQL持久化数据,Redis只读数据 redis在启动之后,从数据库加载数据. 读请求: 不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取 写请求: 数据首先都写到数 ...

  9. CentOS6.5安装配置PPTP

    本次安装环境为Ucloud云服务器 1,操作系统版本检查 2,安装ppp,pptp yum install -y ppp rpm -ivh http://static.ucloud.cn/pptpd- ...

  10. ESXI虚拟机磁盘管理(精简-厚置-精简)

    VMwareESX/ESXi 精简置备(thin)与厚置备(thick)虚拟机磁盘之间转换 VMwareESX/ESXi 虚拟机磁盘thin与thick之间转换 注意:转换前请先关闭虚拟机!!! 一. ...