unity3d进行碰撞检测_unity3d 碰撞器检测碰撞 - CSDN
  • 需求:当立方体Cube碰到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面。 过程: 1.搭建一个简单的场景。 在新的工程中选择File->new Scene创建新的场景。 然后在该场景中添加地板:...
    
    

    需求:当立方体Cube碰到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面。

    过程:

    1.搭建一个简单的场景。

    在新的工程中选择File->new Scene创建新的场景。

    然后在该场景中添加地板:GameObject->Create Other->Plain,

    以及正方体:GameObject->Create Other->Cube。

    给正方体添加刚体:Component->Physics->Rigidbody。

    添加后可以设置刚体属性。

    在Project处右击,选择Import Package->Physic Matarials。

    引入完成后可以直接把材质拖动到Hierachy窗口的组件中。

    bouncy:弹力十足的蹦蹦跳跳型。

    ice:像冰块一样碰撞。

    metal:像金属一样碰撞。

    rubber:像橡胶一样碰撞。

    wood:像木头一样碰撞。

    然后在“Hierarchie”面板中单击表示地板的组件,然后在Inspector中给它命名为“Ground

    然后调整他们的位置大约像这样:



    2.创建脚本文件添加监听。


    选择Assets->Create->Javascript,创建JS文件并且重命名为“Collision”

    在Project窗口中双击它,Unity会启动Monodevelop来编辑js文件。
    清除里面默认创建的代码。写上。

    [javascript] view plaincopy
    1. function OnCollisionEnter(obj:Collision)  
    2. {  
    3.     Debug.Log("Collider:"+obj.collider.name+" gameObject:"+obj.gameObject.name);  
    4. }  


    onCollisionEnter函数解释:这个函数是在被绑定的物体与其他物体发生碰撞的时候被调用。

    obj参数解释:被撞的物体参数,类型是Collision,在本例中就是“Ground”。

    携带变量gameObject,是我们碰撞的物体。

    3、将脚本文件拖到立方体上实现绑定

    在"Project"面板中选中collision.js脚本,按住鼠标左键不放,直接拖入“Hierarchie”面板中,放到Ground上,松开鼠标即完成绑定。可以在右边的Inspetor面板查看相关内容。


    现在可以运行该程序了。

    运行后在界面左下角会输出:

            Collider:Cube gameObject:Cube

    至此一个简单的碰撞检测便完成了。


    展开全文
  • Unity3D中实现简单的碰撞检测

    千次阅读 2014-02-18 14:32:43
    当立方体Cube碰撞到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面。 过程: 1、搭建一个简单的场景 a. 在新建的工程中选择File->newScene来创建新的场景。 b. 然后在该场景中添加平面...

    要求:

    当立方体Cube碰撞到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面。

    过程:

    1、搭建一个简单的场景

    a.    在新建的工程中选择File->newScene来创建新的场景。

    b.    然后在该场景中添加平面地板:GameObject->CreateOther->Plane,以及正方体:GameObject->CreateOther->Cube。

    c.     给Cube添加刚体:Component->Physics->Rigidbody。添加后可以设置刚体属性。

    d.    在Project处右击,选择Import Package->Physic Materials。引入完成后可以直接把材质拖动到Hierarchy窗口的组件中。

    有如下几种材质:

    bouncy:弹力十足的蹦蹦跳跳型。

    ice:像冰块一样碰撞。

    metal:像金属一样碰撞。

    rubber:像橡胶一样碰撞。

    wood:像木头一样碰撞。

    e.    然后在“Hierarchy”面板中单击表示地板的组件。然后在Inspector中给它命名为“Ground”。然后调整他们的位置,如下:

     

    2、创建脚本文件添加监听

    选择Assets->Create->Javascript,创建JS文件并且重命名为“CollisionTest”。

    在Project窗口中双击它,Unity会启动Monodevelop来编辑js文件。

    清除里面默认创建的代码。写上。

    // 函数OnCollisionEnter表示碰撞器碰撞检测,
    // 这个函数是在被绑定的物体与其他物体发生碰撞的时候被调用.
    function OnCollisionEnter(obj:Collision)
    {
    	Debug.Log("Collider:"+obj.collider.name+" gameObject:"+obj.gameObject.name);
    }

    onCollisionEnter函数这个函数是在被绑定的物体与其他物体发生碰撞的时候被调用。

    obj参数解释:被撞的物体参数,类型是Collision,在本例中就是“Ground”。携带变量gameObject,是我们碰撞的物体。

    注:脚本文件名不能使关键字Collision,否则类名Collision 和Unity的内置名称冲突。

    产生错误信息:Script error:OnCollisionEnter

    This message parameter has to be of type:Collision

    The message will be ignored.

     

    3、将脚本文件拖到立方体上实现绑定

    在"Project"面板中选中collisionTest.js脚本,按住鼠标左键不放,直接拖入“Hierarchy”面板中,放到Ground上,松开鼠标即完成绑定。可以在右边的Inspector面板查看相关内容。


    现在可以运行该程序了。

    运行后在界面左下角会输出:


    至此一个简单的碰撞检测便完成了。

     

    展开全文
  • Unity3D中实现物体内部的碰撞检测

    千次阅读 2020-05-04 16:58:06
    Unity3D中,我们有时候需要在一个物体内部做碰撞检测,但是我们会发现当把另外一个gameObject放入到该物体的内部(此时,已经拥有碰撞检测条件),当运行游戏时,该gameObject会移出该物体的内部。这不是我们想要...

        在Unity3D中,我们有时候需要在一个物体内部做碰撞检测,但是我们会发现当把另外一个gameObject放入到该物体的内部(此时,已经拥有碰撞检测条件),当运行游戏时,该gameObject会移出该物体的内部。这不是我们想要的结果,我们需要让它在该物体内部自由移动,当它碰到该物体时,会阻止它出去。
        自己尝试过通过脚本来改变该物体的三角面片和其法线的方向,但是依然会有穿透的现象(当然有可能是笔者的水平不高,没有写对,有通过该方法实现的高手们请告诉一下笔者)。

        解决办法: 

        将该物体在3Dmax中反转法线,具体操作,选择该物体,点击右侧面板的“修改”,打开该属性的下方有“修改器列表”,点击“编辑法线”,鼠标选择好“编辑法线”,再打开“修改器列表”,会发现里面有个“法线”选项,点击打开,选择下方的“反转法线”,然后将该模型导出,在导入到Unity3D中。

        在导入到Unity3D以后,我还遇到一些问题,再次跟大家分享一下,首先,必须将导入物体的碰撞器选择为“Mesh Collider“,将内部的gameObject加上刚体和碰撞器,此时才能实现内部的碰撞检测。如果还是有穿透现象,可以查看一下是不是你的gameObject的scale太小,而物体的scale太大,导致检测不到碰撞。

     

    方法二:

    在Unity3D中修改三角形面片的渲染顺序,然后将渲染后的mesh赋值给Mesh Collider中的sharemesh,相关代码如下:

    using System.Linq;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    // [ExecuteInEditMode]
    public class Test : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            int[] triangles = GetComponent<MeshFilter>().mesh.triangles;
          
            for (int i = 0; i < triangles.Length; i += 3)
            {
                int t = triangles[i];
                triangles[i] = triangles[i + 2];
                triangles[i + 2] = t;
            }
            GetComponent<MeshFilter>().sharedMesh.triangles = triangles;
    
            MeshCollider cc=gameObject.GetComponent<MeshCollider>();
            cc.sharedMesh=GetComponent<MeshFilter>().mesh;
    
        }
    
      
        // Update is called once per frame
        void Update()
        {
    
        }
    }
    

     

     

    展开全文
  • Unity3d开发基础篇之射线碰撞检测

    千次阅读 2019-11-20 19:28:36
    Unity3d开发基础篇之射线碰撞检测介绍射线的创建和显示 介绍        在游戏开发过程中,很多地方要用到射线碰撞检测。比如:射击游戏中子弹是否击中敌人,在RPG游戏中是否捡到装备,无人驾驶...

    介绍

           在游戏开发过程中,很多地方要用到射线碰撞检测。比如:射击游戏中子弹是否击中敌人,在RPG游戏中是否捡到装备,无人驾驶车辆的雷达检测等。在进行碰撞检测时,我们最常用的工具就是射线,Unity 3D的物理引擎也为我们提供了射线类以及相关的函数接口。本文将对射线的使用进行一个总结。
           射线是在三维世界中从一个点沿一个方向发射的一条无限长的线。在射线的轨迹上,一旦与添加了碰撞器的模型发生碰撞,将停止发射。我们可以利用射线实现子弹击中目标的检测,鼠标点击拾取物体等功能。

    射线的创建和显示

    • Ray射线类和RaycastHit射线投射碰撞信息类是两个最常用的射线工具类。
    • public Ray(Vector3 origin, Vector3 direction),创建一条射线需要指明射线的起点(origin)和射线的方向(direction)。
    • Physics.Raycast静态函数用于在场景中发射一条可以和碰撞器碰撞的射线。

    程序(Game中不可见,Scence中可见)

    • 本示例中想做车辆激光雷达的检测,所以只做了一根线先练练手。
    • transform.forward为车辆坐标系,Vector3.forward为世界坐标系。
    using UnityEngine;
    using System.Collections;
    public class lasermaster : MonoBehaviour {
        public Vector3 originPos;//射线起始位置
        public Vector3 direction;//射线方向
        public float maxDistance;//射线最大检测距离
    	// Use this for initialization
    	void Start () {
            maxDistance = 10.0f;
    	}
    	// Update is called once per frame
    	void Update () {
            originPos = transform.position + transform.up * 2.2f;//射线起始位置
            direction = transform.forward;//射线方向
            Vector3 targetPos = originPos + transform.forward * maxDistance;//射线最大检测距离处的点位置,找到起始点与终点,方便画线
            Ray ray = new Ray(originPos, direction);//创建名为ray的射线
            RaycastHit hit;//碰撞检测信息存储
            if (Physics.Raycast(ray, out hit, maxDistance)){//碰撞检测
                Debug.DrawLine(originPos,hit.point);//画线显示
    			Debug.Log (hit.collider.name);//打印检测到的碰撞体名称
            }
            else {
                Debug.DrawLine(originPos, targetPos);//没检测到碰撞体,则以最大检测距离画线
            }
    	}
    }
    
    

    程序(Game中可见,Scence中可见)

    using UnityEngine;
    using System.Collections;
    public class lasermaster : MonoBehaviour {
        public Vector3 originPos;
        public Vector3 direction;
        public float maxDistance;
    	public LineRenderer line;//添加LineRenderer组件
    	// Use this for initialization
    	void Start () {
            maxDistance = 10.0f;
    		line.enabled=true;//初始使能该组件
    		line.SetColors (Color.green,Color.green);//设置颜色
    		line.SetWidth (0.1f,0.1f);//线大小
    	}
    	// Update is called once per frame
    	void Update () {
            originPos = transform.position + transform.up * 2.2f;
            direction = transform.forward;
            Vector3 targetPos = originPos + transform.forward * maxDistance;
            Ray ray = new Ray(originPos, direction);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, maxDistance)){
    			Debug.DrawLine(originPos,hit.point);
    			line.SetPosition(0,originPos);
    			line.SetPosition(1,hit.point);
    			//Debug.Log (hit.collider.name);
            }
            else {
                Debug.DrawLine(originPos, targetPos);
    			line.SetPosition(0,originPos);
    			line.SetPosition(1,targetPos);
            }
    	}
    }
    
    展开全文
  • Unity中,对于游戏对象的碰撞检测有多种方法,今后在开发的过程中,可视情况而定,选用哪一种检测方法.1.在需要检测碰撞的物体上添加碰撞器,如:Box Collider、capsule Collider、Sphere Collider等.然后编写脚本,使用...
  • Unity3D入门(二):碰撞检测

    万次阅读 2013-10-03 02:53:58
    2.在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念: (一)碰撞器是一群组件,它包含了很多种类,...
  • Unity3d中的碰撞检测教程.最新最详细!!!!
  • [Unity3D]Unity3D 游戏开发之碰撞检测

    万次阅读 2014-06-13 21:10:37
    今天我们来一起来学习Unity3D中一个很重要的概念:碰撞。为什么说碰撞很重要呢?因为在游戏中无时无刻不充满碰撞啊,在飞行类游戏中我们需要判断炮弹是否击中了敌人,在RPG游戏中我们需要判断玩家是否对敌人造成了...
  • unity3D之简单的碰撞检测 .

    千次阅读 2018-03-10 15:26:26
    本文地址为: http://blog.csdn.net/qinyuanpei/article/details/23093665 大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章,我的博客地址为:http://blog.csdn.net/qinyuanpei。 今天我们来一起来...
  • Unity3D基础14:碰撞检测

    千次阅读 2019-02-03 18:34:21
    前文:https://blog.csdn.net/Jaihk662/article/details/86759460... ... PS:注释和讲解部分在代码中 一、碰撞检测方法 碰撞事件:当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件(目标物体必...
  • Unity 3D中的射线与碰撞检测

    万次阅读 2016-09-06 22:44:46
    进行碰撞检测时,我们最常用的工具就是射线,Unity 3D的物理引擎也为我们提供了射线类以及相关的函数接口。本文将对射线的使用进行一个总结。 射线是在三维世界中从一个点沿一个方向发射的一条无限长的线。在射线...
  • Unity3D碰撞检测

    万次阅读 2015-03-27 17:14:24
    在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体。2.接收碰撞的物体。 1. 发起碰撞物体有:Rigodbody , CharacterController . 2. 接收碰撞物体由:所有的Collider . 工作的原理...
  • Unity3d中的碰撞检测

    千次阅读 2013-12-27 15:26:14
    感谢 wyb314 的分享 1.Unity3d中的碰撞检测(一) 2.Unity3d中的碰撞检测(二) 3. Unity3d中的碰撞检测(三)
  • Unity3d碰撞检测

    2016-07-20 14:50:20
    Unity3d碰撞器 一.碰撞发生的必要条件: 1.产生碰撞效果需要具备两个因素 a.发起碰撞的物体 b.接收碰撞的物体 2发起碰撞的物体 a.Rigidbody b.CharacterController 3.接受碰撞的物体 a.所有的Collider ...
  • Unity 3D碰撞检测

    2019-12-19 10:26:15
    Unity3D中的2D之碰撞检测碰撞器与碰撞器碰撞时将调用的函数碰撞与触发器相碰撞时被调用的函数碰撞器与触发器碰撞时将调用的函数碰撞与触发器相碰撞时被调用的函数==以上两个碰撞不能将各自的函数或参数改变,否则将...
  • unity3d-碰撞检测

    2019-07-27 11:59:40
    碰撞检测 游戏中很多时候都要判断碰撞检测,比如子弹打中敌机。当碰撞后。就要发生爆炸。 或者敌机减血, 我们先看一张图片,看皮球从天空下落。与地面碰撞的过程 碰撞检测条件 游戏中两个对象发生碰撞是...
  • Unity3D 射线碰撞检测

    千次阅读 2018-12-22 20:59:19
    //鼠标位置 private Vector3 currentMousePositon; //3D射线的碰撞信息,就存储在这里 ... //射线碰撞的层标记,与哪些层进行碰撞 private int hitMask; // Use this for initialization ...
  • unity3D 碰撞检测例子代码

    千次阅读 2018-06-06 23:59:46
    using System.Collections; using System.Collections.Generic; using UnityEngine; public class Collisiotest : MonoBehaviour { private Renderer fuck; // Use this for initialization ...
  • Unity3d中物体的的碰撞检测

    千次阅读 2016-08-23 16:42:44
    unity3d中如何检测两个物体的碰撞,这是困扰我很久的问题,经过一番测试发现一种方法比较便捷!若有两个Cube,分别为Cube01和Cube02,当拖动Cube01的时候,如何才能检测碰撞到Cube02了呢?这里有几个重要的步骤...
  • [Unity 3D] Unity 3D 里的碰撞检测

    千次阅读 2013-09-14 19:43:31
    Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理。Unity官方给出了两张可发生碰撞的组合表: Collision detection occurs and messages are sent upon collision...
1 2 3 4 5 ... 20
收藏数 4,682
精华内容 1,872
关键字:

unity3d进行碰撞检测