牛顿运动定律包含以下三个定律:
牛顿第一运动定律:
孤立质点保持静止或做匀速直线运动;
用公式表达为:

 

,式中

 

为合力,

 

为速度,

 

为时间。

牛顿第二运动定律:
动量为

 

的质点,在外力

 

的作用下,其动量随时间的变化率同该质点所受的外力成正比,并与外力的方向相同;用公式表达为:

 

根据动量的定义,

 

若质点的质量不随时间变化(即

 

),则质点运动的加速度的大小同作用在该质点上的外力的大小成正比,加速度的方向和外力的方向相同;用公式表达为:

 

牛顿第三运动定律:
相互作用的两个质点之间的作用力和反作用力总是大小相等,方向相反,作用在同一条直线上;
用公式表达为:

 

(式中

 

表示质点2受到的质点1的作用力,

 

表示质点1受到的质点2的反作用力)。

功能注解:ForceMode为枚举类型,用来控制力的作用方式,有4个枚举成员,在以下举例中均设刚体质量为m=2.0f,力向量为f=(10.0f,0.0f,0.0f)。

(1)ForceMode.Force:默认方式,使用刚体的质量计算,以每帧间隔时间为单位计算动量。设FixedUpdate()的执行频率采用系统默认值(即0.02s),,则由动量定理

f•t=m•v

可得:10*0.02=2*v1,从而可得v1=0.1,即每帧刚体在X轴上值增加0.1米,从而可计算得刚体的每秒移动速度为v2=(1/0.02)*v1=5m/s。

(2)ForceMode.Acceleration:在此种作用方式下会忽略刚体的实际质量而采用默认值1.0f,时间间隔以系统帧频间隔计算(默认值为0.02s),即

f•t=1.0•v

即可得v1= f•t=10*0.02=0.2,即刚体每帧增加0.2米,从而可得刚体的每秒移动速度为v2=(1/0.02)*v1=10m/s。

(3)ForceMode.Impulse:此种方式采用瞬间力作用方式,即把t的值默认为1,不再采用系统的帧频间隔,即

f•1.0=m•v

即可得v1=f/m=10.0/2.0=5.0,即刚体每帧增加5.0米,从而可得刚体每秒的速度为v2=(1/0.02)*5.0=250m/s。

(4)ForceMode.VelocityChange:此种作用方式下将忽略刚体的实际质量,采用默认质量1.0,同时也忽略系统的实际帧频间隔,采用默认间隔1.0,即

f•1.0=1.0•v

即可得v1=f=10.0,即刚体每帧沿X轴移动距离为10米,从而可得刚体每秒的速度为v2=(1/0.02)*v1=500m/s。

实例演示:下面通过实例演示作用力方式ForceMode中各种作用力类型的使用。

[csharp]  view plain copy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ForceMode_ts : MonoBehaviour
  4. {
  5. public Rigidbody A, B, C, D;
  6. //作用力向量
  7. Vector3 forces = new Vector3(10.0f, 0.0f, 0.0f);
  8. void Start()
  9. {
  10. //初始化4个刚体的质量,使其相同
  11. A.mass = 2.0f;
  12. B.mass = 2.0f;
  13. C.mass = 2.0f;
  14. D.mass = 2.0f;
  15. //对A、B、C、D采用不同的作用力方式
  16. //注意此处只是对物体增加了1帧的作用力
  17. //如果要对刚体产生持续作用力请把以下代码放在FixedUpdate()方法中
  18. A.AddForce(forces, ForceMode.Force);
  19. B.AddForce(forces, ForceMode.Acceleration);
  20. C.AddForce(forces, ForceMode.Impulse);
  21. D.AddForce(forces, ForceMode.VelocityChange);
  22. }
  23. void FixedUpdate()
  24. {
  25. Debug.Log("ForceMode.Force作用方式下A每帧增加的速度:" + A.velocity);
  26. Debug.Log("ForceMode.Acceleration作用方式下B每帧增加的速度:" + B.velocity);
  27. Debug.Log("ForceMode.Impulse作用方式下C每帧增加的速度:" + C.velocity);
  28. Debug.Log("ForceMode.VelocityChange作用方式下D每帧增加的速度:" + D.velocity);
  29. }
  30. }

在这段代码中,首先声明了4个Rigidbody变量和一个Vector3变量,然后在Start方法中对4个刚体的质量都设为相同的值,并分别对4个刚体施加相同的力向量,但使用不同的作用方式。最后在FixedUpdate方法中分别打印出4个刚体的速度,如图10-21所示,对于输出结果的计算方法请参考功能注解部分。

本文章摘自图书《Unity API解析》,源码下载地址:http://www.ituring.com.cn/book/1474

Unity中关于作用力方式ForceMode的功能注解相关推荐

  1. 在unity中内置一个查询物流信息功能

    项目需求,在unity中内置查询物流信息的功能 需要用到查询物流 的API 在这选择的是快递100的API 首先需要申请快递100的API,官方会给你一个KEY,使用该KEY,就可以进行物流查询了 u ...

  2. Unity中游戏存档方式

    ##游戏存档 ####在Unity中游戏存档有如下四种方式: PlayerPrefs c#序列化 XML序列化 Json **原文链接:**http://blog.csdn.net/a23765363 ...

  3. Unity中摄像机围绕物体旋转的功能

    当然啦其实围绕旋转的功能本身并不难:         // 拖动摄像机围绕物体旋转         if (Input.GetMouseButton(1))         {             ...

  4. Unity中射线检测实现瞄准等功能——Physics.Raycast

    重载方法1: 1.需要传入Ray射线.  2.创建一个Ray射线并传参,注意射线可能与自己发生碰撞,从而Debug结果一直True,需要设置射线起点为自身之外. 重载方法中其他参数含义: origin ...

  5. Unity中如何写手机触屏功能

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Sce ...

  6. 【Unity】在Unity中实现扫描二维码 生成二维码功能

    在Unity中使用二维码扫描功能需要我们在Unty中导入扫描库 下载地址:https://github.com/micjahn/ZXing.Net/releases 然后编写扫描脚本: 先在脚本上添加 ...

  7. Unity中旋转方式的探究与对万向节死锁(Gimbal Lock)的理解

    Gimbal Lock Gimbal Lock的原理网上已经有很多资料,详细可以看介绍视频.视频讲到Gimbal Lock的时候提到x,y,z三个坐标轴是有从属关系(hierarchical syst ...

  8. Unity中一些小技巧

    在unity中有一些小技巧,不能像人物的移动,攻击等有好几种方式可以用来单独成章,因此就把一些内容比较少,但是比较重要的内容放在一起合成一章,内容将会持续更新 1.人物死亡动画的播放:人物死亡后,需要 ...

  9. Unity中动态修改Terrain地形

    以下类实现了在Unity中动态的修改Terrain的功能,可以在运行时升高.降低以及平滑地形高度.在Unity的Play Mode修改地形后退出Play Mode仍然会保留修改:当游戏打包成独立的可执 ...

最新文章

  1. R语言:时间序列常用函数
  2. Android开源项目:GifView——Android显示GIF动画
  3. Monotonic Renumeration
  4. eclipse工程导入Android Studio
  5. 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
  6. css控制div等比高度
  7. 技术管理中的“沟通”
  8. webConfig中System.Web 和 System.WebServer节点读取
  9. php 科学计数 位数,PHP采用超长位数字运算防止数字以科学计数法显示的实例
  10. 大数据导论章节答案_苹果手机一般能用几年 一份大数据告诉你答案
  11. 计算机真有趣作文,真有趣作文10篇
  12. python获取淘宝服务器时间的代码
  13. 服务器系统启用flash,基础设置:Windows Server 2012及2012R2 启用IE Flash
  14. RGB与CMYK色彩模式
  15. python爬虫-北京租房可视化分析
  16. 前端的3D(css3版本)--淘宝造物节3D创景的制作
  17. 解决redisson超时org.redisson.client.RedisResponseTimeoutException: Redis server response timeout
  18. 阿里灵狐插件与IDEA的集成
  19. 刀片之家礼品兑换帮助
  20. 汽车整体解剖VR教学软件QY-JP001

热门文章

  1. 用Java开发桌面应用程序(Swing开发GUI程序)
  2. maven指定版本依赖,使用exclusion
  3. Python爬取链家成都二手房源信息,异步爬虫实战项目!
  4. JVM内存不要超过32G
  5. STL萃取(Traits)机制
  6. 协议分层(OSI七层模型、TCP/IP五层模型)
  7. android这个软件在哪里设置,怎么设置安卓手机软件的默认安装位置
  8. 图形处理 OpenGL硬件加速
  9. 数字电路之时序逻辑电路
  10. 卓喻创新——设备联网与数据采集