Unity-Physics.Raycast
来源:互联网 发布:纸箱厂软件 编辑:程序博客网 时间:2024/04/27 14:59
关于API看一下链接
http://game.ceeger.com/Script/Physics/Physics.Raycast.html
• static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
Parameters参数
- originThe starting point of the ray in world coordinates.
在世界坐标,射线的起始点。 - directionThe direction of the ray.
射线的方向。 - distanceThe length of the ray
射线的长度。 - hitInfoIf true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).
如果返回true,hitInfo将包含碰到器碰撞的更多信息。 - layerMaskA Layer mask that is used to selectively ignore colliders when casting a ray.
只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
1.注意:如果从一个球型体的内部到外部用光线投射,返回为假
2.layerMask层的选择和屏蔽
首先 看第一个 如果一个点在碰撞体内部,向外部射,
先写一个脚本
using UnityEngine;using System.Collections;public class Demo2 : MonoBehaviour {public float XStartPos = 0f;public float YStartPos = 0f;public float ZStartPos = 0f;public float XEndPos = 0f;public float YEndPos = 0f;public float ZEndPos = 0f;private Vector3 startPos;private Vector3 endPos;private Vector3 direction;private float distance;// Use this for initializationvoid Start () {startPos = new Vector3 (XStartPos, YStartPos, ZStartPos);endPos = new Vector3 (XEndPos, YEndPos, ZEndPos);direction = (endPos - startPos).normalized;distance = Vector3.Distance (startPos, endPos);}// Update is called once per framevoid Update () {Debug.DrawLine (startPos, endPos, Color.red);RaycastHit hit;if (!Physics.Raycast (startPos, direction, out hit, distance)) {Debug.Log ("false");} else{Debug.Log ("yes " + hit.collider.name);}}}
建一个cube1,绑定脚本,设置startPos在cube内endPos在cube外,运行结果表明 false
再建一个cube2,startPos依然在cube1内,但endPos在cube2内,运行结果表明 yes cube2
也就是说 射线由内部向外部射 是不识别自己的碰撞体,但是识别其他的碰撞体。
第二个问题关于射线层的选择和屏蔽
修改一下脚本
using UnityEngine;using System.Collections;public class Demo3 : MonoBehaviour {public float XStartPos = 0f;public float YStartPos = 0f;public float ZStartPos = 0f;public float XEndPos = 0f;public float YEndPos = 0f;public float ZEndPos = 0f;private Vector3 startPos;private Vector3 endPos;private Vector3 direction;private float distance;// Use this for initializationvoid Start () {startPos = new Vector3 (XStartPos, YStartPos, ZStartPos);endPos = new Vector3 (XEndPos, YEndPos, ZEndPos);direction = (endPos - startPos).normalized;distance = Vector3.Distance (startPos, endPos);}// Update is called once per framevoid Update () {Debug.DrawLine (startPos, endPos, Color.red);RaycastHit hit;LayerMask l = 1 << LayerMask.NameToLayer("cube1");if (Physics.Raycast (startPos, direction, out hit, distance, l)) {Debug.Log ("yes " + hit.collider.name);} else{Debug.Log ("false");}}}
自行比对
只与cube1层碰撞
Physics.Raycast (startPos, direction, out hit, distance, l)与除cube1层以外的层碰撞
Physics.Raycast (startPos, direction, out hit, distance, ~l)
与cube2 cube3层碰撞
Physics.Raycast (startPos, direction, out hit, distance, 1 << LayerMask.NameToLayer("cube2") | 1 << LayerMask.NameToLayer("cube3"))
与除cube2 cube3层碰撞
Physics.Raycast (startPos, direction, out hit, distance,~(1 << LayerMask.NameToLayer("cube2") | 1 << LayerMask.NameToLayer("cube3")))
0 0
- Unity-Physics.Raycast
- Unity Physics.Raycast 之 layerMask
- Unity Physics.Raycast 深入理解
- Unity Manual之Physics.Raycast射线投射
- Unity Physics.Raycast的参数layermask不起作用
- unity Physics.Raycast 函数 LayerMask用法测试
- Unity--光线投射碰撞Physics.Raycast和Physics.RaycastAll
- Physics.Raycast中的层级
- 射线Physics.Raycast
- Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法
- Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法
- Unity3D Physics.Raycast 射线检测
- Physics.Raycast指定碰撞层
- Unity3D的射线检测Physics.Raycast
- unity3d Physics.Raycast和Ray(射线)
- Unity Raycast 光线投射
- Unity Vector 与 Raycast
- unity之Ray、RaycastHit 、Raycast
- nupt-acm1004
- unity这些函数你知道吗?
- 你应当知道的7个Java工具
- quick sort-- Python
- 使用skyeye运行《Linux设备驱动开发详解》的实例(一)
- Unity-Physics.Raycast
- 分治法-----快速排序算法
- ViBe背景建模算法简介和代码分析
- nupt-acm1007
- 聚集索引和非聚集索引的区别理解
- [资源下载] 谷歌工程师推荐的学习资料
- akoj-1211-统计数字
- sicily 1093
- 树莓派平台4位共阴数码管Python编程