うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Rigidbody の重心を変更する

I am fish の PV を見ていて Rigidbody の重心を変更するにはどうやるのか気になったので記事にしてみました

Rigidbody.centerOfMass

調べてみたところ、重心を変えるのは簡単そうで
Rigidbody.centerOfMass に値を入れてやるだけでいけそうです

Rigidbody-centerOfMass - Unity スクリプトリファレンス

再生中に重心を変えてみるテスト

Editor上でのみですが、centerOfMass を変更することで起き上がり小法師っぽい動きができました

f:id:hacchi_man:20200317234133g:plain

using UnityEngine;
 
[RequireComponent(typeof(Rigidbody))]
public class ChangeCenterMass : MonoBehaviour
{
     
#if UNITY_EDITOR

    private void Reset()
    {
        _rigidbody = GetComponent<Rigidbody>();
    }
 
    private void OnValidate()
    {
        _rigidbody.centerOfMass = _centerMassPosition;
        // Start時に動いてない状態だとSleepになるので解除してあげる
        if (_rigidbody.IsSleeping())
        {
            _rigidbody.WakeUp();
        }
    }
 
    private void OnDrawGizmos()
    {
        Gizmos.DrawIcon(transform.position + transform.rotation * _centerMassPosition, "center");
    }
 
#endif
 
    [SerializeField]
    private Rigidbody _rigidbody;
    
    [SerializeField]
    private Vector3 _centerMassPosition = Vector3.zero;
}