zoukankan      html  css  js  c++  java
  • 【Unity3D入门教程】物理引擎之碰撞解析

    Unity3D内置物理引擎,可以模拟物理效果。典型的一个物理效果就是碰撞。本文将会针对最简单的案例讲述Unity3D的碰撞规律。

     

    1 碰撞规律

    首先在场景中创建一个Sphere和一个Cube,它们都是默认带有碰撞器的。





    如果要让物体受到物理控制,需要给它添加一个刚体组件。这时,物体将会受到重力影响,并且能够与其他物体碰撞。

     

    • 碰撞器的分类

    碰撞器按外形可以分为BoxCollider、SphereCollider、CapsuleCollider、WheelCollider、MeshCollider等。这里我们以Box和Sphere 的Collider作为实例来展开叙述。

     

    • 刚体

    只带有碰撞器而没有刚体的物体,自己是不能响应物体行为的。这类成为静态碰撞器,适合作为墙体、地面和其他不动的物体。当给物体添加了刚体后,物体就可以接受力和力矩,产生接近真实物体的表现。需要注意的是,如果要让两个物体发生碰撞,至少有一个物体要带有刚体组件。


    刚体组件中的Mass是质量,Drag和Angular Drag是阻力和角阻力,这些数值都是可以影响碰撞效果的。UseGravity是重力开关,打开就会响应重力,关闭则不响应。IsKinematic是运动学开关,如果启用,物体将不受物理引擎驱动,只能通过Transform来操作。下面的CollisionDetection默认是Discrete(不连续检测)。最下面是Constraints,可以设置限制刚体的运动。

     

    2 碰撞实例

    为了检测碰撞和物体开关,需要把下面的collider.cs脚本绑定到Cube上。

    using UnityEngine;
    using System.Collections;
    
    public class collider : MonoBehaviour {
    
    	// Use this for initialization
    	void Start () {
    	
    	}
    	
    	// Update is called once per frame
    	void Update () {
    	
    	}
        //碰撞检测
        void OnCollisionEnter(Collision colliderInfo)
        {
            Debug.Log(colliderInfo.collider.name+"撞过来了!");
        }
        void OnCollisionExit(Collision colliderInfo)
        {
            Debug.Log(colliderInfo.collider.name + "结束碰撞!");
        }
        void OnCollisionStay(Collision colliderInfo)
        {
            Debug.Log(colliderInfo.collider.name + "处于碰撞中!");
        }
        //物理开关
        void OnTriggerEnter(Collider collider)
        {
            Debug.Log("Trigger: "+collider.name +"进入!");
        }
        void OnTriggerExit(Collider collider)
        {
            Debug.Log("Trigger: " + collider.name + "离开!");
        }
        void OnTriggerStay(Collider collider)
        {
            Debug.Log("Trigger: " + collider.name + "触发中!");
        }
    
    }


    对于已经创建好的Cube和Sphere,它们自身就是带有碰撞器的,我们给这两个物体加上刚体。点击对象的AddComponent,在下拉的菜单搜索中输入Rigidbody,选择并添加即可,刚体参数可以保持默认。


    (1)测试碰撞

    不勾选Cube的BoxCollider的IsTrigger,运行游戏。用鼠标拖到Sphere去碰撞Cube,可以看到如下信息:


    (2)测试物理开关

    勾选Cube的BoxCollider的IsTrigger,运行游戏。用鼠标拖到Sphere去碰撞Cube,可以看到如下信息:



  • 相关阅读:
    sql增删改查-转载
    委托和事件 链接
    三层架构-转载
    ToList()方法
    Invoke--转载
    C# 6.0新特性---语法糖
    索引器
    HBase学习总结(1)
    教程-关于Owner和Parent的区别
    问题-在TreeView使用时,发现选中的树节点会闪烁或消失
  • 原文地址:https://www.cnblogs.com/yanhuiqingkong/p/7770065.html
Copyright © 2011-2022 走看看