Unity3D基础11:Rigidbody物理类组件

 

前文:https://blog.csdn.net/Jaihk662/article/details/86750789(Transform组件)

https://blog.csdn.net/Jaihk662/article/details/86754532(利用Transform组件移动物体)

PS:注释和讲解部分在代码中

一、Rigidbody组件

刚体(Rigidbody)就是具有物理属性的物体,拥有重力,会自由落体等

选中游戏物体→Component→Physics→Rigidbody,该物体就会成为刚体,可以像现实中的物体一样运动

刚体组件基础属性:

  1. Mass:设置物体的质量,也就是重量(单位KG)
  2. Drag:空气阻力(0表示无阻力,值很大时物体会停止运动)
  3. Angular Drag:角阻力,受到扭曲力时的空气阻力(0表示无阻力,值很大时物体会停止运动)
  4. Use Gravity:是否使用重力,如果不使用重力,物体则不会自由落体

角阻力大小演示(下面方块空气阻力为10,上面方块无空气阻力):

前者上面方块角阻力为500,后者上面方块角阻力为0.05

 

二、利用Rigidbody组件移动物体

注:物体向前移动不但可以通过 Vector3.forward,还可以直接定义向量,也就是 new Vector3(0,0,1),其它同理

例如 new Vector3(1,0,1) 就是往右前方移动

myTransform.Translate(new Vector3(0,0,1), Space.Self);

利用Transform组件移动物体虽然会受到重力影响,但是物体可以随意穿模,如下

使用刚体移动物体相关方法:

myRigidbody.MovePosition(当前位置+方向),获取当前位置使用 Transform.Position

使用刚体移动物体,物体是默认根据世界坐标系的方向移动的,并且会触发物理相关的事件,例如与场景中的其它物体发生碰撞

例子代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Text1: MonoBehaviour
{
    //因为Start()只会在开始游戏时被执行一次,所以一般都用来初始化
    private Transform myTransform;      //实例化Transform对象
    private Rigidbody myRigidbody;
    void Start()
    {
        Debug.Log("Start");     //输出调试
        myTransform = gameObject.GetComponent<Transform>();        //获取相应对象的引用
        myRigidbody = gameObject.GetComponent<Rigidbody>();
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Z) || Input.GetKey(KeyCode.Z))     //Z+WASD控制上下左右移动
        {
            if (Input.GetKeyDown(KeyCode.W))
            {
                Debug.Log("W键按下,向前移动");
                myTransform.Translate(new Vector3(0,0,1), Space.Self);          //向前移动的另一种表述形式,下同
            }
            if (Input.GetKeyDown(KeyCode.A))
            {
                Debug.Log("A键按下,向左移动");
                myTransform.Translate(new Vector3(-1,0,0), Space.Self);
            }
            if (Input.GetKeyDown(KeyCode.S))
            {
                Debug.Log("S键按下,向后移动");
                myTransform.Translate(new Vector3(0,0,-1), Space.Self);
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                Debug.Log("D键按下,向右移动");
                myTransform.Translate(new Vector3(1,0,0), Space.Self);
            }
        }
        else                    //如果不压住Z键(注意这个是无视大小写的)
        {
            if (Input.GetKeyDown(KeyCode.W))
            {
                Debug.Log("刚体向前移动");
                myRigidbody.MovePosition(myTransform.position + (new Vector3(0, 0, 1)));
            }
            if (Input.GetKeyDown(KeyCode.A))
            {
                Debug.Log("刚体向左移动");
                myRigidbody.MovePosition(myTransform.position + (new Vector3(-1, 0, 0)));
            }
            if (Input.GetKeyDown(KeyCode.S))
            {
                Debug.Log("刚体向后移动");
                myRigidbody.MovePosition(myTransform.position + (new Vector3(0, 0, -1)));
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                Debug.Log("刚体向右移动");
                myRigidbody.MovePosition(myTransform.position + (new Vector3(1, 0, 0)));
            }
        }
    }
}

不过测试到这里,你会发现好像使用刚体移动物体仍然会穿模,和使用变换组件没有任何区别?

因为这取决于碰撞体组件的设置,所以具体实现要看后面的文章了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值