LoginSignup
18
18

More than 5 years have passed since last update.

[Unity] オブジェクトの重心をずらす

Posted at

通常、Rigidbodyを追加したオブジェクトの重心はそのオブジェクトの中心にあります。この重心をずらすことで、例えば起き上がりこぼしのような動作をさせることができるようになります。

事前準備

  1. Sphereを新規作成してRigidbodyを追加します。可能であればMaterialを追加して少し半透明にしておくと、後々重心の位置が見やすくなります。面倒な場合はやらなくて大丈夫です。
  2. Cubeを新規作成してRigidbodyを追加、Use GravityをOFFに、is KinematicをONにします。これは重心がずれていることを確認するための床として使用しますので、ちょっと斜めにしておいてください。
  3. Sphereの下にCubeを配置し、普通に転がることを確認します。

スクリプト

事前準備で作成したSphereに以下のスクリプトを追加します。

centerOfMass.cs
using UnityEngine;
using System.Collections;

public class centerOfMass : MonoBehaviour {

    public Vector3 center = new Vector3(0f, -0.2f, 0f);

    private Rigidbody rb;

    void Start () {
        rb = GetComponent<Rigidbody> ();
        rb.centerOfMass = center;
    }

    void Update () {
        Debug.DrawLine (transform.position , transform.position + transform.rotation * center);
    }

    void OnDrawGizmos(){
        Gizmos.color = Color.red;
        Gizmos.DrawSphere (transform.position + transform.rotation * center, 0.1f);
    }

}

使い方

重心はcenterの値を調整することで変更できます。Scene画面上ではSphereの中心から重心までの線と、重心に赤い丸が表示されていると思います。表示されていない場合はGizmosの設定を確認してください。
Scene.png

18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18