`

Unity3D总结:关于射线碰撞

 
阅读更多

 

转发自:http://blog.csdn.net/dyc333236081818/article/details/8228618

 

 

Unity3D总结:关于射线碰撞

分类: Unity3d 14866人阅读 评论(3) 收藏 举报
 

目录(?)[+]

 

方法一:Physics.Raycast 光线投射

1.static function Raycast (origin : Vector3direction : Vector3distance : float = Mathf.InfinitylayerMask : int = kDefaultRaycastLayers) : bool
一个静态的发射射线的方法,在场景中投下可与所有碰撞器碰撞的一条光线。
参数解释:
origin:射线起始点
direction:射线方向
   distance:射线长度
   layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
返回布尔类型,当光线投射与任何碰撞器交叉时为真,否则为假。
(注意:如果从一个球型体的内部到外部用光线投射,返回为假。 )这一点测试不成功!
2.static function Raycast (origin : Vector3direction : Vector3out hitInfo : RaycastHitdistance : float = Mathf.InfinitylayerMask : 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
当光线投射与任何碰撞器交叉时为真,否则为假。
使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。
 
详细解释一下: 

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 : Raydistance : 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教程:射线碰撞1

    Unity3D教程:射线碰撞1

    unity摄像机带碰撞检测

    unity摄像机带碰撞检测 摄像机碰到带碰撞物体自动拉近

    射线画线工具类

    使用鼠标发射射线,在碰撞体上画出痕迹,当画板移动时,将所有的痕迹按照统一方向移动相同的距离,对平板进行缩放,同时画出的线也要能够实现缩放。

    Unity3D/2D游戏开发从0到1.pdf

    Unity3D/2D游戏开发从0到1分实战项目篇与开发理论篇。其中,开发理论篇,从初学者容易入门的角度分为上部分(1~14章)与下部分(15~29章)。上部分内容包括游戏历史与Unity发展概述、Unity界面与3D模型入门、Unity...

    Unity3D激光灯、碰撞特效

    本文将模拟激光灯(或碰撞)...1. 从鼠标位置发射屏幕射线,检测是否与物体发生碰撞 2. 当与物体发生碰撞时,在物体表面覆盖一层激光灯(或碰撞)特效 博客见→https://zhyan8.blog.csdn.net/article/details/128809627

    Unity3D激光灯、碰撞特效(更新版)

    本资源实现了模拟激光灯(或...1. 从鼠标位置发射屏幕射线,检测是否与物体发生碰撞 2. 当与物体发生碰撞时,在物体表面覆盖一层激光灯(或碰撞)特效 博客见→https://zhyan8.blog.csdn.net/article/details/128809627

    AABB包围盒碰撞检测算法1

    1. AABB包围盒 在游戏中,为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围 2. 二维场景中的AABB碰撞检测原理 

    ViveInputUtility.unitypackage

    VR插件ViveInputUtility,用于开发vr应用

    FPS子弹发射效果

    提供子弹在射中后的几种碰撞效果,以及枪械发射子弹的射线检测

    Sensor Toolkit 1.3.2 AI

    它是Unity基本传感功能之上的一种方便的抽象,例如光线投射或触发器碰撞器,但具有许多优点。它重量轻,具有先进的功能,适用于广泛的问题。 特征: •射线投射传感器,触发对撞机传感器和球形传感器。 •用于构建...

    射线检测碰撞拾取1

    射线检测碰撞拾取1

    U3DLearn_5.3.6.zip

    U3D demo 代码案例。本案例介绍了U3D从开始到入门的全部课程。内部包含30个课程案例。代码经过真实测试,非常珍贵。适用于初学者,想入门U3D的游戏开发人员。...第 20 课 : 飞盘射击案例之界面逻辑与新手进阶总结

    unity实现鼠标拖住3D物体

    本文实例为大家分享了unity实现鼠标拖住3D物体的具体代码,供大家参考,具体内容如下 把该脚本直接挂在要拖拽的物体上即可 using System.Collections; using System.Collections.Generic; using UnityEngine; ...

    3dUI检测脚本碰撞触发功能等.rar

    这是一组能够用手柄射线来触发UI按钮高亮,或者用3D物体来触发,包括抓取功能,基于htc

    u2dcq-cq-master.zip

    unity3d制作的地图编辑器。 地图是2D的图片。不是3D模型。 制作步骤:平铺地图;画格子;碰撞&射线;导出&导入文件;

    bepuphysics1:纯C#3D实时物理仿真库。 回购仅包含1.XX版本

    它速度很快,并具有很多很酷的功能,例如约束,地形,静态和实例化网格,连续碰撞检测,自定义碰撞规则,车辆,简单的多线程,yadda yadda yadda。 您可以在此存储库中找到的东西: 物理仿真库 基于仿真的逆运动学...

    c#学习方法

    课程内容:游戏与Unity发展历史概述、 3D 模型基础、 地形编辑器、光源、音频、Unity脚本程序基础、GUI、3D模型动画的导入 与基本应用、物理学模拟(初级)、碰撞盒与触发器、协程、SendMessage数据传值技术等。...

Global site tag (gtag.js) - Google Analytics