Unity3D【碰撞与射线】

原创 2015年01月23日 21:22:06

忽略碰撞


     有些时候我们不想让指定的两对象发生碰撞,即要忽略他们的碰撞。


    忽略碰撞情况下的限制:


1. 保存场景时忽略状态不能保存。

2. 只能在活动的对象物体上应用。如果用在失效的物体上,必须要调用一次physics.IgnoreCollision.


例如:定义一个球ball,当鼠标点击时,小球向前移动穿过墙


public GameObject ball;

void Start () {

     Physics.IgnoreCollision(ball.collider,this.collider);

                  }

void Update () {

        if(Input.GetButtonDown("Fire1")){

          ball.rigidbody.AddForce(0,0,100);

                     }

             }


射线


    射线是3D世界中一个点向一个方向发射无终点的线。在unity3d中我们发射的射线一旦与其他的碰撞器发生碰撞,射线将停止发射。在游戏制作过程中我们可以通过判断射线是否发生了碰撞,并且可以判断射线和谁发生了碰撞。应用范围非常广泛,如射击类游戏中用它来判断是否射中目标。

    我们要想在游戏中发射一条射线,必须要有两个元素,一个起始点,一个方向。

    Ray.origin:射线起点    Ray.direction:射线的方向

    创建一条射线的方法Ray (origin : Vector3, direction : Vector3)

    Origin是射线的起点,direction是射线的方向。


首先在场景中创建一个CUBE,创建一个c#文件,并输入如下代码:


 void Update () 

       {

          //定义一条射线,起点为Vector3.zero终点为物体坐标

          Ray ray=new Ray(Vector3.zero,transform.position);

          //定义一个光线投射碰撞

          RaycastHit hit;

          //发射射线长度为100

          Physics.Raycast(ray,out hit,100);

       //Scene中生成这条射线,起点为射线的起点,终点为射线与物体的碰撞点

          Debug.DrawLine(ray.origin,hit.point);   

       }


Debug.DrawLine()方法只在Scene视图中才可以看到


下面利用射线技术做的一个种豆游戏


当我们用鼠标点击地面,在我们点击地面的位置生成Prefab的实例,就像种豆子一样。

 


代码如下:


void Update () {

        if(Input.GetMouseButtonDown(0)){    //当鼠标点击时发生

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//获取鼠标的位置

            RaycastHit hit;//定义一个射线

        if (Physics.Raycast(ray, out hit, 100)) {   //判断是否发生碰撞

            Instantiate(cube,hit.point,transform.rotation);//克隆一个方块并旋转

                 }

             }

         }

更多精彩请点击 http://www.gopedu.com/

unity中射线碰撞检测总结

这阵子通过看视频,看书对unity中射线碰撞检测,有了一些了解,这里我把它总结一下写下来,希望能帮助到你们,也希望通过各位大神来指正不足之处;     射线碰撞检测,就是由某一物体发射出一道射线,射线...
  • CJB_King
  • CJB_King
  • 2016年08月02日 09:05
  • 10274

Unity 3D中的射线与碰撞检测

在我们的游戏开发过程中,有一个很重要的工作就是进行碰撞检测。例如在射击游戏中子弹是否击中敌人,在RPG游戏中是否捡到装备等等。在进行碰撞检测时,我们最常用的工具就是射线,Unity 3D的物理引擎也为...
  • u014805066
  • u014805066
  • 2016年09月06日 22:44
  • 11475

[Unity小技巧] 使用射线Raycast判断某个方向是否有碰撞体

我们做游戏开发的时候,可能会遇到类似这样的一个问题:一个物体加上了Rigidbody刚体受重力下降,在它下降的时候我们需要提前知道它的下方是否有碰撞体能接住它。类似下面的...
  • qq_33000225
  • qq_33000225
  • 2017年02月15日 22:59
  • 4255

Unity碰撞(Collider)的深入理解

转载自:http://www.cnblogs.com/88999660/p/3371184.html 转载需注明出处 1.碰撞主要有三个函数,void OnCollisionStay,void O...
  • f786587718
  • f786587718
  • 2015年10月17日 21:36
  • 3809

Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法

Unity 使用物理射线(Physics.Raycast),实现扇形(Fan-Shaped)区域碰撞检测。 参考之前的制作简单UI: Unity 有限状态机(Finite State Machin...
  • l773575310
  • l773575310
  • 2017年06月14日 18:27
  • 2674

Unity3D总结:关于射线碰撞

方法一:Physics.Raycast 光线投射 1.static function Raycast (origin : Vector3, direction : Vector3, distance ...
  • dyc333236081818
  • dyc333236081818
  • 2012年11月27日 10:32
  • 57731

Unity3D检测(碰撞、射线)

好久没写帖子了,最近忙于个人私事与工事间的徘徊,so...,在此感谢大家一直以来对我的关注与支持,谢谢!!! 好了,就不多废话了,直接进入今天主题。 最近总有人问我unity3d中碰撞检测到底怎么...
  • u010744192
  • u010744192
  • 2014年11月26日 09:10
  • 1830

unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子

unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西,总结了些东西放上来,一来做个笔记,二来和大家分享分享!嘿嘿...
  • Highning0007
  • Highning0007
  • 2014年07月20日 13:47
  • 23514

unity3d学习笔记(十三)--如何拦截射线碰撞界面的消息

这一篇是纯技术讨论,看过我前面文章的童鞋应该清楚,我的奔跑是靠鼠标响应的,鼠标点到哪就跑到哪,后来又有了界面,麻烦就来了,我的界面竟然能点穿,我不希望点界面的时候还能点到界面后面的地面上,角色傻不拉几...
  • lzhq1982
  • lzhq1982
  • 2013年10月18日 16:52
  • 8632

Unity 碰撞检测、射线

欢迎来到U3D社区:                 在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我...
  • qq_23313757
  • qq_23313757
  • 2014年12月22日 18:18
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D【碰撞与射线】
举报原因:
原因补充:

(最多只允许输入30个字)