Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

通常、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

Nicky
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away