unity3d-射线(Ray)

射线Ray

射线是一个点向另外一个点发生的一条线,一旦与其他模型发生碰撞,他将停止发射。注意这条件是逻辑上的,界面上看不到。

一般使用射线判断是否发射至某个游戏对象上或者获得鼠标点击的游戏对象等。

用Camera.main.ScreenPointToRay向屏幕发射一条射线。

1     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
2     RaycastHit hit;
3    if(Physics.Raycast(ray,out hit)//如果命中
4     {
5      //hit.collider.gameObject可以获得命中的游戏对象
6     }

Raycast和RaycastAll的区别

Raycast:一旦与其他模型发生碰撞,他将停止发射。

RaycastAll:投射一条光线并返回所有碰撞

我们来做个小案例演示下。这个两个的区别。我分别模拟鼠标左键和右键单击并发射射线,

1:Raycast碰撞的物体。设置为蓝色

1:RaycastAll碰撞的所有物体。设置为红色

从上图可以看出来。当右键单击。射线穿过了两个cube,都变成了红色。 可以在scene中可以看到效果,而左键单击变成了蓝色。

 1 void Update()
 2     {
 3
 4         if (Input.GetMouseButtonDown(0)) //单击鼠标左键
 5         {
 6             //案例一:演示Raycast,
 7             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 8             RaycastHit hit;
 9             if (Physics.Raycast(ray, out hit)) //如果命中,则改变为蓝颜色
10             {
11                 hit.transform.renderer.material.color = Color.blue;
12                 //hit.collider.gameObject.transform.renderer.material.color = Color.red;
13             }
14
15
16         }
17
18         if (Input.GetMouseButtonDown(1))//单击鼠标右键
19         {
20             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
21             //案例二:演示RaycastAll
22             RaycastHit[] hi = Physics.RaycastAll(ray);
23             if (hi.Length > 0)
24             {
25                 for (int i = 0; i < hi.Length; i++) //改变所有命中对象的为红颜色
26                 {
27                     hi[i].collider.transform.renderer.material.color = Color.red;
28                 }
29             }
30         }
31     }

天空盒子(Skyboxes)

游戏场景中有没有发现天空是晴朗的艳阳天,看着心情都舒服很多。这是unity自带的包,操作如下:

1:导包

2:导入完成后可以在资源文件夹中看到

3:设置场景中的天空的渲染方式

两种方式都可以设置:直接拖拽或者打开窗口选择。

时间: 2024-10-01 07:27:36

unity3d-射线(Ray)的相关文章

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

游戏中经常会有鼠标移动到某个对象上来拾取它的功能,我们可以用Unity3D中的射线Ray实现这一效果.原理是在我们鼠标的位置,从屏幕射出一条射向世界空间的射线,当这条射线碰撞到我们需要拾取的对象时,我们就销毁对象,把它添加到我们的背包中. 我们来做一个简单的Demo,我们在场景中添加一个方块Cube,一个小球Sphere,当我们鼠标放在方块上时没有任何反应,而当我们把鼠标放在小球上时,小球会消失. 新建一个项目,我们命名为"RayTest",然后在场景中新建一个小球,方块,和添加灯光,

Unity3d 发射射线Ray

Ray Camera.main.ScreenPointToRay(Vector3 pos)   返回一条射线Ray从摄像机到屏幕指定一个点 Ray Camera.main.ViewportPointToRay(Vector3 pos)  返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点 RaycastHit 光线投射碰撞信息 bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layer

unity3d 射线扫描 忽略图层

原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Vector2origin,Vector2direction,float distance = Mathf.Infinity,int layerMask = DefaultRaycastLayers,float minDepth = -Mathf.Infinity,float maxDepth = Ma

unity3d射线控制移动

看看效果图 代码: 1 using UnityEngine; 2 using System.Collections; 3 4 public class T2 : MonoBehaviour 5 { 6 7 // Use this for initialization 8 void Start() 9 { 10 11 } 12 13 //定义射线 14 Ray ray; 15 RaycastHit hit; 16 //是否移动 17 bool isMove; 18 //移动方向 19 Vector

Unity3D射线检测。

int groundLayerIndex = LayerMask.GetMask (Tags.Ground); Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hitInfo; if(Physics.Raycast (ray, out hitInfo, 200, groundLayerIndex)) { Vector3 target = hitInfo.point; target.y = trans

Unity3D独立游戏开发日记(一):动态生成树木

目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干啥,想开车就开车,想走路就走路.想盖房子就盖房子,没有城管来找你麻烦.那么随机度,就是每天发生的事情不能一样,做的任务也不会就一条线路可走. 在我的沙盒游戏里,地形上的树木,岩石等都是随机生成的,这样不同的人玩的地图都会不一样.当然如果最后能做到地形也随机生成那就更完美了. 下面我就讲下树木随机生成

Unity3D独立游戏开发日记(二):摆放建筑物

在沙盒游戏里,能自由建造是很重要的特点,比如说风靡全球的<我的世界>,用一个个方块就能搭建出规模宏大的世界.甚至有偏激的人说,没有自由建造,就不是一个真正的沙盒游戏.的确,沙盒游戏的魅力有很大一部分是能自由构建一个游戏世界.看着自己一砖一瓦搭建起一个城堡世界会很有成就感的. 现如今的手游,大多数就是一个争斗和炫耀的世界.不管是传奇类的狂霸拽酷,还是连连看,消消乐等好友排名,就是消费国人的虚荣心.其实,游戏是第九艺术,要上升到艺术的角度.在游戏里,玩家需要一种情感的宣泄和寄托以及体验. 说了这么

【浅墨Unity3D Shader编程】之一 游戏场景的创建 &amp; 第一个Shader的书写

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 作为一个系统介绍Unity3D中Shader编写的系列文章的开篇,本文的第一部分系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式,最后一部分讲解了如何在Un

Unity3d 杂七杂八小技巧

div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/43987981 用了半年多的Unity3d,零零碎碎的记了点东西,先前记在个人博客里 ,后来网站改版给删了,现在发这吧 都是我实际用过的,至少在某个版本力是杠杠给力的 ,谁用谁知道 1.自定义编辑器

关于Unity3D中鼠标移动指定物体的解决方案

一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1.声明一个观察的摄像机.一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的RaycastHit: 2.将射线Ray定义为从摄像机原点出发并且指向当前鼠标所在的坐标(屏幕坐标): 3.定义碰撞RaycastHit为射线Ray与有碰撞属性的物体的碰撞点. 具体代码实现如下(C#代码): using System.Collections; using System.Collecti