障害物のあるステージをキャラを操り、最短時間で駆け抜けるゲームを作成しよう。http://joytas.net/wp-content/uploads/2017/10/UnityRun.mp4ステージの作成1.CreateEmptyからStageを原点に作成する。2.Stageの中にCubeからStageを構成するパーツを作成する。●cube●cube(1)●cube(2)●cube(3)●cube(4)●cube(5)●cube(6)3.Stageの各パーツに対して適当に表面材質を設定する。3.Stageを拡大する。transformを以下のようにする。ゴールエリアの作成4.CreateEmptyからGoalを作成する。transformは以下。5.Goalの子要素としてcube(7)を作成する。transformは以下。6.cube(7)に適当に表面材質設定する。7.CubeからGoal判定用のトリガーを作成する。Goalの子要素としてcubeを以下のtransformで配置。8.isTriggerにチェックを入れトリガーとする。8.見た目はいらないのでMeshRendererを無効にする9.こんな感じになればOKだ。Mainとしてシーンをセーブしておこう。Unityちゃんの配置10.下のリンクからUnitychanパッケージをダウンロード、インポートする。(すでに持っている人はそれを利用すればよい)http://unity-chan.com/download/download.php?id=UnityChan&v=1.2.111.modelsフォルダに入っているunitychanをシーンに配置し、Playerというタグを付与しよう。12.transformを設定する。(ステージから浮いているのはゲーム開始時に落ちてくる演出のため)AnimatorControllerの作成13.ProjectビューのcreateからAnimatorControllerを作成し、名前をCharAnimとする。13.Animatorタブを開き,createState->emptyからIdleステートを以下のように作成する。14.Unitychanにアタッチして実行してみよう。普通の立ちポーズとなれば成功だ。Motionのチェックを外す。今回はUnityちゃんの位置の移動に関してはすべてスクリプトで行う。(モーションがもっている移動情報は使わない)。15.アニメーターにWalkアクションを以下のように追加する。16.パラメータを追加する。Parameters->+->Floatと選択する。17.speedと入力する。これでspeedというパラメータを追加できた。18.IdleからWalkの遷移の条件を以下の設定しよう。19.同様にWalkからIdleの遷移を以下のように設定する。20.次にRunのモーションを追加する。21.WalkからRunの遷移を以下のように設定する。22.RunからWalkへの遷移は以下。23.さらにJumpを以下のように追加する。24.jumpというparameterを追加する。今回はjumpに関してはtriggerを使う。25.speedとjumpという2つのparameterがあることを確認する。26.AnyStateから遷移を出すとどのタイミングでもモーションを実行できる。今回はjumpをAnyStateからの遷移にしよう。以下のように設定する。ジャンプアクションに遷移するようにTransitionDurationを小さく設定する。27.ジャンプモーションを1回再生したら、Walkに繋げよう。Timeにチェックをいれると再生を終えると自動的に遷移する。CharacterControllerの付与モーションの設定ができたのでいよいよキャラクターコントローラーを付与して実際にステージ上を移動できるようにしていこう。18.UnitychanにAddComponent->PhysicsからCharacterControllerを付与する。19.CharacterControllerを以下のように設定する(登れる最大傾斜45度、登れる段差30cm、コライダーはモデルに合わせる)コントローラーの作成20.あとは、モーションの遷移とキャラクターの動きを制御するCharMove.csを作成しunitychanに付与する。Time.deltaTime;//CharacterControllerはMoveでキャラを移動させる。Time.deltaTime);//移動した後着していたらy成分を0にする。0;}}}22.Jumpをダブルクリックしてモーション編集画面に入り、Eventsを開く。23.再生しながら地面から離れるタイミングを探し、そこにEventを挿入する。今回はOnJumpStartというイベントを発生させた。(下部にあるApplyボタンを押すのを忘れない)24.後は、CharMove.csにこのイベント発生時の処理を追記するだけだ。下にメソッドを追記する。Time.deltaTime;//CharacterControllerはMoveでキャラを移動させる。Time.deltaTime);//移動した後着していたらy成分を0にする。{//足が離れたらトランスフォームを上方に移動する。jumpPower;}}カメラの設定25.以下のようなCameraController.csを作成しカメラに付与する。(player.position+Vector3.up);}}26.インスペクターからPlayerにunitychanを登録する。27.ここまでで一回実行してみよう。ステージを自由自在に駆け回れれば成功だ。UIの設置28.経過時間を表示するUIを作成しよう。今回はuGUIを使って描画していく。ヒエラルキーのcreateからUI->Textを選択する。29.Textを配置すると親要素としてCanvasが生成される。Scalerを以下のように設定する。31.Canvasの子要素Textを選択し、まずは実際の表示に近い文字列を入力する。32.画面右下に表示されるようTextのRectTransformを以下のように設定する。33.画面を見ながらfontサイズを調整する。GoalManagerの作成34.時間の表示やゴール判定などを行うGoalManager.csを以下のように作成する。{if(!isGoal){//ゴールいていなかったら時間を加算していく。Time.deltaTime;}else{//ゴールしたら2秒後にGoTopメソッドを実行する。2.0f);}//文字を更新する。(0);}}35.ヒエラルキーにあるGoalオブジェクトの子要素Cube(8)(トリガーになっているパーツ)に先程のスクリプトをアタッチし、パブリックフィールドTimeTextにCanvasオブジェクの子要素Textをアタッチする。35.BuildSettingsからMainシーンを登録する。36.実行してみよう。ゲームが始まるとカウントが始まり、ゴールすると2秒後にまたはじめから開始することがわかる。タイトルシーンの作成37.ファイルメニューから新規シーンを作成し、名前をTitleとする。Colorにして、背景色に適当な色を指定する。38.modelsフォルダに入っているunitychanをシーンに配置する。39.unitychanのtransformを以下のように設定する。40.カメラの位置を以下のように調整する。41.こんな感じになればOKだ。ControllerとしてTitleAnimを作成する。43.今回は以下のように走るだけのものにしたが、色々こってみるのもいいだろう。44.unitychanのAnimatorに登録する。Motionもチェックを外しておく)Canvasの設置45.まずはタイトルを設置しよう。ヒエラルキーにあるcreateからUI->Textを選択する。46.画面上部にセンタリングされてタイトルが表示されるように以下のように設定する。47.BestTimeを表示する。ヒエラルキーにあるCanvasを右クリックしてTextを追加する。48.画面中央やや下に表示されるよう以下のように設定する。48.TitleScore.csを以下のように作成し、BestTime用のTextにアタッチする。9999.99f).ToString("00.000");}}49.スタートボタンを配置しよう。ヒエラルキーにあるCanvasを右クリックして、Buttonを選択する。50.ボタンの位置を以下のように設定する。51.ヒエラルキーにあるButton要素の子要素になっているTextを選択して[Start]と入力する。センタリングも設定しておく。ボタンを押した時の処理52.新規スクリプトからStartButton.csを作成し、以下のように記述する。(1);}}53.ヒエラルキーにあるButtonにアタッチする。54.ヒエラルキーにあるButton要素を選択し、OnClick属性にメソッドを登録する。(この要素自体をDDで登録する)シーンの登録これでTitle,Mainという2つのシーンができた。Settingsを開く。56.2つのシーンをドラッグして登録しよう。上においたシーンからゲームがスタートするのでTitleを上に置く。右にシーン番号が付与されていることも確認する。シーンを選択してdeleteキーを押すと削除できる。57.実行してみよう。最速ラップを出すとそれがタイトル画面に表示される点などを確認しておこう。キャラ落下時の処理追加58.今のままだと、キャラがステージから落下した場合継続不可能になってしまう。Mainシーンを選択し、Cubeを作成し名前をOutAreaとする。transformは以下。59.トリガーにするためにIsTriggerにチェックをいれ、不要なMeshRendererやMeshFilterはRemoveしてしまおう。60.OutAreaController.csを以下のように作成し、OutAreaにアタッチする。(1);}}}61.実行し、コース外に飛び出してみよう。Mainシーンの最初から始まるはずだ。シーン遷移時に画面が暗くなる問題(以下のバグはUnityのバージョンアップで修正されているようだ。旧バージョンのUnityを使っていて画面遷移時に暗くなったら対応を行えば良い)62.タイトルシーンからMainシーンに遷移した際、画面が暗くなることがある。Mainシーンを選択して、WindowメニューからLightingを選択する。63.Lightmapsタブを選択し、Autoのチェックを外しBuildボタンを押す。これで遷移しても暗くなることがなくなる。コースにギミックを追加したり、モーションを増やしたりしてさらにおもしろくしてみよう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。Profileこのサイトを運営しているmjpurinです。「半年間で全くの初心者をエンジニアに育てる」という仕事を10年続けています。このサイトは講義で使った教材をまとめたものです。練習問題なども多数掲載しているので、同じようにプログラミングを学習し始めた人にも役立つと思います。Twitterもやってます。プログラミング学習に役立つ情報をツイートしてますのでこちらもよろしくおねがいします。