【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠

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

碰撞

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

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设定。

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠,布布扣,bubuko.com

时间: 2024-07-29 04:44:42

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠的相关文章

Unity 3D学习笔记之一 界面介绍

因为学校的课程,本学期对Unity 3D有学习的要求,在博客中记录下自己的Unity学习之路(内容摘录自书本和视频,书本为Unity 4.x从入门到精通) 一.Unity界面介绍 首先进入Unity3D,在菜单栏,File中new project,选择自己的工作路径初始时我们先默认不引入任何的package. 进入Unity的界面中,先对界面进行一下简要的介绍.区域大致依次分为Hierarchy.Scene.Inspector.Project,和上方的菜单栏(Menu bar)和工具栏(Tool

PHP学习笔记三十七【http】

<?php print_r($_SERVER); //$_SERVER预编译变量[数组]输出请求报文,注意大小写 echo "<br/>"; foreach($_SERVER as $key=>$val) { echo $val."<br/>"; } echo "当前访问的IP:".$_SERVER["REMOTE_ADDR"]; if($_SERVER["REMOTE_ADDR&

JAVA学习笔记(三十七)- 创建继承Thread的线程

创建继承Thread的线程 /* * 创建线程方式一:继承自Thread * 步骤: * 1.自定义类,继承自Thread类 * 2.重写run()方法 * 3.创建类的实例,即创建一个线程 * 4.调用线程的start()方法,作用:启动线程.调用run()方法 * * * Thread的run方法,用于存储线程要执行的代码,必须重写此方法 * 启动线程时会自动调用此方法 */ class Demo extends Thread{ @Override public void run() { f

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本 在前面提到,unity支持三种语言编写脚本:js,C#,boo.入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格.但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高.下面总结下怎么使用C#编写脚本. 继承MonoBehaviour类 在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类.为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来. 在pr

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

【Unity 3D】学习笔记三十三:游戏元素——天空盒子

天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天,让人惊叹不已.其实天空这个效果没有什么神秘的只需用到天空盒子这个组件就行,可以将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和所有的游戏元素包含其中.在unity中制作天空盒子非常方便,只需要像设置其他组件一样设置下就行了.在制作天空盒子之前,我们需要搜集一些天空的贴图,不过,unity很方便的为开发者提供了天空盒子的资源包.首先在project视图中点击鼠标右键,然后选择import package--skyboxes即可添加天空盒子的资

【Unity 3D】学习笔记三十二:游戏元素——游戏光源

游戏光源 在3D游戏中,光源是一个非常具有特色的游戏组件.用来提升游戏画面质感的.如果没有加入光源,游戏场景可能就会显得很昏暗.在unity中提供了三种不同的光源类型:点光源,聚光灯,平行光. 点光源 顾名思义,点光源是从一个点向周围散发出光的光源,就像电灯一样.创建点光源在hierarchy视图中点击create--point light: 创建完以后,点击点光源对象,在右侧inspector视图中可以看到点光源的所有信息: type:光源的类型.有point(点光源),directional

【Unity 3D】学习笔记三十一:游戏元素——地形元素

地形元素 一般情况下,为了使游戏更具有美观性,会在游戏地形上放置很多的元素,这些元素是与地形分开的.主要包括:树木,草地,自定义网格模型. 树元素 首先导入系统提供的树木标准资源包,在project视图中,点击鼠标右键,然后从菜单中选择import-----tree creator.接着在地形菜单里点击第五个按钮,添加树模型.然后点击edit trees按钮,将弹出如下列表: add tree:添加一个树模型 edit tree:编辑一个树模型 remove tree:删除树模型 点击add t

CCNA学习笔记三——STP生成树协议

广播风暴:当网络中存在物理环路,会产生广播风暴 STP协议:Spanning Tree Protocol(生成树协议) 逻辑上断开环路,防止广播风暴的产生 STP算法:(所有选择都是比小-小的当选) 选择根网桥(Root Bridge):在网络中的所有交换机中选择一台 选择依据:网桥ID(网桥优先级+MAC地址) 选择根端口(Root Ports):在所有非根网桥中选择一个 选择依据:(1)根路径成本最低 (2)直连网桥ID最小 (3)端口ID最小 选择指定端口(Designated Ports