找回密码
 注册帐号

扫一扫,访问微社区

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

165
回复
26427
查看
  [ 复制链接 ]
7日久生情
4363/5000
排名
3047
昨日变化

1646

主题

1657

帖子

4363

积分

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

UID
132510
好友
17
蛮牛币
81552
威望
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
参与人数 12鲜花 +14 收起 理由
渣渣156 + 1 赞一个!
Soulmatezoj -2 神马都是浮云
夜雨缨华 + 2 很给力!
Coool + 1 很给力!
之间 + 1 赞一个!
海王星 + 1 很给力!
桐叶之语 + 2 赞一个!
下回合123 + 2 很给力!
阳光正好 + 2 赞一个!
王富庆 + 1 赞一个!
星辰xzx + 2 赞一个!
陈一霏 + 1 很给力!

查看全部评分总评分 : 鲜花 +14

回复

使用道具 举报

排名
19336
昨日变化

0

主题

6

帖子

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
排名
11986
昨日变化

1

主题

72

帖子

191

积分

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

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

1

主题

72

帖子

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
射线是一个什么东西,一点也不懂?

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

使用道具 举报

5熟悉之中
746/1000
排名
7869
昨日变化

3

主题

90

帖子

746

积分

Rank: 5Rank: 5

UID
128276
好友
0
蛮牛币
3156
威望
0
注册时间
2015-11-8
在线时间
495 小时
最后登录
2019-4-18
2016-6-11 17:16:17 显示全部楼层
射线确实是很实用的东西
回复 支持 反对

使用道具 举报

4四处流浪
471/500
排名
7132
昨日变化

0

主题

176

帖子

471

积分

Rank: 4

UID
102902
好友
0
蛮牛币
4772
威望
0
注册时间
2015-5-24
在线时间
113 小时
最后登录
2019-1-16
2016-6-29 09:41:46 显示全部楼层
听说积分能换实物了,赶紧刷点分,另外楼主的资源确实应该顶!
回复 支持 反对

使用道具 举报

3偶尔光临
224/300
排名
12674
昨日变化

0

主题

73

帖子

224

积分

Rank: 3Rank: 3Rank: 3

UID
67653
好友
0
蛮牛币
242
威望
0
注册时间
2015-1-11
在线时间
79 小时
最后登录
2018-6-1
2016-7-9 20:07:10 显示全部楼层
#4 楼没事吧?

点评

确实不错分享的  发表于 2017-8-22 10:03
回复

使用道具 举报

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

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
排名
12881
昨日变化

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 显示全部楼层
感谢分享。很有用的!!!
回复 支持 反对

使用道具 举报

7日久生情
1555/5000
排名
1631
昨日变化

0

主题

160

帖子

1555

积分

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

UID
86609
好友
0
蛮牛币
1074
威望
0
注册时间
2015-3-29
在线时间
599 小时
最后登录
2019-4-25
2016-7-14 14:22:44 显示全部楼层
确实很犀利,先用一些时间再说
回复 支持 反对

使用道具 举报

排名
64922
昨日变化

0

主题

5

帖子

8

积分

Rank: 1

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

感谢分享。很有用的!!!
回复 支持 反对

使用道具 举报

排名
409
昨日变化

1

主题

374

帖子

2866

积分

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

UID
4748
好友
0
蛮牛币
9244
威望
0
注册时间
2013-9-29
在线时间
831 小时
最后登录
2019-4-25
2016-7-24 14:40:22 显示全部楼层
  亲,VIVE Unity开发 关于抛物线移动的问题,在Unity中运行 手柄移动 都没有问题。但是在导出发布,这个手柄抛物线移动的效果就没了呢?请教下 。这是什么问题呢?
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1065/1500
排名
2201
昨日变化

3

主题

119

帖子

1065

积分

Rank: 6Rank: 6Rank: 6

UID
157889
好友
0
蛮牛币
1658
威望
0
注册时间
2016-7-20
在线时间
306 小时
最后登录
2018-3-1
QQ
2016-7-27 17:20:09 显示全部楼层
学习了,多谢
回复

使用道具 举报

2初来乍到
116/150
排名
28925
昨日变化

0

主题

33

帖子

116

积分

Rank: 2Rank: 2

UID
91731
好友
1
蛮牛币
384
威望
0
注册时间
2015-4-13
在线时间
71 小时
最后登录
2019-3-12
2016-7-30 17:16:54 显示全部楼层
这叫什么原理,很垃圾!就把API看了一遍就是原理了?
回复 支持 2 反对 1

使用道具 举报

2初来乍到
102/150
排名
16217
昨日变化

0

主题

26

帖子

102

积分

Rank: 2Rank: 2

UID
145255
好友
0
蛮牛币
41
威望
0
注册时间
2016-4-12
在线时间
33 小时
最后登录
2018-3-8
2016-8-5 21:22:46 显示全部楼层
写的不错!
回复

使用道具 举报

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

本版积分规则