Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。6今回はUnity内に設置した家のドアを開閉してみようと思います。通常はドアが閉まっていて通れない場所を主人公がドアを開ける事によって家の中に入れるようにします。やるべき事はドアの近くに主人公が来た事を検知し、決められたマウスボタン等を押したらドアを開くアニメーションが行われ、家の中に入る事が出来るようにします。開いている状態ならば決められたボタンを押す事によって閉めた状態にする事も出来ます。スポンサーリンク家の3Dオブジェクトを用意するまずは家のドアのゲームオブジェクトを作成します。家とドアが別になっているプレハブを用意します。今回はCubeを使って自前で適当な家を作成しました。ドアの設定ドアの設定をしていきます。Emptyで空オブジェクトを作成し、名前をBasePointOfDoorにします。次にドアのモデルをCubeを使って作成し、名前をDoorModelとします。DoorModelのScaleをXは1、Yは2、Zは0.1とします。上のような感じで作成しました。BasePointOfDoorを移動させ見た目であるDoorModelを回転させる基点となる位置に移動させます。上のようにBasePointOfDoorをDoorModelの家に取り付けてある部分に移動させます。BasePointOfDoorを移動させたら、DoorModelをBasePointOfDoorの子要素に移動させます。BasePointOfDoorが基点となって、ドアが開くアニメーションを展開させます。BasePointOfDoorはいわゆるピポッド(中軸)の位置になります。ドアの開閉アニメーションの作成ドアの設定が終わったので次はドアの開閉アニメーションを作成していきます。AnimationはAnimatorと似た名前ですが、AnimationはUnity内でアニメーションを作成する時に使います。UIのボタンの上にマウスがきた時に色を赤くする場合はタイムラインを使って色を変化させます。UIを効果的に表示したりする時にも使えます。ステータス画面UIのオンオフをUnityのAnimationで行うステータス画面UIのオンオフをUnityのAnimationで行います。UIゲームオブジェクトのオン・オフで単純に消したり登場させたり出来ますが、少しだけ演出を加えてUIを登場させてみましょう。20:01キャラクターの歩く、走るといったアニメーションはUnityのProBuilderを使うか、外部のアプリケーション(Blender等)を使って作成します。Animatorはアニメーションの切り替え等を管理する時に使用するものでアニメーションを作成する機能ではありません。こちらはアニメーションの遷移を管理する機能です。ヒエラルキーのBasePointOfDoorを選択した状態でAnimationウインドウを開き、ドアの開閉アニメーションを作成します。上のCreateを押しファイル名をOpenDoorとしてアニメーションを保存します。これでBasePointOfDoorというアニメーターコントローラーとOpenDoorというアニメーションクリップが作成されます。OpenDoorを選択しAnimationウインドウでドアが開くアニメーションを作成します。ヒエラルキーのBasePointOfDoorを選択した状態で、赤い丸の録画ボタンを押します。フレームの1:00に移動しBasePointOfDoorの回転をします。1:00でBasePointOfDoorを回転させると0:00と1:00にキーフレームが打たれます(アニメーションの変化位置)。オブジェクトを回転させる時は上と同じような選択モードを選ぶと回転出来ます。上の画像で言うと緑色の部分をドラッグするとドアが回転していきます。アニメーション部分に関してはUnityでスタートボタン、ゲーム終了ボタンのUIを作成するUnityでタイトル画面を作成し、スタートボタンを押した時にゲームシーンへ遷移させ、ゲーム終了ボタンを押した時はゲームのプラットフォームに応じて処理わけする機能を作成します。19:58の方でも扱っていますので、そちらも参考にしてください。これでドアが開くアニメーションが出来ましたので、次は閉めるアニメーションを作成します。ドアを閉めるアニメーションは開くアニメーションとまったく逆のアニメーションを作成すればいいので、OpenDoorアニメーションの最初と最後の部分(0:00フレームと1:00フレーム)をコピーします。上のように赤い四角部分を選択し、Ctrl+Cを押してキーフレームをコピーできます。Clipを選択して名前をCloseDoorとします。CloseDoorに移動しコピーしたいフレームでCtrl+Vを押します。順番としてはOpenDoorの1:00をCloseDoorの0:00に貼り付け、OpenDoorの0:00をCloseDoorの1:00に貼り付けます。Clipを選択し名前をIdleDoorとします。Idleドアは初期状態のドアのアニメーションクリップとして使いますが、特にアニメーションはさせないのでそのままにしておきます。ドアの開閉のアニメーション遷移をアニメーターコントローラーで作成ドアの開閉の状態によってアニメーションの遷移を変更します。ドアのアニメーターコントローラーはBasePointOfDoorという名前で作成されているので選択しAnimatorウインドウで状態と遷移を上のように作成します。IdleDoorはIdleDoorアニメーション、OpenDoorはOpenDoorアニメーション、CloseDoorはCloseDoorアニメーションを設定します。アニメーターコントローラーの使い方についてはUnityのアニメーションの切り替えシステムとスクリプトUnityのアニメーションの切り替えシステムであるAnimatorControllerの設定とスクリプトからアニメーションを制御していきます。17:08やUnityのアニメーターコントローラーのブレンドの使い方Unityのアニメーターコントローラーのブレンドの基本的な使い方を学習していきます。20:51を参照してください。Stateを選択します。アニメーションパラメータでbool型のOpneを作成します。Timeのチェックを外します。Timeのチェックを外しておいてください。チェックが入っているとアニメーションが永遠にループしてしまいます。主人公キャラがドアを開閉する為のスクリプトこれで開くと閉じるのアニメーションが完成したので次は実際に主人公がドアに近づきSpaceキーを押したらドアが開くようにします。主人公検知エリアを作成し、検知するスクリプトを作成します。上のようにBasePointOfDoorの子要素に空オブジェクトを作りSearchAreaとします。SearchAreaには主人公を検知する為にBoxコライダを追加します。Triggerにチェックを入れます。検知エリアは上のようになりました。大きめに作った方がいいかもしれません・・・。次にSearchAreaにドアを開閉するDoorScriptスクリプトを設定します。false;}}}主人公がSearchAreaに入っているかどうかをisNearで判断します。アニメーターは親のオブジェクトであるBasePointOfDoorにあるのでそちらから取得します。UpdateメソッドではSpaceキーが押され、かつ主人公が近づいているか(isNearがtrue)判断し、ドアの開閉をさせます。アニメーションパラメータのOpenはOpen自体の値を反転させて設定する事によって開閉を勝手に判断させます。ドアの近くにいったらSpaceキーを押して確認してみましょう。ドアが開閉するはずです。細かい部分を作り込むには近づいてSpaceキーを押すと自動ドアのように開いてしまいますが、もし細かく作るのであれば、取っ手の部分に手をつけて扉を開くアニメーションをして、ドアが開くようにしたいところです。家の外側と内側では取っ手の位置が変わりますので、Spaceキーを押したらキャラクターを所定の位置に移動させ、ドアを開きます。家の外と内で別の検知範囲を作ってそれぞれの検知範囲でドアノブを掴む前にキャラクターを移動させる位置と角度を指定してある程度移動と回転が済んだらノブを掴んでドアを開けると細かく作るのも良さそうですね(大変ですが)取っ手の部分に手の位置がくるようにIKを使うとうまく出来ます。律儀にドアノブを回して開けるのではなくけり飛ばしたり、押して中に入るという風に作るのもいいかもしれません。次回はIKを使ってキャラクターがはしごを登っているアニメーションを作成してみます。23:49Idle状態というのがどうすればいいのか分かりませんそしてアニメーションはOpenとCloseどっちも作ったのですが、MotionのところにOpenDoorの表示ができないです、Animatorで躓いてます・・・Scriptは赤い!マークがでたので一度無くしましたが、Scriptは必須ですか??初心者なもので、質問が基礎中の基礎だと思いますが申し訳ありません。19:55アニメーションパラメータはAnimatorControllerで使用するパラメータでFloat、Int、Bool、Trigger型のパラメータを作成出来ます。このAnimatorControllerのアニメーションパラメータをスクリプトから操作しアニメーションの遷移を行います。アニメーションを遷移させる時の条件ですね。アニメーションパラメータに関してはhttps://gametukurikata.com/animationanimator/changeanimationの記事を参照して頂くとわかりやすいかもしれません。この記事のAnimatorControllerの場合は↑のようにBool型のOpenという名前のアニメーションパラメータを作成します。20:10記事の説明不足で申し訳ありません。空オブジェクトであるDoorを移動させるとCube(7)も一緒に移動してしまう為、解りづらくなっています。↑のようにDummyDoor(空オブジェクト)とDoor(実際のドア)を分けて作りそのままにしておきます。DummyDoorを選択します。DummyDoorの矢印を操作してDoorの左側まで移動させます。記事の文章の中では子要素に入れてから移動していた為Doorも一緒に移動してしまって解りづらいです。その後DoorをDummyDoorの子にします。DummyDoorのCenterをPivotに変更します。↑のようにドアが開くようになります。後で記事の文章も直しておきます。ありがとうございました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。