Unity学习笔记(刚体-物理-碰撞器-触发器)


1.Rigidbody-刚体

image-20220402141828697

1.Property

Property:Function:
Mass物体质量,默认质量(单位)
Drag物体运动受到的空气阻力
Angular Drag物体旋转时受到的空气阻尼引起的转矩
Use Gravity是否受到重力影响
Is Kinematic如果符合动力学,则物体不受物理引擎作用,只能通过调整改变,但仍能与其他刚体作用,一般用于测试。
 [SerializeField] private float _forceAmount = 100f;
//[SerializeField]为序列化字段,可以将私有字段显示在unity引擎进行调试

    private Rigidbody _rigidbody;
    // Start is called before the first frame update
    void Start()
    {
        _rigidbody = GetComponent<Rigidbody>();
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("Fire1"))//点击一次鼠标左键执行一次
        {
            _rigidbody.AddForce(Vector3.up * _forceAmount);
        }   
    }

2.物理材质

image-20220402142609501

1.Property:

Property:Function:
Dynamic Friction动摩擦力,数值通常在0~1之间,为0则表示光滑平面
Static Friction静摩擦力,通常在0~1之间
Bounciness弹性指数,0~1,0则没有弹力,1为完全弹性,不损失能量
Friction Combine当两个碰撞体发生碰撞如何计算摩擦力
- Average选取两者平均值
- Minimum选取两者最小值
- Maximum选取两者最大值
- Multiply选取两者相乘
Bounce Combine等同于Friction Combine

2.创建过程

3. Collision

image-20220402170827038

3.1 Edit Collider

可以修改碰撞体大小,只要接触碰撞体设定范围,就会触发OncollisionEnter()函数

OncollisionEnter()函数为当物体发生碰撞后激发的函数。Material为碰撞体物理材质,需要自己进行创建添加。

private Renderer _renderer;
    void Awake()
    {
        //获得组件渲染器对象
        _renderer = GetComponent<Renderer>();
    }
    private void OnCollisionEnter(Collision collision)
    {
        Color randomlySelectedColor=GetRandomColor();
        _renderer.material.color=randomlySelectedColor;
    }
 
    private Color GetRandomColor()
    {
        return new Color(
            r:UnityEngine.Random.Range(0f,1f),
            g:UnityEngine.Random.Range(0f,1f),
            b:UnityEngine.Random.Range(0f,1f));
    }
 private void OnCollisionEnter(Collision collision)
    {

        Debug.Log("Impacted at" +collision.contacts[0].point);
        float rayDrawDistance = 5f;
        Debug.DrawRay(
            collision.contacts[0].point,
            collision.contacts[0].normal*rayDrawDistance,//接触点法线方向
            Color.red,
            1f);
    }

4. Trigger

OnTriggerEnter()函数为当物体触发到Trigger物体后激发函数。

    void Awake()
    {
        //获得组件渲染器对象
        _renderer = GetComponent<Renderer>();
    }
private void OnTriggerEnter(Collider other)
    {
        Color randomlySelectedColor = GetRandomColorWithAlpha();
        _renderer.material.color = randomlySelectedColor;
    }
    private Color GetRandomColorWithAlpha()
    {
        return new Color(
            r: UnityEngine.Random.Range(0f, 1f),
            g: UnityEngine.Random.Range(0f, 1f),
            b: UnityEngine.Random.Range(0f, 1f),
            a:0.25f);
    }

下图为设置Trigger后的变化情况,Trigger物体不影响其他物体的运动。

image-20220402171400355

image-20220402171425532

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miracle Fan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值