• 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的对象上

      

    (如需转载学习,请标明出处)
  • 相关阅读:
    如何解决Ora-04031错误(转)
    ORA-00838: Specified value of MEMORY_TARGET is too small(转)
    OAuth和OpenID的区别(转)
    Timer Swing
    warning: shared library text segment is not shareable
    Java正則表達式入门
    Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
    LinearGradient线性渲染
    Andriod中绘(画)图----Canvas的使用具体解释
    Android dumpsys命令的使用
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9743829.html
Copyright © 2020-2023  润新知