Unity 3D 物理引擎简介

早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏。

较为常见的物理处理是在跳跃之后再次落到地上,并没有特别注重物理表现效果。

当游戏进入三维时代后,物理表现效果的技术演变开始加速,三维呈现方式拓宽了游戏的种类与可能性,越来越好的物理表现效果需求在短时间内大幅提升。

如何制作出逼真的物理互动效果,而又不需要花费大量时间去撰写物理公式,是物理引擎重点要解决的问题。

在 Unity 3D 内的 Physics Engine 引擎设计中,使用硬件加速的物理处理器 PhysX 专门负责物理方面的运算。

因此,Unity 3D 的物理引擎速度较快,还可以减轻 CPU 的负担,现在很多游戏及开发引擎都选择 Physics Engine 来处理物理部分。

在 Unity 3D 中,物理引擎是游戏设计中最为重要的步骤,主要包含刚体、碰撞、物理材质以及关节运动等。

游戏中物理引擎的作用是模拟当有外力作用到对象上时对象间的相互影响,比如赛车游戏中,驾驶员驾驶赛车和墙体发生碰撞,进而出现被反弹的效果。

物理引擎在这里用来模拟真实的碰撞后效果。通过物理引擎,实现这些物体之间相互影响的效果是相当简单的。

Unity 3D 物理材质

Unity 3D 物理材质是指物体表面材质,用于调整碰撞之后的物理效果。

Unity 3D 提供了一些物理材质资源,通过资源添加方法可以添加到当前项目中。

标准资源包提供了 5 种物理材质:

  • 弹性材质(Bouncy)。
  • 冰材质(Ice)。
  • 金属材质(Metal)。
  • 橡胶材质(Rubber)。
  • 木头材质(Wood)。

基础操作

  • 在菜单中执行 Assets → Create → Physics Material 便可将物理材质应用在需要的地方。
  • 执行创建物理材质的命令后,在对应的 Inspector 面板上的物理材质设置界面。

参考列表

选项 含义 描述
Dynamic Friction 动态摩擦力 当物体移动时的摩擦力,通常为 0〜1,值为 0 时效果像冰, 而值为 1 时物体运动将很快停止。
Static Friction 静态摩擦力 当物体在表面静止时的摩檫力,通常为 0〜1。值为 0 时效 果像冰,值为 1 时使物体移动十分困难。
Bounciness 弹力 值为 0 时不发生反弹,值为 1 时反弹不损耗任何能量。
Friction Combine Mode 摩擦力组合方式 定义两个碰撞物体的摩擦力如何相互作用。
Bounce Combine 反弹组合 定义两个相互碰撞的物体的相互反弹模式。
Friction Direction 2 摩擦力方向 2 方向分为 x 轴y 轴z 轴
Dynamic Friction 2 动态摩擦力 2 动摩擦系数,它的摩擦方向根据 Friction Direction 2 确定。
Static Friction 2 静态摩擦力 2 静摩擦系数,它的摩擦方向根据 Friction Direction 2 确定。

Unity 3D 力(AddForce)

力是在物体之间的相互作用过程中表现出来的,在物理学中力是非常重要的元素。

力的种类有很多,刚体组件因为受到力的作用而进行加速或抛物线运动。

Unity 3D 中通过 rigidbody.AddForce(x,y,z)方法添加力的作用,该方法的参数:

  • 施加力的方向。
  • 参数大小代表了力的大小。

实践案例

游戏中物体受力是对现实现象的模拟。

本案例通过对小球施加力的作用产生与发生盒子碰撞的效果:

在 Unity 3D 内创建一个简单的 3D 场景,场景内放有 1 个 Sphere,1 个 Plane 和 3 个 Cube

Plane 用于充当地面,Sphere 和 Cube 用于做力的测试。

在初始场景中 Cube 处于静止状态,通过 Sphere 瞬间施加一个力,使 Cube 运动。

实施步骤

  1. 创建游戏对象。

执行 GameObject → 3D Object → Plane 命令,此时在 Scene 视图中出现了一个平面,在右侧的 Inspector 面板中设置平面位置(0,0,-5)。

执行菜单栏中的 GameObject → 3D Object → Cube 命令,创建 3 个立方体盒子,在右侧的 Inspector 面板中分别设置 3 个立方体盒子的位置(0,0.5,-5),(0.5,1.5,-5)(0.5,2.5,-5)。

执行菜单栏中的 GameObject → 3D Object → Sphere 命令,在 Inspector 面板中设置球体位置属性(-1,0.5,-7)。

  1. 美化场景。

为球体、立方体及地面贴材质。

  1. 选中球体,执行菜单栏中的 Component → Physics → Rigidbody 命令。

为球体和立方体添加刚体属性。

  1. 创建 JavaScript 脚本,双击将其打开,输入下列代码。
  1. var addForceObj:GameObject;
  2. function Start(){
  3. addForceObj=GameObject.Find("Sphere");
  4. }
  5. function OnGUI(){
  6. if(GUILayout.Button("force", GUILayout.Height(50))) addForceObj.rigidbody.AddForce(500, 0, 1000);
  7. }
  1. 保存脚本并将其链接到球体上,进行测试。

小球会受到力的作用向前运动,并与立方体发生碰撞。

Unity 3D 物理引擎简介 || Unity 3D 物理材质|| Unity 3D 力(AddForce)相关推荐

  1. 小神之Newton物理引擎教程(一) Newton物理引擎教程

    第一节 Getting started 这个例程将告诉你如何把 newton 物理引擎和你的图形引擎结合起来. 如果你没有解过 SDK 包,先解开包. 打开 Visual studio 找到包里的 T ...

  2. java做物理引擎_不使用物理引擎,自己动手做真实物理的模拟投篮游戏

    最近打算做一个2D投篮游戏,由于对于BOX2D等物理引擎并不熟悉,加之一开始低估了游戏所需要的碰撞检测复杂度,认为仅仅涉及4面墙,篮球,篮板,篮筐,篮网的碰撞检测并不复杂.因此决定自己实现所需要的碰撞 ...

  3. python物理引擎模拟三体_一个物理引擎能不能模拟少量粒子之间的力?

    就像有人已经回答过的一样,这个问题和分子动力学(MD)以及等离子体里面静电场的模拟很像,只不过考虑的粒子间相互作用是万有引力的形式. 对于MD来说,别说几个了,就是几万个粒子都不成问题.对于等离子体来 ...

  4. algodoo 搭建二维物理引擎 写代码进行物理实验 让代码运行在可视的物理环境中

    安装algodoo(http://www.algodoo.com) 分析algodoo的存档文件 存档文件是.phn, 实质是一个压缩文件 解压后的.phn是用algodoo的语言Thyme写的. 整 ...

  5. 【Unity 3D】学习笔记三十六:物理引擎——刚体

    物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...

  6. unity 下一帧执行_Unity中的Havok Physics物理引擎

    在GDC 2019上,我们宣布将Havok Physics作为预览版资源包加入到Unity资源包管理器,这意味着所有Unity开发者都可以使用这款知名的物理引擎.在当今主机平台中,Havok Phys ...

  7. 用于 Unity 和虚幻引擎的 Asm.js 与 WebGL

    用于 Unity 和虚幻引擎的 Asm.js 与 WebGL 摘要:本文来自微软,是一个 web 开发系列文章的一部分.感谢你对实现了 SitePoint 的成员的支持. Unity 以及 Epic ...

  8. 基于Volcano 3D游戏引擎开发一个类似魔兽世界的场景

    VOLCANO MMORPG 3D游戏引擎简介 1.基本介绍:http://volcano2014.cn/ VOLCANO是一款MMORPG(大型多人在线角色扮演)3D网络游戏的开发引擎,用作支持用户 ...

  9. 物理引擎Havok教程

    物理引擎Havok教程(一) 搭建开发环境 网上关于Havok的教程实在不多,而且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望能够帮到读者.这是第一期. 一.Havok物理引擎简 ...

最新文章

  1. C# MVC中返回JSON 对象
  2. Win7安装软件,界面上中文显示乱码的解决方案
  3. golang switch fallthrough
  4. alpinestars与丹尼斯_骑行靴|丹尼斯VS A星心得分享,它和普通鞋子不同之处竟在这里!...
  5. jQuery easyUI--数据表格 datagrid 的使用
  6. 我花了一年时间来学机器学习
  7. html的各种基本标签 fylong,HTML:text标签不工作
  8. matlab-读取文件
  9. 在Delphi程序中访问报表对象
  10. mac桌面文件不见了怎么办?
  11. aspcms用mysql_关于ASPCMS标签调用的一些总结
  12. 电影《中国合伙人》中的管理知识
  13. Python爬虫基础讲解(二十七):scrapy 框架—ltem和scrapy.Request
  14. MySQL的集合运算
  15. SSS1540TypeC转3.5mm线控耳机方案(带按键)参考电路图
  16. 严蔚敏数据结构源码及习题解析
  17. Cantor表 [cantor]
  18. GSM MODEN短信发送模块详解(短信的读取、发送过程和编码、解码过程)
  19. 字符串的最大递增子串
  20. codeforces Army

热门文章

  1. 中国历史上著名的年号
  2. php extension curl,php中开启curl扩展的方法详解
  3. go panic与recover分析及错误处理
  4. c 语言信号量,C语言中的信号量
  5. 《Pytorch学习指南》- Dataset和Dataloader用法详解
  6. (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  7. ios 开发艰难之路
  8. 富士通服务器怎么修复,BIOS维修网站www.biosrepair.com-富士通E8410 BIOS刷新修复
  9. Istio 正式成为 CNCF 孵化项目,F-16 战斗机早部署上了?
  10. 平安java面试流程_程序员:平安Java岗面试耗尽了我毕生所学,想了想,还是去阿里吧...