打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Unity3D的Rigidbody类中useGravity、isKinematic和velocity的使用注解
userphoto

2016.12.29

关注

功能区别:

a. useGravity属性是确定刚体是否接受重力加速度的感应。

b. isKinematic属性是确定刚体是否接受动力学模拟,此影响不仅包括重力感应,还包括速度、阻力、质量等的物理模拟。

举例说明:如图10-19所示,A和B为两个刚体物体,A在B的正上方,开始时A和B的重力感应都被关闭,都处于静止状态,且接受动力学模拟即isKinematic为false。现在开启A的重力感应,则A从1处开始加速下落,当下落到2处时,关闭A的重力感应,但isKinematic依然为false(即接受动力学模拟),则A将以当前速度匀速下落。但是此时若关闭物理感应,即isKinematic=true,则A将立即停止移动。当A与B发生碰撞时,若B的重力感应依然关闭,但接受动力学模拟,即isKinematic=false,则根据动量守恒B将产生一个向下的速度。但是若关闭B物体的动力学模拟,即isKinematic=true,则B保持静止,不会因受到A的碰撞而下落。

在Unity中在刚体不与其他物体接触的情况下velocity的值只与Gravity、drag及Kinematic有关,与质量mass及物体的Scale值无关。


实例演示:下面通过实例演示useGravity、isKinematic和velocity的使用。

[csharp] view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class GraAndKin_ts : MonoBehaviour  
  5. {  
  6.     public Rigidbody A, B;  
  7.     string str_AG = "";  
  8.     string str_AK = "";  
  9.     string str_BK = "";  
  10.     Vector3 v1, v2;  
  11.     void Start()  
  12.     {  
  13.         //为了更好的演示,将重力加速度降低  
  14.         Physics.gravity = new Vector3(0.0f,-0.5f,0.0f);  
  15.         A.useGravity = false;  
  16.         B.useGravity = false;  
  17.         A.isKinematic = false;  
  18.         B.isKinematic = false;  
  19.         str_AG = "A开启重力感应";  
  20.         str_AK = "A关闭物理感应";  
  21.         str_BK = "B关闭物理感应";  
  22.         v1 = A.position;  
  23.         v2 = B.position;  
  24.     }  
  25.   
  26.     void OnGUI()  
  27.     {  
  28.         if (GUI.Button(new Rect(10.0f, 10.0f, 200.0f, 45.0f), str_AG))  
  29.         {  
  30.             if (A.useGravity)  
  31.             {  
  32.                 A.useGravity = false;  
  33.                 str_AG = "A开启重力感应";  
  34.             }  
  35.             else  
  36.             {  
  37.                 A.useGravity = true;  
  38.                 str_AG = "A关闭重力感应";  
  39.             }  
  40.         }  
  41.         if (GUI.Button(new Rect(10.0f, 60.0f, 200.0f, 45.0f), str_AK))  
  42.         {  
  43.             if (A.isKinematic)  
  44.             {  
  45.                 A.isKinematic = false;  
  46.                 str_AK = "A关闭物理感应";  
  47.             }  
  48.             else  
  49.             {  
  50.                 A.isKinematic = true;  
  51.                 str_AK = "A开启物理感应";  
  52.             }  
  53.         }  
  54.         if (GUI.Button(new Rect(10.0f, 110.0f, 200.0f, 45.0f), str_BK))  
  55.         {  
  56.             if (B.isKinematic)  
  57.             {  
  58.                 B.isKinematic = false;  
  59.                 str_BK = "B关闭物理感应";  
  60.             }  
  61.             else  
  62.             {  
  63.                 B.isKinematic = true;  
  64.                 str_BK = "B开启物理感应";  
  65.             }  
  66.         }  
  67.         if (GUI.Button(new Rect(10.0f, 160.0f, 200.0f, 45.0f), "重置"))  
  68.         {  
  69.             A.position = v1;  
  70.             A.rotation = Quaternion.identity;  
  71.             B.position = v2;  
  72.             B.rotation = Quaternion.identity;  
  73.         }  
  74.     }  
  75. }  

在这段代码中,首先声明了两个Rigidbody类变量A和B,用于指向场景中物体,然后在Start方法中对A、B的useGravity、isKinematic及position进行初始化,最后在OnGUI方法中定义了4个Button用于演示useGravity、isKinematic和velocity的关系。程序运行情况请参考功能说明部分,请读者自行运行程序,查看不同状态下变量A、B所指向物体的运动状态。


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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
游戏开发中的物理介绍
【Unity 3D】学习笔记四十一:关节
Unity Ragdoll 实现死亡效果 心得+坑点总结
Velocity怎么截取字符串的问题
21张违背常态的物理图,可能牛顿在世也无解吧
初二物理《重力》同步练习卷
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服