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

 

 

 

         放寒假了很长时间,博主也休息了好久,现在整理好心情和大家一起出发,有些期待看到有人会评论,因为我的一点点记录能够提供一些价值,真的是一件很美好的事情啦~嘻嘻,进入正文~~

 

 

 

        经常会遇到很多力方面的问题,那么就讨论一下这方面吧。

 

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 print?

 

 

 

using UnityEngine; 

 

 

 

using System.Collections; 

 

 

 

 

 

 

 

public class ForceMode_ts : MonoBehaviour 

 

 

 

 

 

 

    publicRigidbody A, B, C, D; 

 

 

 

    //作用力向量  

 

 

 

    Vector3forces = new Vector3(10.0f,0.0f, 0.0f); 

 

 

 

 

 

 

 

    voidStart() 

 

 

 

    { 

 

 

 

        //初始化4个刚体的质量,使其相同  

 

 

 

       A.mass = 2.0f; 

 

 

 

       B.mass = 2.0f; 

 

 

 

       C.mass = 2.0f; 

 

 

 

       D.mass = 2.0f; 

 

 

 

        //对A、B、C、D采用不同的作用力方式  

 

 

 

        //注意此处只是对物体增加了1帧的作用力  

 

 

 

        //如果要对刚体产生持续作用力请把以下代码放在FixedUpdate()方法中  

 

 

 

       A.AddForce(forces, ForceMode.Force); 

 

 

 

        B.AddForce(forces,ForceMode.Acceleration); 

 

 

 

       C.AddForce(forces, ForceMode.Impulse); 

 

 

 

       D.AddForce(forces, ForceMode.VelocityChange); 

 

 

 

    } 

 

 

 

 

 

 

 

    voidFixedUpdate() 

 

 

 

    { 

 

 

 

       Debug.Log("ForceMode.Force作用方式下A每帧增加的速度:" + A.velocity); 

 

 

 

       Debug.Log("ForceMode.Acceleration作用方式下B每帧增加的速度:" + B.velocity); 

 

 

 

       Debug.Log("ForceMode.Impulse作用方式下C每帧增加的速度:" + C.velocity); 

 

 

 

       Debug.Log("ForceMode.VelocityChange作用方式下D每帧增加的速度:" + D.velocity); 

 

 

 

    } 

 

 

 

 

 

 

using UnityEngine;

 

 

 

using System.Collections;

 

 

 

 

 

 

 

public class ForceMode_ts : MonoBehaviour

 

 

 

{

 

 

 

    publicRigidbody A, B, C, D;

 

 

 

    //作用力向量

 

 

 

    Vector3forces = new Vector3(10.0f,0.0f, 0.0f);

 

 

 

 

 

 

 

    voidStart()

 

 

 

    {

 

 

 

        //初始化4个刚体的质量,使其相同

 

 

 

       A.mass = 2.0f;

 

 

 

       B.mass = 2.0f;

 

 

 

       C.mass = 2.0f;

 

 

 

       D.mass = 2.0f;

 

 

 

        //对A、B、C、D采用不同的作用力方式

 

 

 

        //注意此处只是对物体增加了1帧的作用力

 

 

 

        //如果要对刚体产生持续作用力请把以下代码放在FixedUpdate()方法中

 

 

 

        A.AddForce(forces,ForceMode.Force);

 

 

 

       B.AddForce(forces, ForceMode.Acceleration);

 

 

 

       C.AddForce(forces, ForceMode.Impulse);

 

 

 

       D.AddForce(forces, ForceMode.VelocityChange);

 

 

 

    }

 

 

 

 

 

 

 

    voidFixedUpdate()

 

 

 

    {

 

 

 

        Debug.Log("ForceMode.Force作用方式下A每帧增加的速度:" +A.velocity);

 

 

 

       Debug.Log("ForceMode.Acceleration作用方式下B每帧增加的速度:" + B.velocity);

 

 

 

       Debug.Log("ForceMode.Impulse作用方式下C每帧增加的速度:" + C.velocity);

 

 

 

       Debug.Log("ForceMode.VelocityChange作用方式下D每帧增加的速度:" + D.velocity);

 

 

 

    }

 

 

 

}

 

 

 

 

 

在这段代码中,首先声明了4个Rigidbody变量和一个Vector3变量,然后在Start方法中对4个刚体的质量都设为相同的值,并分别对4个刚体施加相同的力向量,但使用不同的作用方式。最后在FixedUpdate方法中分别打印出4个刚体的速度

 



 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值