当前位置: 首页 > news >正文

Unity3D_(物理引擎)Rigidbody组件

 

  

  Rigidbody组件刚体(Rigidbody)是Unity物理引擎中的重要组件,一个游戏对象添加了刚体组件以后就开始接受物理力学的影响了,比如重力、空气摩擦力、碰撞产生的推力

 

Learn

  相同高度不同重量物体下落时间

    相同重量不同空气阻力对物体的影响

  碰撞相关的三个事件

  触发器相关的三个事件

  

 

  创建一个场景Gary,新建四个Cube,一个作为地面,另外三个作为测试方块

  给Cube添加材质球(材质Material)  

  三个测试方块后改名  A、B、C

 

 

 

  给Cube添加Rigidbody组件

  

 

  Mass:质量

  Drag:空气阻力

  Angular Drag:角阻力

  Use Gravity:使用重力

  Is Kinematic:是否使用动力学

  Interpolate:插值

  Collision Detection:碰撞检测

  Constraints:约束

 

 

相同高度不同重量物体下落时间

 

  修改A、B、C物体Mass的值

  A:Mass修改为10

  B:Mass修改为50

  C:Mass修改为100

 

 

  结论:不同质量的物体从同一高度自由落体至地面,到达地面的时间相同,最后的速度相同,但动能不相同,

 

 

 

相同重量不同空气阻力对物体的影响

 

  保持A、B、C物体Mass的值相同(10),修改其Drag(空气阻力)的值

  A:Drag修改为1

  B:Drag修改为10

  C:Drag修改为50

 

 

  结论:相同重量物体,空气阻力越小物体下落快,当物体重量和空气阻力相同时物体会保持下落,当物体重量小于空气阻力时,物体保持不动

  (当我把B物体空气阻力改为45时B物体还会保持下落,改为48时,B物体只会下滑0.0033高度,C物体空气阻力为50时在空中y轴值保持不变)

  

 

给A物体添加一个RigidTest.cs脚本

 

  AddForce()施加力

  AddTorque()施加力矩

  AddForceAtPosition()在指定位置施加力

  //AddExplosionForce()施加爆炸力

 

(测试时建议将A物体重力设置低一些,按1给物体施加力,按2给物体施加力矩,按3在指定位置给物体施加力)

 

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

public class RightText : MonoBehaviour {

    private Rigidbody r;
    // Use this for initialization
    void Start()
    {
        r = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Alpha1))
        {
            //施加力
            r.AddForce(new Vector3(0f, 10f, 0f));
        }
        if (Input.GetKey(KeyCode.Alpha2))
        {
            //施加力矩
            r.AddTorque(new Vector3(0f, 10f, 0f));
        }
        if (Input.GetKey(KeyCode.Alpha3))
        {
            //在指定位置施加力
            r.AddForceAtPosition(new Vector3(0f, 10f, 0f), new Vector3(0.5f, 0.5f, 0.5f));
        }
    }
}
RightText.cs

 

 

Collider的主要功能是进行碰撞检测 使用刚体时,一般都会和Collider共同使用

 

碰撞事件

  发生碰撞的两个物体必须都带有Collider

  发生碰撞的两个物体至少有一个带有刚体

  发生碰撞的两个物体必须有相对运动

 

碰撞相关的三个事件

 

   碰撞开始时调用一次void OnCollisionEnter(Collision other)

   碰撞持续发生时调用void OnCollisionStay(Collision other)

   碰撞结束时调用void OnCollisionExit(Collision other)

 

(A物体与地面进行了碰撞检测)

 

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

public class ColliderText : MonoBehaviour {

    void OnCollisionEnter(Collision other)
    {
        print("碰撞开始!!!");
    }

    void OnCollisionStay(Collision other)
    {
        print("碰撞中!!!");
    }

    void OnCollisionExit(Collision other)
    {
        print("开始结束!!!");
    }
}
ColliderText.cs

 

 

触发器相关的三个事件 

 

  刚刚进入触发范围时调用一次void OnTriggerEnter(Collider other)

  持续在触发范围内会一直调用void OnTriggerStay(Collider other)

   离开触发范围时会调用一次void OnTriggerExit(Collider other)

 

  勾选A物体Box Collider下的Is Trigger属性(无视碰撞触发函数)

  

(因为A物体不会和地面进行碰撞,所以就直接穿过去了)

 

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

public class ColliderText : MonoBehaviour {

    //刚刚进入触发范围时调用一次_
    void OnTriggerEnter(Collider other)
    {
        print("触发开始!!!");
    }

    //持续在触发范围内会一直调用_
    void OnTriggerStay(Collider other)
    {
        print("触发器检测中!!!");
    }

    //离开触发范围时会调用一次
    void OnTriggerExit(Collider other)
    {
        print("触发结束!!!");
    }
}
ColliderText.cs

 

 

物理材质

 

  物理材质能够给物体添加摩擦力和弹力

  物理材质只能添加到带有Collider的对象上

 

  

 

转载于:https://www.cnblogs.com/1138720556Gary/p/9743829.html

相关文章:

  • 四则运算1.0
  • Visiual Studio2012 CLR20r3问题
  • linux 中对 mysql 数据库的基本命令
  • 前端页面添加表格,实现每一行能上下移动,还可修改数据库排序字段值
  • 数字转换(求树的直径)
  • 初识 vue —— 最简单的前后端交互示例
  • [orleans2.1]这是你没玩过的船新版本
  • 微信小程序picker下拉绑定数据
  • UUID、GUID、SID、SUSID
  • gradle 的jar下载到哪里了
  • [luogu4162 SCOI2009] 最长距离(最短路)
  • 034 Maven中的dependencyManagement和dependencies区别
  • 心,不能装太多;人,不能想太多
  • 深入理解spark-taskScheduler,schedulerBackend源码分析
  • 神经网络之调参
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Android框架之Volley
  • Android组件 - 收藏集 - 掘金
  • Computed property XXX was assigned to but it has no setter
  • CSS 三角实现
  • exports和module.exports
  • Linux下的乱码问题
  • redis学习笔记(三):列表、集合、有序集合
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 初识MongoDB分片
  • 免费小说阅读小程序
  • 七牛云假注销小指南
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​一些不规范的GTID使用场景
  • (12)目标检测_SSD基于pytorch搭建代码
  • (ibm)Java 语言的 XPath API
  • (动态规划)5. 最长回文子串 java解决
  • (三)终结任务
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (实战篇)如何缓存数据
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Scala的“=”符号简介
  • (转)可以带来幸福的一本书
  • (转载)Google Chrome调试JS
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET 解决重复提交问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET企业级应用架构设计系列之技术选型
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @Autowired多个相同类型bean装配问题
  • @EventListener注解使用说明
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [CQOI 2010]扑克牌
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [LeetCode] 197. 上升的温度
  • [LeetCode]-225. 用队列实现栈-232. 用栈实现队列