今回作るゲーム
今回やること
①プレイヤーの移動
②プレイヤーのジャンプ
③プレイヤーからエフェクトを出す
④アイテムを配置する
⑤制限時間を作る
パッケージのダウンロード
こちら
よりパッケージをダウンロードしてプロジェクトに入れて下さい
一応元データも載っけておきます
プロジェクトの入れ方はこちら
プレイヤーの移動
今回はプレイヤーの移動をするために、CharacterControllerというものを使います
このチュートリアルでは事前につけてありますが、本当は自分でつけて、大きさの設定もします
こちらにまとめてあるので自分で一から作成したい場合はご覧ください
CharacterControllerの説明
①プレイヤーに当たり判定がつく
②階段や坂道の判定を自動で行ってくれる
③characterController.Move(Vector3型の変数)で、プレイヤーを動かす
④characterController.Groundedで、地面についているかどうかを判定できる
C#の基本的なルールと構造の説明
Unityで使うC#にはいくつかルールがあります。それは以下の通りですが、
①どのような種類のコードをどこに入力するのか
②エリアとエリアは{}でとじる
この2点をおさえておけば、Scratchと大差ありません!!
プレイヤーの移動のプログラミング
早速、Assets → ScriptsにあるPlayerスクリプトをダブルクリックして開きます
では実際に、表を参考にしながらコードを書いていきましょう。
Scratchのブロックを積む感覚で一行ずつ打っていきます。
表はこちらにあります。
以下の画像の四角で囲った部分を参考に入力の手順を見ていきましょう
①このブロックは「ずっと」ではさまれているので、
**「ゲーム開始後ずっと実行するエリア」**に入力します。
②「もし~なら」を入力していきます。表を見てみると、
となっています。条件は違うので()の中は空欄にし、
if(){}
と入力しましょう。
③条件は「Wキーが押されたら」です。
となっていて、今回はSpaceキーではなく、Wキーなので、
if(){}の()の中にInput.GetKey(KeyCode.W))をいれます。
if(Input.GetKey(KeyCode.W))){}
となります。
④実行する内容は「10歩動かす」です。
となっているので、
if(Input.GetKey(KeyCode.W))){}の{}の中に
transform.position += transform.TransformDirection(Vector3.forward * 10);をいれます。
[su_box title="if文完成形" style="glass"]if(Input.GetKey(KeyCode.W)){transform.position += transform.TransformDirection(Vector3.forward * 10);}[/su_box]
となりました。
早すぎて全部突き抜けていきましたね
なので、10の後に「 * Time.deltaTime」を追加で入力しましょう
[su_box title="Time.deltaTimeとは?" style="glass"]Scratchで言う「タイマー」のこと
これを移動の後に入力すると処理の速度が一定になり、ちょうどいい感じになる[/su_box]
同様に他のブロックも入力してみましょう。
再生ボタンを押してエラーがないか、確認しましょう。
**正解はコチラ♪入力したら答え合わせしましょう。**
![20.png](http://getabakoclub.com/wp-content/uploads/2018/10/20.png)プレイヤーの重力処理とジャンプのプログラミング
CharacterControllerを用いた場合、ジャンプと重力処理に工夫が必要になります
[su_list]
- 重力という変数はUnityで用意されているPhysics.gravity.yを使う
- 地面に触れているかどうかはcharacterController.isGroundedを使う
変数をつくる
今回はprivateのVector3型のJumpという変数を作ります
変数についてはUnityでは沢山の種類があるので、詳しくは以下を参考にして下さい
**#C#での変数の作り方**
**①図を参考にして変数を入力していきます。** ![図1.png](https://qiita-image-store.s3.amazonaws.com/0/214359/2a1c05c7-5591-b667-2d37-2a404efb9658.png) **②変数はアクセス修飾子 型 変数名;と入力します。** アクセス修飾子については以下を参考にして下さい。 ![スライド1.PNG](https://qiita-image-store.s3.amazonaws.com/0/214359/d9fe0567-53b3-1f5e-65fd-5977c016ad43.png) 型については以下を参考にして下さい。 ![スライド2.PNG](https://qiita-image-store.s3.amazonaws.com/0/214359/624cb26a-0389-5d4e-a1c3-0a4ad6062a29.png) 例えば他のオブジェクトでも使用可能なfloat型のgetabakoという変数を作る場合 public float getabako; と入力します。private Vector3 Jump;
と入力しましょう
CharacterControllerを使えるようにする
CharacterControllerを使うには
①変数の部分にprivate CharacterController characterController;を入力
②void Start(){}の中にcharacterController = GetComponent<使用したい機能>();を入力する
重力処理を行う
を入力していきます
ここからはvoid Update{}の中のプレイヤーの移動の次の行から入力しましょう
ジャンプの説明
①ジャンプはCharacterControllerを動かすので、CharacterControllerを動かす命令を入力
②CharacterControllerはcharacterController.Move (作成したVector3型の変数);で動かす
③GravityはUnityではPhysics.gravity.yと入力する
④Jumpをy軸の方向に重力の分だけ変えるので
Jump.y += Physics.gravity.y;と入力する
⑤このままだと重力がかかりすぎるので、Time.deltaTimeをかける
⑥地面に触れたときにJumpを0にするのはUnityの当たり判定が勝手にやってくれる
ジャンプを実装する
を入力していきます
ジャンプは地面についている時のみ出来るようにするので、
if(characterController.isGrounded){}を入力します
{}の中にはプレイヤーの移動の時のようにif文を作成し、スペースキーがおされたらという条件を()に入力し、{}にはJumpを3にする命令を入力します
テストプレイをしてみると…Wキーで前進、Sキーで後退、ADキーで方向転換、スペースキーでジャンプができますね
プレイヤーからエフェクトを出す
AssetStoreを開きます
Window → General → AssetStoreをおします
左上をパーティクルに変更し、検索欄にfreeと入力して虫眼鏡のボタンをおします
気に入ったパーティクルを選んで、パーティクルの名前をクリックします
どんなエフェクトを出したいか決めます
importをしたパーティクル → Scene → Sceneをダブルクリックしてシーンを開きます
再生ボタンを押してパーティクルをダブルクリックするとそのパーティクルによるのでどれがどれだか分かります
シーンを戻し、importをしたパーティクル → Prefabs → 好きなパーティクル を選んでPlayerにD&Dしましょう
左上のアイコンをおして移動させたり回転させたりしてちょうどいい位置にしましょう
アイテムを配置する
座標を調整します。xは0、yとzは取りやすい位置にするのがオススメです
いっぱい置いてステージを豪華にしましょう。取れば得点が入るように準備はしてあります
制限時間をつくる
ここはまず、自分で考えてみましょう。
※ヒント:public float TimeLimit;という変数を作ります
小数を使う場合、必ず最後にfをつける 例:0.1f
**制限時間の正解**
![38](http://getabakoclub.com/wp-content/uploads/2018/10/38.png)成功していれば、LimitTimeが0になったらスタートに戻されます
お疲れ様でした♪
プログラミングの完成プロジェクト
こちらにありますのでご自由にどうぞ♪