开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:707

当前位置:游戏蛮牛 技术专区 教程分享

查看: 15237|回复: 118

[基础知识] Unity3D射线的原理用法以及一个利用射线实现简单拾取的小例子

  [复制链接]  [移动端链接]
7日久生情
4303/5000
排名
2356
昨日变化
2

1646

主题

1657

帖子

4303

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
65700
威望
0
注册时间
2015-12-24
在线时间
352 小时
最后登录
2017-6-20
发表于 2016-5-27 10:34:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西,总结了些东西放上来,一来做个笔记,二来和大家分享分享!嘿嘿~  如果有不对的地方希望指出哈 !- _ - 进入正题

  射线:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

  用途:射线应用范围比较广, 多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。

  相关API:

  1、Ray Camera.main.ScreenPointToRay(Vector3 pos)   返回一条射线Ray从摄像机到屏幕指定一个点

  2、Ray Camera.main.ViewportPointToRay(Vector3 pos)  返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点

  3、Ray 射线类

  4、RaycastHit 光线投射碰撞信息

  5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)

  当光线投射与任何碰撞器交叉时为真,否则为假。

  bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)

  在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。

  bool Physics.Raycast(Ray ray, float distance, int layerMask)

  当光线投射与任何碰撞器交叉时为真,否则为假。

  bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)

  当光线投射与任何碰撞器交叉时为真,否则为假。

  注意:如果从一个球型体的内部到外部用光线投射,返回为假。

  参数理解:

  origin : 在世界坐标中射线的起始点

  direction: 射线的方向

  distance: 射线的长度

  hit: 使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。

  layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 选择性的碰撞

  6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)

  投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。

  下面一个利用射线做的拾取的小例子(将代码直接拖拽到主相机上)

  复制代码

  1 using UnityEngine;

  2 using System.Collections;

  3

  4 public class RayTest : MonoBehaviour {

  5

  6     // Use this for initialization

  7     void Start () {

  8

  9     }

  10

  11     // Update is called once per frame

  12     void Update ()

  13     {

  14         if(Input.GetMouseButton(0))

  15         {

  16             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出到点击坐标的射线

  17             RaycastHit hitInfo;

  18             if(Physics.Raycast(ray,out hitInfo))

  19             {

  20                 Debug.DrawLine(ray.origin,hitInfo.point);//划出射线,只有在scene视图中才能看到

  21                 GameObject gameObj = hitInfo.collider.gameObject;

  22                 Debug.Log("click object name is " + gameObj.name);

  23                 if(gameObj.tag == "boot")//当射线碰撞目标为boot类型的物品 ,执行拾取操作

  24                 {

  25                     Debug.Log("pick up!");

  26                 }

  27             }

  28         }

  29     }

  30 }

点评

谢谢楼主分享,尽管我没听懂  发表于 2017-5-14 09:23

评分

参与人数 1鲜花 +1 收起 理由
陈一霏 + 1 很给力!

查看全部评分


回复

使用道具 举报

排名
16066
昨日变化
14

0

主题

8

帖子

57

积分

Rank: 2Rank: 2

UID
141794
好友
0
蛮牛币
77
威望
0
注册时间
2016-3-18
在线时间
21 小时
最后登录
2016-10-13
发表于 2016-5-30 22:42:06 | 显示全部楼层
感谢分享。

回复

使用道具 举报

3偶尔光临
191/300
排名
9953
昨日变化
5

1

主题

73

帖子

191

积分

Rank: 3Rank: 3Rank: 3

UID
30655
好友
2
蛮牛币
88
威望
0
注册时间
2014-6-21
在线时间
37 小时
最后登录
2016-9-22
发表于 2016-6-2 19:35:28 | 显示全部楼层
射线是一个什么东西,一点也不懂?

回复 支持 反对

使用道具 举报

3偶尔光临
191/300
排名
9953
昨日变化
5

1

主题

73

帖子

191

积分

Rank: 3Rank: 3Rank: 3

UID
30655
好友
2
蛮牛币
88
威望
0
注册时间
2014-6-21
在线时间
37 小时
最后登录
2016-9-22
发表于 2016-6-2 19:37:27 | 显示全部楼层
感谢Man牛 发表于 2016-6-2 19:35
射线是一个什么东西,一点也不懂?

我是说我自己,一点也不多,看了你这个能明白点了,好像枪战类游戏子弹都是这么设置的吧?

回复 支持 反对

使用道具 举报

3偶尔光临
280/300
排名
53168
昨日变化
21

2

主题

57

帖子

280

积分

Rank: 3Rank: 3Rank: 3

UID
128276
好友
0
蛮牛币
1265
威望
0
注册时间
2015-11-8
在线时间
219 小时
最后登录
2017-11-22
发表于 2016-6-11 17:16:17 | 显示全部楼层
射线确实是很实用的东西

回复 支持 反对

使用道具 举报

4四处流浪
427/500
排名
6702
昨日变化
5

0

主题

173

帖子

427

积分

Rank: 4

UID
102902
好友
0
蛮牛币
3408
威望
0
注册时间
2015-5-24
在线时间
104 小时
最后登录
2017-11-9
发表于 2016-6-29 09:41:46 | 显示全部楼层
听说积分能换实物了,赶紧刷点分,另外楼主的资源确实应该顶!

回复 支持 反对

使用道具 举报

3偶尔光临
222/300
排名
10561
昨日变化
10

0

主题

72

帖子

222

积分

Rank: 3Rank: 3Rank: 3

UID
67653
好友
0
蛮牛币
258
威望
0
注册时间
2015-1-11
在线时间
78 小时
最后登录
2017-9-15
发表于 2016-7-9 20:07:10 | 显示全部楼层
#4 楼没事吧?

点评

确实不错分享的  发表于 2017-8-22 10:03
[发帖际遇]: siren 在网吧通宵,花了 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

3偶尔光临
232/300
排名
10723
昨日变化
10

0

主题

78

帖子

232

积分

Rank: 3Rank: 3Rank: 3

UID
155351
好友
0
蛮牛币
333
威望
0
注册时间
2016-7-6
在线时间
84 小时
最后登录
2017-6-5
QQ
发表于 2016-7-10 17:16:13 | 显示全部楼层
感谢分享。很有用的!!!

回复 支持 反对

使用道具 举报

3偶尔光临
232/300
排名
10723
昨日变化
10

0

主题

78

帖子

232

积分

Rank: 3Rank: 3Rank: 3

UID
155351
好友
0
蛮牛币
333
威望
0
注册时间
2016-7-6
在线时间
84 小时
最后登录
2017-6-5
QQ
发表于 2016-7-10 17:16:30 | 显示全部楼层
感谢分享。很有用的!!!
[发帖际遇]: Lyk 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
754/1000
排名
3226
昨日变化
2

0

主题

115

帖子

754

积分

Rank: 5Rank: 5

UID
86609
好友
0
蛮牛币
461
威望
0
注册时间
2015-3-29
在线时间
277 小时
最后登录
2017-11-8
发表于 2016-7-14 14:22:44 | 显示全部楼层
确实很犀利,先用一些时间再说

回复 支持 反对

使用道具 举报

排名
53168
昨日变化
21

0

主题

5

帖子

8

积分

Rank: 1

UID
157502
好友
0
蛮牛币
17
威望
0
注册时间
2016-7-18
在线时间
2 小时
最后登录
2016-7-19
发表于 2016-7-18 16:25:04 | 显示全部楼层

感谢分享。很有用的!!!

回复 支持 反对

使用道具 举报

排名
317
昨日变化
1

1

主题

342

帖子

2551

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
4748
好友
0
蛮牛币
8842
威望
0
注册时间
2013-9-29
在线时间
712 小时
最后登录
2017-11-21

社区QQ达人

发表于 2016-7-24 14:40:22 | 显示全部楼层
  亲,VIVE Unity开发 关于抛物线移动的问题,在Unity中运行 手柄移动 都没有问题。但是在导出发布,这个手柄抛物线移动的效果就没了呢?请教下 。这是什么问题呢?

回复 支持 反对

使用道具 举报

5熟悉之中
918/1000
排名
2139
昨日变化
9

3

主题

119

帖子

918

积分

Rank: 5Rank: 5

UID
157889
好友
0
蛮牛币
1371
威望
0
注册时间
2016-7-20
在线时间
266 小时
最后登录
2017-11-22
QQ
发表于 2016-7-27 17:20:09 | 显示全部楼层
学习了,多谢

回复

使用道具 举报

排名
23950
昨日变化
50

0

主题

27

帖子

96

积分

Rank: 2Rank: 2

UID
91731
好友
1
蛮牛币
439
威望
0
注册时间
2015-4-13
在线时间
58 小时
最后登录
2017-11-4
发表于 2016-7-30 17:16:54 | 显示全部楼层
这叫什么原理,很垃圾!就把API看了一遍就是原理了?

回复 支持 2 反对 1

使用道具 举报

排名
13754
昨日变化
11

0

主题

26

帖子

99

积分

Rank: 2Rank: 2

UID
145255
好友
0
蛮牛币
48
威望
0
注册时间
2016-4-12
在线时间
31 小时
最后登录
2017-8-31
发表于 2016-8-5 21:22:46 | 显示全部楼层
写的不错!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表