转发自:http://blog.csdn.net/dyc333236081818/article/details/8228618
方法一:Physics.Raycast 光线投射
1.static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
一个静态的发射射线的方法,在场景中投下可与所有碰撞器碰撞的一条光线。
参数解释:
origin:射线起始点
direction:射线方向
distance:射线长度
layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
返回布尔类型,当光线投射与任何碰撞器交叉时为真,否则为假。
(注意:如果从一个球型体的内部到外部用光线投射,返回为假。 )这一点测试不成功!
2.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层内的碰撞器,其它层内碰撞器忽略。
当光线投射与任何碰撞器交叉时为真,否则为假。
使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。
如图所示,每一个物体都有一个Tag和Layer标签,tag就是一个简单的标签,可以用来区分不同的物体,LayerMask的作用是可以选择性地过滤物体,例如当投射射线时,比如camera.cullingmask和光线投射时候。
如图,可以在TagManager中编辑tag和Layer
然后设置物体的Layer层级,在摄像机中设置camera.cullingmask,可以控制摄像机的渲染层级,用在射线上,可以控制射线碰撞什么,不碰撞什么。
//Raycast hit
RaycastHit hit;
LayerMask mask = 1 << 8;
void testRay(){
if(Physics.Raycast(transform.position,Vector3.right,out hit,100, mask.value)){
Debug.DrawLine(transform.position,hit.point,Color.red,1);
}
}
上面的例子是从当前脚本所绑定的物体做标点向右发射长度100的射线,射线碰撞层级为8,其他层级忽略。
为了测试,我们在碰撞到物体后画一条红色线条,表示射线,停留一秒钟。
上面这些是射线的一些基本操作。
方法二:Physics.RaycastAll 光线投射
static function RaycastAll (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]
投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。
有一部分人说没效果,我想可能是layer值没有设置正确,layer的值应该是等于2的n次方,这个n是layer面板上的值,只要设置正确,应该是没有问题的
相关推荐
Unity3D 中射线碰撞的应用和实现原理 Unity3D 中的射线碰撞是指从一个点发出的一条光线,检测它是否与场景中的碰撞器发生碰撞。这种技术广泛应用于游戏开发、虚拟现实、计算机视觉等领域。在 Unity3D 中,射线碰撞...
在Unity3D游戏开发中,碰撞检测是至关重要的一个环节,它使得游戏对象能够感知到彼此之间的接触,从而触发各种事件,如伤害计算、交互反馈等。本教程将引导初学者掌握Unity3D中的基本碰撞检测机制。 首先,我们要...
在Unity3D中,鼠标碰撞检测与事件监听是游戏交互性的重要组成部分,尤其是在开发3D游戏时。这个教程将介绍如何通过JavaScript(JS)脚本来实现这一功能。以下是对该教程内容的详细解释: 首先,我们看到代码中的`...
`Physics.Raycast(ray, out hit)`函数就是用来进行射线检测的,如果射线命中了任何物体,它将返回true,并通过out参数`hit`提供关于碰撞的信息,包括命中物体的Transform。 最后,我们改变hit命中物体的缩放值。`...
Raycasting 是 Unity3D 中的一种检测技术,用于检测从摄像机出发的射线是否与场景中的物体相交。这个技术广泛应用于游戏开发中,例如检测用户的点击事件、检测物体的碰撞等。 在这个脚本中,我们使用了 `Physics....
总结,Unity3D的Ray射线是游戏开发中不可或缺的一部分,熟练掌握其用法和优化技巧,能显著提升交互体验和性能。通过实践项目如"RayTest",你可以更好地理解和运用这些概念,提升Unity开发能力。
* Raycast Collider:射线碰撞体 * Hinge Joint:铰链关节 * Fixed Joint:固定关节 * Spring Joint:反弹关节 * Character Joint:角色关节 * Configurable Joint:结构关节 * Constant Force:恒力 音频控件 * ...
Unity3D游戏开发之射线、角色控制器 Unity3D游戏开发中,射线和角色控制器是两个非常重要的概念。射线是一种游戏中的子弹,它在3D世界中发射的一条无终点的线,用于检测游戏对象之间的碰撞。角色控制器是 Unity3D ...
在Unity3D游戏开发中,LayerMask是一个非常重要的概念,它允许开发者精确地控制游戏对象间的交互,特别是在碰撞检测、射线投射(Raycast)、视线检查等方面。本教程将详细解释如何使用LayerMask参数,以帮助你更好地...
在Unity3D中,判断物体是否被选中的功能在游戏开发中非常重要,特别是在交互式场景或者需要用户操作的对象中。本教程将介绍一种简单而高效的方法来实现这一功能。 首先,我们要理解Unity3D中的坐标系统。Unity3D...
射线检测碰撞拾取是 Unity3D 游戏引擎中的一种常见技术,它允许开发者检测屏幕上某个点是否与游戏对象发生碰撞,并获取碰撞的详细信息。在本文中,我们将详细介绍射线检测碰撞拾取的原理、实现方法和应用场景。 ...
Unity3D 鼠标检测技术 unity 3d 鼠标检测是 Unity 3D 游戏引擎中的一种常用技术,它允许开发者检测用户的鼠标行为,例如点击、悬停、拖拽等,从而实现各种交互式的游戏机制。下面我们将详细介绍 Unity 3D 鼠标检测...
在"Unity3D地球射线"这个项目中,我们主要涉及以下几个核心知识点: 1. **Unity引擎基础**:Unity引擎提供了一个集成的开发环境,包括场景构建、资源管理、物理引擎、动画系统等。开发者通过编写C#脚本控制游戏逻辑...
unity摄像机带碰撞检测 摄像机碰到带碰撞物体自动拉近
- **RaycastCollider**:表示射线碰撞器。 - **SphereCollider**:表示球形碰撞器。 - **TerrainCollider**:表示地形碰撞器。 - **WheelCollider**:表示轮子碰撞器。 - **Joint**:表示关节。 - **CharacterJoint*...
Unity3D 利用射线点中物体移动脚本 Unity3D 是一个功能强大且流行的游戏引擎,它提供了许多强大的工具和功能来帮助开发者创建丰富的游戏体验。在这个脚本中,我们将学习如何使用 Unity3D 中的射线点技术来实现物体...
在本项目中,我们将深入探讨如何使用Unity3D V5.6.4版本构建一个针对HTC-VIVE的室内小场景。这个场景包含了虚拟现实(VR)中的常见交互功能,如物体的拾取与抛扔,以及通过射线相交进行的瞬移。这些功能对于创建沉浸式...
3. 发射射线并检测碰撞:`Physics.Raycast(ray, hit)` 是物理系统中的一个方法,它尝试沿着给定的射线进行检测,并填充`RaycastHit`结构体。`hit`包含了与射线相交的信息,如碰撞点、碰撞的游戏对象等。 4. 绘制...
在代码部分,我们使用 RaycastHit[] hits 来存储射线碰撞结果,然后遍历 hits 数组,获取每个碰撞结果的 renderer,对其应用特殊的 shader 实现半透明效果。我们使用 Shader.Find("Transparent/Diffuse") 来获取半...
Unity3D是一款强大的跨平台3D游戏开发引擎,被广泛应用于游戏开发、虚拟现实和增强现实项目。初学者想要掌握Unity3D,需要遵循一定的学习路径。以下是对标题和描述中涉及的知识点的详细说明: 1. **Unity3D基础操作...