射线碰撞:Unity3D总结

方法一: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参数

origin

The starting point of the ray in world coordinates.

在世界坐标,射线的起始点。

direction

The direction of the ray.

射线的方向。

distance

The length of the ray

射线的长度。

hitInfo

If true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).

如果返回true,hitInfo将包含碰到器碰撞的更多信息。

layerMask

A Layer mask that is used to selectively ignore colliders when casting a ray.

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

Returns

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

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/

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

射线碰撞-unity3d学习总结

详细解释一下: LayerMask 层蒙版

如图所示,每一个物体都有一个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[]

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

作者:csdn博客 unity3d学习者

时间: 2024-10-12 19:25:33

射线碰撞:Unity3D总结的相关文章

动画播放以及射线查询的Unity3d脚本

using UnityEngine; using System.Collections; public class SampleMoveScriptC : MonoBehaviour { public float speed = 3.0f; public float rotatationSpeed = 200.0f; private float curSpeed = 0.0f; private GameObject obj = null; private Vector3 point; // Us

[Unity3d]水果忍者-切水果功能

继续今天的切水果游戏之切苹果的实现,主要功能就是,有一个苹果放在场景中,然后通过手滑过苹果,就将苹果切成两半,从原理上分析,就是制作两张贴图,分别表示分开的两半苹果,然后在当前位置出现,并且给这两半苹果加上刚体属性,然后分别给这两半苹果加上一个相反的力使其自由落体! 效果图                                                                                                                

《Unity 4 3D开发实战详解》一6.5 交通工具

6.5 交通工具 Unity 4 3D开发实战详解 在前面的内容中,讲解了Unity开发平台下物理引擎的相关内容,正是这一完善的物理引擎,使得模拟现实变得极其简单.在本小节中,将通过一个交通工具的小案例来模拟现实生活中汽车的各种运动.下面将对交通工具案例的开发步骤进行介绍. 1.案例的构思 在开发案例之前,这里先介绍一下本案例的设计思路. (1)首先要明确案例要达到的目的.本案例是为了演示使用Unity物理引擎模拟现实生活中交通工具的运动特性. (2)接着要明确案例场景的设计.在本案例中,使用了

《Unity 游戏案例开发大全》一6.5 游戏主场景

6.5 游戏主场景 Unity 游戏案例开发大全 前面的小节详细介绍了游戏主菜单场景,本小节将介绍游戏主场景的脚本开发,游戏主场景是本案例最重要的场景,也是游戏的关键场景.本游戏共有四个关卡,对应四个不同的场景,其开发方法基本相同,这里以关卡一为例进行详解. 6.5.1 场景搭建 首先进行游戏界面场景的搭建,这里步骤比较繁琐,包括模型的摆放.组件的添加.参数的设置等.通过此小节的开发,读者可以熟练掌握这些知识,同时也会积累一些开发技巧和细节.接下来对游戏场景的搭建进行详细的介绍. (1)首先新建

《Unity 游戏案例开发大全》一6.4 主菜单场景

6.4 主菜单场景 Unity 游戏案例开发大全前一小节介绍了游戏的整体架构,从本节开始将介绍本案例各个场景的开发,首先介绍本案例的主菜单场景,该场景在游戏开始时呈现,控制所有界面之间的跳转.本节将在前面介绍的基础上对此场景的开发细节进行进一步的介绍. 6.4.1 场景搭建 场景搭建主要是针对游戏地图.灯光.天空盒等环境因素的设置.通过本小节学习,读者将会了解到如何构建出一个基本的游戏世界,接下来将具体介绍场景的搭建步骤. (1)新建一个场景作为主菜单场景,具体步骤为"File"→&q

Unity3D游戏开发,游戏体碰撞问题,请教!

问题描述 Unity3D游戏开发,游戏体碰撞问题,请教! 初学unity3d,遇到个问题,想请教一下大家! 买了一本unity3d游戏开发的书,实现一个小项目实例,太空射击游戏,现在我把敌机,主角和子弹都放在了场景上了,主角能发射子弹: 也按照书上给敌机.子弹.主角添加了相关组件,运行时碰撞没有效果.请指点! 解决方案 它们是在同一个场景层还是同一个,如果是不同的场景层应该没有效果吧: 你再仔细检查一下代码: 如果回答对你有帮助,请采纳 解决方案二: http://wenku.baidu.com

unity3d教程:为精灵绑定碰撞区的方法

选择精灵集,然后点击"Open Editor-" 你可以设置各种参数,诸如:锚点.切割和填充算法.你可以同时选中多个精灵来编辑. 改变碰撞区类型为"Box Trimmed"(盒子边框型),这将在贴图四周创建边框.如想更多的控制其位置,请选择"Box Custom",便可拖拽边框. 点击Commit. 每次做了改变都请点击Commit,以便重构图集和顶点数据. 关闭精灵集编辑窗口,此时场景中的精灵已经绑定了碰撞区.用该精灵创建和即将用该精灵创建的实

unity3d教程:AssetBundle

此代码是最终调试后可行代码,通过下面的制作过程和代码来逐步解释. 脚本: Script_Cube_Trigger_Terrain1.cs Script_Cube_Trigger_Terrain3.cs Objects: 1.人物资源,需要有CharactorController,不然无法做object的Trigger碰撞响应. 2.两个Cube,在其Inspector面板中,将BoxCollider下的IsTrigger属性勾选上,调整该Cube的形状,作为加载地形的触发点,我把它们放在地形交界

Javascript如何判断碰撞

/** 判断是否碰撞 * @param obj 原对象 * @param dobj 目标对象 */ function impact(obj, dobj) { var o = { x: getDefaultStyle(obj, 'left'), y: getDefaultStyle(obj, 'top'), w: getDefaultStyle(obj, 'width'), h: getDefaultStyle(obj, 'height') } var d = { x: getDefaultSty