Unityでドアを作りたい (C#でゴリゴリ)


僕はUnityのAnimationを全く使いこなせないのでC#を使います。

作りたいドア

  • ある程度ドアに近づいてFキーを押すとドアが開く。
  • もう一度Fキーを押すとドアが閉じる。
  • ドアから離れたらFキーを押しても何も反応しなくなる

1. GUIでドアを作る

Cubeをドアの形にして、ただそれを回すだけだと中心を軸に回ってしまうので、空要素の中にドアを入れて、空要素の軸をドアの端に設定して空要素を回すことでUnity特有のPivot位置変えられない問題は解決します。

2. C#で回す

今回は引き戸を作ります。

using System.Collections;
using UnityEngine;

public class Door_Controller : MonoBehaviour {
    public bool isOpened = false;
    public bool isEnter = false;

    void Update () {
        if (Input.GetKeyDown (KeyCode.F)) {
            if (isEnter && !isOpened) {
                transform.Rotate (0, 90, 0);
                isOpened = true;
            } else if (isEnter && isOpened) {
                transform.Rotate (0, -90, 0);
                isOpened = false;
            }
        }
    }

    private void OnTriggerStay (Collider collider) {
        if (collider.gameObject.tag == "Player") {
            isEnter = true;
        }
    }
    private void OnTriggerExit (Collider collider) {
        if (collider.gameObject.tag == "Player") {
            isEnter = false;
        }
    }
}

僕が書いたコードなので難しいことは何一つありません。

3. コンポーネントを追加して完成...

さっきの空要素に上のコードを追加して...

実行すればちゃんと動くはず。

実行!!

!!!!!....??

ただY軸を回転させただけなのになぜかサイズがおかしなことに...

4. 空要素を一度ルートディレクトリに戻す

半日かけて原因を追及したところ、どうやら最初にドアを作る作業をネストの中で行うと、サイズが親要素比べの値なので回転するだけでバグって変なことになるらしいです。

こうなってたのを

こうすると...

頼む...

動いた!


このネスト問題はググっても全然出て来なかったのが1番の罠だったので参考になれば幸いです。