......21と2の連立方程式を解くと最初の式が求まります。味付けとして2回目のジャンプは高さを半分にすることにします。それではPlayerControl.csを下記のように書き換えます。}}※わかり易さのためにUpdate毎・ジャンプ回数毎に計算する冗長なコードになっていますが、実際には計算値をあらかじめ定数にしておいたり、Start関数の中で計算しておいたりというやり方になるかと思います。きりもみジャンプにする。何だかふわふわしていてジャンプしている感がないので、きりもみジャンプ(アクセルジャンプ)にしてみます。ここでも1回目と2回目のジャンプを差別化して、1回目は着地までにちょうど1回転、2回目はその2倍の速さで回転させます。1回転する回転速度(角速度)は下記のように求められます。それではこの式にしたがってコードをさらに書き換えます。チェックを外しておきます。※浮動小数点の計算誤差や、ジャンプ点と着地点がの高さが違うこともあるので、着地時に回転角をリセットします。以上で二段ジャンプの実装が完成しました。ジャンプアクションゲームtowofu前回、Unityの基本的な操作をおさらいしたので、いよいよゲームっぽい動作、二段ジャンプの実装をしてみます。Player版プロジェクトは前回のものをそのまま流用します。Script]を実行します。Control”に変更しておきます。これを<Project>ウィンドウから<Hierarchy>ウィンドウのPlayerの上にドラッグ&ドロップします。Control(Script)が追加されているのを確認します。これでスクリプトを書く準備が整いました。ジャンプするコードを書く<Inspector>でPlayerControlをダブルクリックすると、Unityのスクリプトエディタが起動します。初期状態では下記のようになっているはずです。}}Unityはゲームフレーム毎に各オブジェクト(ここではPlayerControl)のUpdate関数を呼び出すので、Updateの中に任意のコードを追加することでPlayerを操ることができます。Update関数を下記のように書き換えます。}}再生ボタンを押してから、ゲーム画面でマウスをクリックするとジャンプできるようになりました。Playerが傾いてしまう問題の修正ジャンプボタンを繰り返していると、Playerが傾いてきてしまう問題があることに気づきます。これを修正するために移動・回転をロックします。<Inspector>RigidbodyのConstraintsから下記にチェックをつけます。zこれでチェックを付けた軸の運動が無視されるようになりました。用意してジャンプの回数を管理します。コードは下記のようになりました。}}ちなみにここでは、残りジャンプ回数で管理していますが、numJumpsなどジャンプした回数で管理してもいいと思います。接地する度にジャンプ回数をリセットするさて、まだ問題が残っています。今度は2回しかジャンプできなくなってしまたったので、接地する度にジャンプ回数をリセットするようにします。Tag...]を実行します。0に”Floor”と入力します。このタグを接地判定(当たり判定)の際の識別に使うことになります。つづいてコードを修正して、下記の関数を追加します。}}OnCollisionEnter関数はスクリプトに関連付けてあるオブジェクト(ここではPlayer)が他の物体と衝突すると呼ばれます。0にセットして今回の実装は終了です。ジャンプアクションゲームtowofuジャンプアクションゲーム作り2回目です。動くものを作ったほうがモチベーションがあがるので、今後何回かで二段ジャンプの実装実験をします。Unityでの基本的な作業の流れの復習をします。Unityで覚える遊びのアルゴリズム』の第0章で学んだことの抜粋・アレンジにもなっています。プロジェクトと物体のセットアップUnityを起動したら、下記の通りプロジェクトの作成および、物体のセットアップを行います。Project...]から任意のフォルダを選んで(作って)、プロジェクトに好きな名前を付けます。ここではblog-jumpGame01としました。続いてシーンにプレイヤーと床を配置します。Other][Cube]選択します。今作ったCubeが選択された状態のまま、Inspectorウィンドウから下記のように設定します。これがジャンプするプレイヤーになります。1ついでに名前を”Player”に変えておきます。HierarchyでCubeを選択してF2キー)同じく床になるCubeを作成し、下記のようにします。5このCubeは名前を”Floor”に変えておきます。Cameraを選び下記のようにします。1光源のセットアップGameウィンドウを見ると物体が暗くて見づらいのがわかります。これはシーンに光源が無いからです。Light]を作って下記のように設定します。0これでGame画面が明るくなったのを確認してください。マテリアルのセットアップ画面をみると灰色一色で味気ないので、プレイヤーと床に色を付けます。[Assets][Create][Material]から新規マテリアルを作成し、Inspectorのカラーピッカーから青っぽい色を選びます。Material”にリネームします。Material”をHierarchyウィンドウの”Player”にドラッグ&ドロップします。GameウィンドウでPlayerが青くなったのを確認してください。Material”という名前の黄色いマテリアルを作り、”Floor”を黄色にします。物理計算のセットアップここで一回ゲームシーンを再生してみます。画面上部の再生ボタンを押してみてください。・・・プレイヤーが落下すると期待した方、残念でした(笑)この段階では何も起きません。物理に関するコードを一切書いてないので当たり前といえば当たり前です。※停止するにはもう一度再生ボタンを押せばOKです。基本的な物理処理はUnityがやってくれます。SceneウィンドウかHierarchyウィンドウからPlayerを選択して、メインメニュー[Component][Physics][Rigidbody]を実行します。これでPlayerにRigidbody(剛体)の物理法則が適用されるようになりました。一度再生ボタンを押してみてください。期待通りにPlayerが落下するのが確認できたはずです。Unityで覚える遊びのアルゴリズム』という本を読んで勉強しながら小さなサンプルゲームを作っていきたいと思います。第0章と1章を読んで得た知識を元に、簡単なジャンプアクションゲームを作るところまでを最初のゴールにしたいと思います。ペンと紙を使って簡単なゲームデザインをしてみました。プレイヤーは左右に自動移動(壁にぶつかると反転)操作はジャンプのみ(2段ジャンプができる)スタートからゴールを目指す障害物、敵、コインがあるこれを実現するのに実装しなければいけない要素を挙げてみます。ジャンプの操作(ユーザー入力、物理計算)当たり判定(障害物、敵、コイン)移動・スクロール処理(カメラ処理)本当に単純なゲームですが、最初の作品としてはちょうどいいのではと思います。仕様・概念towofu意外と記述のみつからないUnityの単位(Unit)です。角度がラジアン角、つまり、π=180度です。両者が異なるのは、インスペクターでは直感的にわかり易い度数法を、スクリプトでは数学的に扱いやすいラジアン角を採用しているのだと思います。ちなみに、ラジアン角が使いやすいようにMathf.PIという定数が用意されています。仕様・概念towofuこんにちはtowofuです。はじめにこのブログのコンセプト的なものを書かせてもらいます。このブログについてタイトルの通り、日曜プログラマーがUnityでのゲーム開発を独学する中で学んだことや気づいたことをつづるブログです。100人いれば100通りの気づきがあると考えて、同じレベルにある人に少しでも参考になれば幸いです。ちなみにコードは基本的にC#で記述しています。続いて簡単に自己紹介をします。プログラミング歴15年くらい日曜プログラマーをやっている36歳です。(2013年現在)大学で情報工学を学ぶも道を外れて、今は非IT系の中小企業の社長をやっています。学生時代に初めて触ったDelphiを使い続けて、フリーソフトを公開したり、社内だけで使う小さなアプリの開発をしていましたが、社長業が忙しくしばらく離れていました。2012(C#)を使い始め、プログラミング熱が再燃。時を同じくしてUnityの存在を知り、息抜きにゲーム開発を始めました。当然ですがプロとしての開発歴はありませんが、高校生のときからBASICでミニゲームを作って遊んでいました。海外ゲーム(主にFPS)のMODを作って公開したりしていました。Wolfenstein)というFPSのMOD作りで、3Dゲームの基本的なロジックに触れていたので、Unityのドキュメントをざっと読んだ感じで共通点が多いと感じています。プロを目指しているような方の参考にはならないかもしませんが、少しでも情報共有できればと思っています。Unityで覚える遊びのアルゴリズム』を購入しました。おに」を読んだだけですが、作りながら覚えたいと思い、このブログをスタートしました。