碰撞与休眠

上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性。一旦刚体開始运动,那么系统方法便会监视刚体的碰撞状态。一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束。关于休眠能够理解成为让游戏对象变成精巧状态。假设给某个游戏对象休眠的状态,那么这个物体将立刻精巧,不再运动。

碰撞

首先学习下碰撞几个重要的方法:

OnCollisionEnter(  ):刚体開始接触的时候,马上调用。

OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞击结束。

OnCollisionExit(  ):碰撞停止时,调用。

给代码(下面代码仅仅是整个样例中的一部分,假设须要重建项目,我写完整个unity入门就上传全部的代码):

using UnityEngine;
using System.Collections; public class CollisionTest : MonoBehaviour
{ //碰撞显示信息
string show = null;
void Start ()
{
//默认显示内容
show = "未发生碰撞";
} //进入碰撞
void OnCollisionEnter(Collision collision)
{
show = "进入碰撞,碰撞名称:" + collision.gameObject.name;
}
//碰撞中
void OnCollisionStay(Collision collision)
{
show = "碰撞中,碰撞名称:" + collision.gameObject.name;
}
//碰撞结束
void OnCollisionExit(Collision collision)
{
show = "碰撞结束,碰撞名称:" + collision.gameObject.name;
//碰撞结束后让物体休眠
collision.gameObject.rigidbody.Sleep(); } void OnGUI()
{
//将碰撞信息显示出来
GUI.Label(new Rect(100,0,300,40),show);
}
}

碰撞器

游戏对象假设须要感应碰撞,那么就必须为其加入碰撞器。默认情况下,创建游戏对象时,会自己主动将碰撞器组件加入当中,而碰撞器组件决定了模型碰撞的方式。unity提供了5种碰撞器,各自是:box collider(盒子碰撞器),sphere collider(球体碰撞器),capsule collider(胶囊碰撞器),mesh collider(网格碰撞器),wheel collider(车轮碰撞器)。当中box collider(盒子碰撞器)适用与立方体对象之间的碰撞,sphere collider(球体碰撞器)适用于球体对象之间,capsule
collider(胶囊碰撞器)适用于胶囊体对象之间,mesh collider(网格碰撞器)适用于自己定义模型自身网格决定,wheel collider(车轮碰撞器)适用于车轮与地面或者其它对象之间的碰撞。

加入碰撞器

在导航菜单条里选择component——physics然后选择种类。

物理材质

物理材质可设定物体的表面材质,不同的表面材质可影响碰撞后的物理效果。物理材质可加入不论什么碰撞器中。首先得导入物理材质的资源,能够选择导入系统提供的标准包。import——physic materials。在标准包中提供5种经常使用的材质:bouncy(弹性),ice(冰),metal(金属),rubber(橡胶),wood(木质)

如图,给球加入了弹性材质,那个球在下落的时候接触地面变会弹回去。

除了unity标准资源包里的5个物理材质,也能够自行创建物理材质。在project视图中点击create——physic material就可以。例如以下图:

dynamic friction:动态摩擦,取值在0到1之间,0最小,1最大。

static friction:静态摩擦,取值在0到1之间,0最小,1最大。

bounciness:碰撞反弹系数,取值在0到1之间,0最小,1最大。

friction combine:普通碰撞后的摩擦模式。

bounce combine:反弹碰撞后的摩擦模式。

friction direction 2:摩擦方向,方向分X轴,Y轴,Z轴。

dynamic friction 2:动摩擦系数,摩擦方向依据friction direction 2设定。

static friction 2:静摩擦系数,摩擦方向依据friction direction 2设定。

最新文章

  1. SSH Junit4测试
  2. Symbol ES6 新增的一种值类型数据,表示一种绝不重复的值
  3. informatica通用命令方式启动workflow
  4. NYOJ之括号配对问题
  5. 安卓开发, 遇到WebView不能加载静态网页, WebView显示 "net::ERR_PROXY_CONNECTON_FAILED"
  6. 通过组策略实现IE自动以当前域账号登录某站点
  7. 将本地项目上传到Github
  8. 细雨学习笔记:JMeter 的主要测试组件总结
  9. html标签引入外部html
  10. struts1.3整合spring2.5(将spring委托给struts方式)
  11. 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事
  12. 小步快跑的公司可以最简化操作直接通过log4net将日志写入ElasticSearch
  13. swust oj 1051
  14. 20164301 Exp4 恶意代码分析
  15. vscode eslint配置vue遇到的问题
  16. 使用svn导入项目
  17. eclipse 设置Java快捷键补全
  18. DS图遍历--深度优先搜索
  19. UVAlive3523_Knights of the Round Table
  20. linux 网络测试命令 长期更新

热门文章

  1. Windows Azure 安全最佳实践 - 第 1 部分:深度解析挑战防御对策
  2. Swift - 使用atlas图集实现动画效果(SpriteKit游戏开发)
  3. Eclipse设置Android Logcat输出字体大小
  4. 挑战一下吧!C#测试开发工程师英语面试题
  5. Stripe
  6. 让delphi程序不受WINDOWS日期格式的影响(使用SetLocaleInfo函数和Application.UpdateFormatSettings)
  7. C++建立动态二维数组
  8. 《Windows核心编程》第一讲 对程序错误的处理
  9. Ubuntu 安装和配置minicom
  10. 通过OpenSSL解码X509证书文件