• Unity(第十八部)物理力学,碰撞,触发、关节和材质


    1、重力

    刚体组件

    英文中文描述
    RigidBody刚体组件physics->rigidbody ,刚体组件使一个物体有了质量,重力等。,use gravity 勾选后,物体才会受到重力,会自动下落,取消勾选就不会。,,is kinematic 表示运动学刚体,此时物体质量为0,就不会受重力的影响。
     1. 质量
     2. 阻力
     3. 角阻力
     4. 使用重力(取消后,只是不受重力影响,阻力等还是受影响的)
     5. Is Kinematic(是运动学的,勾选后,不受物理影响)
     6. 插值(一般不用修改,插值是按照上一帧做插值,外推是按照下一帧做插值)
     7. 碰撞检测(离散的节省性能非连续检测高速物体检测不到,持续和连续动态是相对的快速的物体是连续动态不动的选择持续比较好但是浪费性能,没有翻译的Co...是连续检测性能低于持续和连续高于离散)
     8. Constraints(冻结位置是值某个方向不能运动,冻结旋转同理) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、碰撞的产生和监听

    在这里插入图片描述

    英文中文描述
    Mesh Collider网格碰撞器
    Sphere Collider球体碰撞器
    1. 碰撞中心(修改了碰撞中心会发生偏移)
    2. 碰撞半径(大了会间隔碰撞,下了会穿透一部分)

    碰撞组件实际碰撞发生的是碰撞线框
    碰撞条件

    1. 至少有一个物体有刚体组件
    2. 只有物体都有碰撞器的时候才会发生碰撞
    //设置一个爆炸的预设体
    public gameObject Prefab;
    //监听发生碰撞
     private void OnCollisionEnter(Collision collision)
        { 
        	//创建一个新的爆炸物体
        	Instantiate(Prefab, transform.position, Quaternion.identity)
        	//销毁自身(火焰物体) 
    		Destroy(gameObject); 
            //碰撞到的物体信息
            Debug.Log(colision.gameObject.name);
            Debug.Log("碰撞发生!");
        }
    //持续碰撞中
     private void OnCollisionStay(Collision collision)
        { 
            Debug.Log("持续碰撞中!");
        }
    //结束碰撞
     private void OnCollisionExit(Collision collision)
        { 
            Debug.Log("结束碰撞!");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    3、触发

    触发条件 和碰撞器一样
    在这里插入图片描述

    1. 至少有一个物体有刚体组件
    2. 只有物体都有碰撞器的时候才会发生碰撞,只是其中一个碰撞器设置成触发器;一般触发器设置成看不见的

    可移动的游戏物体脚本

    	void Update()
    		{
    			//水平轴
    			float horizontal = Input.GetAxis("Horizontal");
    			//垂直轴
    			float vertical = Input.GetAxis("Vertical");
    			//创建成一个方向向量
    			Vector3 dir = new Vector3(horizontal, 0, vertical);
    			//朝向量方向移动Translate是平移,*Time.dalteTime是指每秒
    			transform.Translate(dir*Time.dalteTime);
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    触发器物体的脚本
    物体Cube (1)是墙壁,触发后执行的物体,下面代码是触发后Cube (1)墙体消失

        private void OnTriggerEnter(Collider other)
        {
            GameObject cube = GameObject.Find("Cube (1)");
            if (cube != null)
            {
    
                cube.SetActive(false);
            }
        }
        private void OnTriggerStay(Collider other)
        {
        }
        private void OnTriggerExit(Collider other)
        {
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4、物理关节(铰链,弹簧等)

    添加组件的时候搜索关节,会有很多,
    在这里插入图片描述

    铰链关节

    可以做固定轴旋转
    Anchor 是轴的位置
    轴是轴的方向
    Use Motor 自动
    在这里插入图片描述

    弹簧关节

    需要两个物体链接,在a物体加弹簧组件,把b物体拖入刚体Connected Body 就链接了,其他属性不细说了
    在这里插入图片描述

    固定关节

    和弹簧类似, 需要两个物体链接,在a物体加弹簧组件,把b物体拖入刚体Connected Body 就链接了,其他属性不细说了
    但是性质不同,就会固定在一个物体上,无法移动等;类似胶水,可以设置断开力,到达足够力时就断开链接

    其他关节暂时不讲

    5、物理材质

    不同材质有不同的效果、如冰面和土地的摩擦力不同;
    新建-》物理材质,可以设置摩擦力弹力等;
    给物体添加材质

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【MISRA C 2012】Rule 4.2 不应该使用三连符
    基于seata的分布式事务
    【Java 进阶篇】Java XML解析:从入门到精通
    使用python连接Linux服务器发送指定命令
    毕业设计整理:高校就业信息管理系统的设计与实现
    [MQ] 交换机与队列的介绍
    下载并安装DevEco Studio 3.1,初尝鸿蒙编程
    Android NDK篇-C++ 自定义命名空间与拷贝构造函数
    TableUtilCache:针对CSV表格进行的缓存
    C++ 删除链表的倒数第N个结点
  • 原文地址:https://blog.csdn.net/wangzhae/article/details/136360654