unity 功能_简述基于注解的装配方式的基本用法

(34) 2024-09-19 17:01:03

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第1张 

,式中

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第2张 

为合力,

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第3张 

为速度,

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第4张 

为时间。

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第5张 

的质点,在外力

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第6张 

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第7张 

根据动量的定义,

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第8张 

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第9张 

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第10张 

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第11张 

(式中

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第12张 

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

 
unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第13张 

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


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

unity 功能_简述基于注解的装配方式的基本用法 (https://mushiming.com/)  第14张
本文章摘自图书《Unity API解析》,源码下载地址:http://www.ituring.com.cn/book/1474
THE END

发表回复