查看: 9732|回复: 6
打印 上一主题 下一主题

unity3基础教程之组件介绍—物理引擎1

[复制链接]

25

主题

5

听众

358

积分

设计实习生

Rank: 2

纳金币
300
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2013-3-8 11:40:33 |只看该作者 |倒序浏览
上次对unity的组件进行了一个概括的介绍,今天就介绍一下unity3d中的一组重要的组件,物理引擎组件。物理引擎就是在游戏中模拟真实的物理效果。什么是物理效果呢,比如在游戏中我们击打一个物体,这个物体就会受到力的作用,当物体受到击打力之后产生的效果,就叫做物理效果。物理引擎就是实现这种效果的一个组件。如果没有这个组件,我们就必须用大量的代码来描述这种效果,现在加上这个组件之后,我们只需要设置一下参数,就可以将这些复杂的效果模拟出来,极大的减少了工作量。物理引擎中主要分为两大块,刚体和碰创器。我们今天先来看下刚体组件,刚体组件可以给物体添加一些常见的物理属性,比如物体的质量,摩擦力,碰创参数等等,这些属性可用来真实的模拟物体在3D游戏世界中的一切行为。新创建的物体时不具备刚体组件的,下面我们加来看第一步,怎么给一个物体添加刚体组件首先创建一个场景,其中包括一个地面,三个GUBE。三个GUBE分别设置不同的颜色。以便区分,如图:选中红色的cube然后在菜单栏中选择Component->hysics->Rigidbody如图:这样一个刚体组件就添加完成了,运行游戏看看有什么变化。我们发现运行游戏后红色的物体开始自由下落,其他两个没有变化。这是因为我们给红色物体添加了Rigidbody组件后,它收到了重力的影响。选中红色的物体,在Inspector视图中可以看到Rigidbody组件包含的属性,下面介绍一下这些属性的含义,Mass:质量,数值越大物体下降的速度就越快,默认值是1,设置数值是尽量不要超过10,否则物理效果就不真实了。Drage:阻力,数值越大物体速度减慢的就越快。Angular Drag:角阻力,数值越大自身旋转的速度减慢的就越快,UseGravity:是否使用重力。IsKinematic:是否受物理影响。Interpolate:设置图像差值。CollisionDetection:碰创检测。Constraints:冻结,停止某个轴向感应物理引擎的效果。  Freeze Position:冻结X,Y,Z轴的位移。Freeze Rotation:冻结X,Y,Z轴的旋转。这是对单个物体的物理效果的设置,unity3d中也可以对整个项目中的所有物理效果进行设置,设置方法,选择菜单栏中Edit->roject Settings->hysics此时即可在Inspector面板中打开“Physics Manager”(物理管理器)界面。Gravity:重力,默认情况下物体受Y轴向下的重力为9.8N。Default Material:默认物理材质。BounceThreshold:反弹值,Sleep Velocity:睡眠速度。当速度低于睡眠速度是,它保持静止。Sleep Angular Velocity:睡眠角速度。当角速度低于睡眠角速度时,自身不在旋转。Max Angular Velocity:最大角速度。Min Penetration For Penalty:用于物体与物体之间碰撞后最小穿透力。Solver Iterstion Count:迭代数量,默认值是7.Raycasts Hit Trigger:是否启动命中触发。Layer Collision Matrix:图层碰撞矩阵。当这些都按照我们的项目要求设置好之后,我们就可以给我们添加了Rigidbody的物体一个力,让它在力的作用下运动了。刚体组件可以受力的作用,比如给刚体施加一个x轴方向的力,那么该刚体绑定的物体将沿着x轴方向上向前移动,这就好比用力将物体仍出去一样,该物体将依抛物线的形式移动。Unity中的力有两种:一种普通力,需要设定方向和大小;     第二种为目标位置力,需要设定目标点的位置。下面就通过一个实例看下着两个力的区别。新建一个C#脚本,命名为AddForec并输入一下代码using UnityEngine;using System.Collections; public class AddForce : MonoBehaviour {  //添加力的物体     public GameObject addFroceobj;  //目标位置     public GameObject cubeobj;               void OnGUI()     {              if(GUILayout.Button("普通力",GUILayout.Height(50)))              {//普通力                       addFroceobj.rigidbody.AddForce(1000,0,0);              }              if(GUILayout.Button("位置力",GUILayout.Height(50)))              {          位置力                       Vector3 force=cubeobj.transform.position-addFroceobj.transform.position;                       addFroceobj.rigidbody.AddForceAtPosition(force,addFroceobj.transform.position,ForceMode.Impulse);              }     }}设置完成后,运行游戏,当点击普通力按钮是,物体将会受到x轴方向上一个大小为1000的力的作用当点击位置力是,物体将会向我们的目标物体移动,力的方式为冲击力。好了,关于刚体就介绍这么多,下一次将介绍碰撞器的用法。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2013-3-8 12:33:22 |只看该作者
Physics Manager(物理管理器)界面,这部分很少人讨论到,感谢分享。
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2013-3-8 13:28:58 |只看该作者
Gravity:重力,默认情况下物体受Y轴向下的重力为9.8N。Default Material:默认物理材质。BounceThreshold:反弹值,Sleep Velocity:睡眠速度。当速度低于睡眠速度是,它保持静止。Sleep Angular Velocity:睡眠角速度。当角速度低于睡眠角速度时,自身不在旋转。Max Angular Velocity:最大角速度。Min Penetration For Penalty:用于物体与物体之间碰撞后最小穿透力。Solver Iterstion Count:迭代数量,默认值是7.Raycasts Hit Trigger:是否启动命中触发。Layer Collision Matrix:图层碰撞矩阵。
这些很实用,谢谢了
回复

使用道具 举报

1

主题

1

听众

288

积分

设计实习生

Rank: 2

纳金币
-3
精华
0

最佳新人

地板
发表于 2013-3-8 14:36:02 |只看该作者
Physics Manager(物理管理器)界面,这部分很少人讨论到,感谢分享。
回复

使用道具 举报

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

5#
发表于 2013-3-8 16:59:54 |只看该作者
好东西好东西好东西。。。你看了么?
回复

使用道具 举报

ku 智囊团   

89

主题

2

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
25
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2013-3-8 21:49:59 |只看该作者
不错的教程,谢谢作者的努力
回复

使用道具 举报

Sora    

0

主题

1

听众

86

积分

设计初学者

Rank: 1

纳金币
4
精华
0

活跃会员 灌水之王

7#
发表于 2013-3-9 09:16:50 |只看该作者
太棒了 感謝樓主清晰的教學


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-16 04:25 , Processed in 0.100015 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部