在关于Unity中的刚体和碰撞器的相关用法(一)的基础上

有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机plane

碰撞检测

一、当两个物体发生碰撞时,也就是两个节点的碰撞器相互碰撞的时候,就会去调用节点上所关联的所有脚本对象的固定的函数

  1: OnCollisionEnter: 开始碰撞;
  2: OnCollisionExit: 碰撞离开;
  3: OnCollisionStay 碰撞持续;

ball脚本里面的内容:

using UnityEngine;
using System.Collections; public class ball : MonoBehaviour {
Rigidbody body;
// Use this for initialization
void Start () {
this.body = this.GetComponent<Rigidbody>();
} // 碰撞开始
void OnCollisionEnter(Collision c) {
Debug.Log("OnCollisionEnter " + c.gameObject.name);//打印出的名字是plane,不是ball,指的是撞到的对方是谁,参数是Collision类型的
} // 碰撞持续
void OnCollisionStay(Collision c) {
Debug.Log("OnCollisionStay " + c.gameObject.name);
}
// 碰撞结束
void OnCollisionExit(Collision c) {
Debug.Log("OnCollisionExit " + c.gameObject.name);
} // Update is called once per frame
void Update () { }
}

二、触发器的碰撞类型

  在Collider组件里面勾选is trigger就是开启触发器模式,这时候这个挂载Collider的节点的形状就变成透明的了,不会阻碍其他节点穿过它,但是依然在接触的时候调用触发函数。

  触发器的碰撞检测是不一样的,两个物体之间没有任何物理碰撞效果,但是只要有接触,就会调用触发器函数。

  我们给ball和plane之间创建一个trigger空节点,添加一个Box Collider的碰撞器,勾选is trigger,再写一个脚本trigger挂载在trigger下面,球的材质弹性设置为Maxinum类型

  这样每次ball穿过trigger节点掉到Plane上,再弹起来又穿过trigger都会去调用相关的触发器函数。

  1: OnTriggerEnter: 开始碰撞到触发器;
  2: OnTriggerExit: 与触发器结束碰撞;
  3: OnTriggerStay; 与触发器碰撞持续;

trigger脚本里面的内容:

using UnityEngine;
using System.Collections; public class trigger : MonoBehaviour { // Use this for initialization
void Start () { } // 开始和触发器碰撞
void OnTriggerEnter(Collider c) {
Debug.Log("OnTriggerEnter " + c.gameObject.name);//打印出的是ball的名字,不是plane,指的是撞到的对方是谁,参数是Collider类型的
} // 结束和触发器碰撞
void OnTriggerExit(Collider c) {
Debug.Log("OnTriggerExit " + c.gameObject.name);
} // 持续和触发器碰撞
void OnTriggerStay(Collider c) {
Debug.Log("OnTriggerStay " + c.gameObject.name);
} // Update is called once per frame
void Update () { }
}

三、配置物理管理器的碰撞关系

Edit-->Project Settings-->Physics

面板里面的参数都可以在代码中通过一个Physics类型的对象来调用,Physics这个类型非常重要,就是通过它可以在代码中设置Edit-->Project Settings-->Physics面板里面的内容:

1: Physics.gravity: 物理世界重力加速度;
2: bounceThreshold: 是否反弹的阈值
3: sleepThreshold: 低于这个能量,物体休眠
4: queriesHitTriggers: 射线碰撞检测是否检测trigger;
5: solverIterationCount / solverVelocityIterationCount;
6: defaultContactOffset 默认接触的偏差;
5: IgnoreCollision(Collider collider1, Collider collider2, bool ignore)配置忽略两个指定的碰撞器碰撞;
6: IgnoreLayerCollision(int layer1, int layer2, bool ignore) 配置两个层的物体是否碰撞;参数里面的Int类型的变量指的就是在右上角Add layer的时候,每个层前面对应的数值

创建一个game_root节点,下面挂载一个game_scene脚本

game_scene脚本的内容如下:

using UnityEngine;
using System.Collections; public class game_scene : MonoBehaviour {
public Collider ball;
public Collider trigger;
// Use this for initialization
void Start () {
Debug.Log(Physics.gravity);
Debug.Log(Physics.bounceThreshold); // Physics.IgnoreLayerCollision(8, 9);
Physics.IgnoreCollision(this.ball, this.trigger);//ball和trigger不发生碰撞检测,什么都不发生
} // Update is called once per frame
void Update () { }
}

关于Unity中的刚体和碰撞器的相关用法(二)的更多相关文章

  1. 关于Unity中的刚体和碰撞器的相关用法(一)

    1.创建一个3D工程 2.构造项目文件目录 3.保存场景为game_scene到文件夹scenes中 4.创建一个Plane平面类型的GameObject节点和一个Sphere球体类型的GameObj ...

  2. 关于Unity中的Mesh Collider碰撞器

    原来我的场景中有一个平面Plane带Mesh Collider碰撞器组件,一个主角Hero带有一个Box Collider碰撞器和有重力的Rigidbody刚体组件,主角可以放在平面上. 在导入场景后 ...

  3. Unity中的定时器与延时器

    JavaScript中的定时器与延时器,分别是 setInterval.setTimeout,对应的清理函数是:clearInterval.clearTimeout. 而在Unity中,则分别是:In ...

  4. 关于Unity中使用刚体制作简单跑酷案例

    一.步骤 1.创建一个Canvas 2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率960X640 3.创建一个Image的UI节点作为Canvas的子 ...

  5. 【转】Unity中的协同程序-使用Promise进行封装(二)

    原文:http://gad.qq.com/program/translateview/7170970 译者:王磊(未来的未来)    审校:崔国军(飞扬971)   在上一篇文章中,我们的注意力主要是 ...

  6. Java中unicode增补字符(辅助平面)相关用法简介

    转载自 http://blog.csdn.net/gjb724332682/article/details/51324036 前言 Java从1.5版本开始,加入了unicode辅助平面的支持.相关的 ...

  7. 碰撞器与触发器[Unity]

    请看原帖,移步:Unity3d碰撞检测中碰撞器与触发器的区别 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加 ...

  8. [Unity2D]Box Collider 2D盒子碰撞器

    盒子碰撞器(BoxCollider2D)是Unity2D中常用的碰撞器,所有为碰撞器,顾名思义,就是用于检测物体之间的碰撞情况的,Unity2D里面除了BoxCollider2D碰撞器之外还集成Box ...

  9. Unity3D笔记 英保通十 射线碰撞器检测

    射线碰撞检测可以用来检测方向和距离: 通过Physics.RayCast光线投射来实现:常用于射击利用发射的射线来判断.还有对战中刀剑交战中.. 一.要涉及到RayCast和RayCastHit 1. ...

随机推荐

  1. sql索引唯一

    alter table et_tb_1111 add constraint tbunique unique (itemid) alter table 表名 add constraint 约束名 uni ...

  2. webp技术探索

    不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得 ...

  3. Android性能优化系列之apk瘦身

    Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...

  4. HTML5学习笔记(二十三):DOM应用之动态加载脚本

    同步加载和执行JS的情况 在HTML页面的</body>表情之前添加的所有<script>标签,无论是直接嵌入JS代码还是引入外部js代码都是同步执行的,这里的同步执行指的是在 ...

  5. 乐观锁的一种实现方式—CAS

    线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同 ...

  6. sqlserver 时间字符串转化为时间格式

    ),),),),,)) select substring('D:\\files,3,len('D:\\files)-2) --去掉前两位路径D:

  7. Linux下字符集的安装

    目前环境中经常会遇到编码转化的问题,UTF-8跟GB2312也有问题.只得在Linux上安装GB2312(在Linux操作系统上又称zh_CN.GB2312)的字符集,具体请看下文. Linux下几个 ...

  8. IBM ILOG JViews Charts 产品及功能介绍

    摘抄连接:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1004_lidb_ilogjchart/ IBM I ...

  9. 【Linux/CentOS】上手常见问题笔记

    场景:Web项目服务端想要运行在Linux系统上,还要编写一些自动化发布代码的Shell脚本,需要学习使用Linux系统. 环境:Windows系统下用虚拟机VMware Workstation Pr ...

  10. C#生成DLL,在Unity中导入/调用DLL

    网上搜了一些DLL的创建.编写.使用的学习资料,感觉比较的凌乱.或是复杂抽象,或是关键地方一笔带过,不是很适合萌新.于是决定还是图文记录一下该过程,尽量精简而又明确. 学习资料: https://do ...