今回は、RPGなどのゲームで必要になることが多い扉を作成したいと思います。
また、タイトルにあるように押したり引いたりする扉ではなく、横にスライドさせるタイプのドアを作ります。
横にスライドするドア(扉)の作り方
Cubeオブジェクトをドアに見立てるようにするので、ドアの模様をイラスト等で作っておきます。
このテクスチャからマテリアルを作ってCubeに貼り付けるようにします。3DOの鉄人に出てくるような扉をイメージしています。
ドアオブジェクト(Cube)を作成する
適当なステージを作って四方の壁と扉をCubeで作成しましょう。
新規マテリアルを作って、先ほど用意したテクスチャを設定します。模様を付けておかないと周りの壁と区別が付かないので何かしらのテクスチャを用意しておくことをオススメします。
Box Colliderの設定
元々Box Colliderが用意されていますが、更にもう1つBox Colliderをアタッチします。
1つはすり抜け防止用のコライダなので、特に何もする必要はないです。
新しくアタッチしたコライダは、トリガーモードにします。この空間にプレイヤーが入っている時に右クリックを押すと扉がスライドするようにします。
横にスライドすると、コライダも一緒にスライドするので、コライダを長めに取っておかないとコライダから抜けたと同時に扉がスライドしなくなります。
俯瞰から見るとこんな感じです。オレンジが扉ですが、左にスライドするようにします。
この中に入っている限りは、スライドし続けるようにします。逆にコライダから抜けたら自動でドアが元の位置に締まるようにします。
扉をスライドさせるスクリプトを作成する
それでは、扉の動きを制御するスクリプト「Slidedoor」を作成します。
OnTriggerStayを使って、右クリックされたらドアを左にスライドさせています。スライドし終わった状態のポジションを予めシーンビューで移動させながら確認して、その値より小さい場合にスライドさせましょう。
OnTriggerExitで、コライダから外れますのでflagをfalseにして、元の位置に戻すようにします。
プレイヤーのみに適用したい場合は、このスクリプトのようにタグからプレイヤーを指定するようにしてください。
作成したスクリプトを扉オブジェクトにアタッチしてゲームを実行してみます。
ちょっとドアが大きすぎて分かりにくいですが、ちゃんとスライドしていますね。
スライドする途中に離れた場合もしっかりと締まるようになっています。
スライド用の扉は簡単に作れますので、初心者の方に是非オススメの手法です。