今回作るゲーム
移動やジャンプをして、ゴールを目指すシンプルなアクションゲームです
今回やること
- プレイヤーの移動
- プレイヤーのジャンプ
- アイテムを配置する
- 制限時間を作る
パッケージのダウンロード
こちらよりパッケージをダウンロードしてプロジェクトに入れて下さい
一応元データも載せておきます
プロジェクトの入れ方はこちら
プレイヤーの移動の作成
プレイヤーの移動のプログラミング
C#の基本的なルールと構造の説明
C#にはいくつかルールがあります。
②何をどこに入力するのかエリアを理解する
③エリアとエリアは{}でとじる
④行の最後は;をつける
以上の点をしっかりおさえておきましょう!
スクリプトの作成
Create → C#Scriptをおします
スクリプトの名前はPlayerにします
プレイヤーの移動は
WS:前進後退、AD:方向転換、スペース:ジャンプにします
早速、Assets → ScriptsにあるPlayerスクリプトをダブルクリックして開きます
コードの入力
では実際に、コードを書いていきましょう。
Scratchで表すと、
というコードを打っていきます
表はこちらにあります。
ゲーム開始後ずっと実行するエリア」に入力します。
1 |
if(getabako == 1){} |
1 |
if(){} |
1 |
Input.GetKey(KeyCode.W) |
1 |
if(Input.GetKey(KeyCode.W)){} |
1 |
transform.position += transform.TransformDirection(Vector3.forward * 10); |
if(Input.GetKey(KeyCode.W))){}の{}の中に、
transform.position += transform.TransformDirection(Vector3.forward * 10);をいれます。
1 2 3 |
if(Input.GetKey(KeyCode.W)){ transform.position += transform.TransformDirection(Vector3.forward * 10); } |
画面がこんな風になっていれば正解です。
入力したら、Unityに戻り、Playerスクリプトをプレイヤーにドラッグ&ドロップします
テストプレイをしてWキーをおしてみると…
早すぎて全部突き抜けていきましたね
なので、10の後に「 * Time.deltaTime」を追加で入力しましょう
これを移動の後に入力すると処理の速度が一定になり、ちょうどいい感じになる
同様に他のブロックも入力してみましょう。
1 |
transform.Rotate(new Vector3(0, 15, 0)); |

再生ボタンを押してエラーがないか、確認しましょう。
入力したら答え合わせしましょう
プレイヤーの重力処理とジャンプの作成
UnityではRigidbodyというものがあり、これをつけると自動で重力がかかるようになります
まずはRigidbodyをつけ、その後、ジャンプのプログラミングをしていきます
プレイヤーを選択し、AddComponentをおし、検索欄に「ri」と入力し、Rigidbodyを選択します
Contraintsの横の▶︎をおし、FreezeRotationのチェックを全ていれます
画像のような内容のスクリプトを入力するのですが、少し難しい内容になります
以下のスクリプトをそのまま打ちましょう
説明については、コメントで記入してありますので、参考にしてください
入力するスクリプト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private Rigidbody rb;// Rigidbodyの機能を使うためにrigidbodyという変数を作成 private bool Grounded;// 地面についているかどうか // Use this for initialization void Start() { rb = GetComponent<Rigidbody>();// rbにRigidbodyを代入する } // Update is called once per frame void Update() { if (Input.GetKey(KeyCode.W))// Wキーがおされたら { transform.position += transform.TransformDirection(Vector3.forward * 10 * Time.deltaTime);// 前方に10 * 時間経過分動かす } if (Input.GetKey(KeyCode.S))// Sキーがおされたら { transform.position += transform.TransformDirection(Vector3.forward * -10 * Time.deltaTime);// 後方に10 * 時間経過分動かす } if (Input.GetKey(KeyCode.A))// Aキーがおされたら { transform.Rotate(new Vector3(0, -5, 0));//左回転する } if (Input.GetKey(KeyCode.D))// Dキーがおされたら { transform.Rotate(new Vector3(0, 5, 0));//右回転する } if (Grounded == true)// もし、地面に触れていたら、 { if (Input.GetKey(KeyCode.Space))// もし、スペースキーがおされたら、 { Grounded = false;// 地面に触れてないことにする rb.AddForce(Vector3.up * 400);// ジャンプする } } } void OnCollisionEnter(Collision other)// 地面に触れた時の処理 { if (other.gameObject.tag == "Ground")// もしGroundというタグがついたオブジェクトに触れたら、 { Grounded = true;// 地面に触れたことにする } } } |
変数の説明
コードを見てみるとrbやGroundedという変数が使われています
変数についてはUnityでは沢山の種類があるので、詳しくは以下を参考にして下さい
#C#での変数の作り方

②変数はアクセス修飾子 型 変数名;と入力します。
アクセス修飾子については以下を参考にして下さい。

型については以下を参考にして下さい。

例えば他のオブジェクトでも使用可能なfloat型のgetabakoという変数を作る場合
public float getabako; と入力します。
Rigidbodyなどのコンポーネントをプログラミングで使えるようにする
基本的にはどのコンポーネントもルールは同じです
1 |
private Rigidbody rb; |
②void Start(){}の中に
1 |
rb = GetComponent<Rigidbody>(); |
③命令を実行する箇所に任意の命令を入れる
1 |
rb.AddForce(Vector3.up * 400); |
物に触れた時の説明
②触れた時の処理は
1 |
void OnCollisionEnter(Collision other){} |
③触れたオブジェクトが何かはオブジェクトの名前、またはオブジェクトについているタグで判断します
1 |
if (other.gameObject.tag == "Ground") |
※タグは今回のチュートリアルでは予めつけてあります
テストプレイをしてみると
スペースキーでジャンプができるので、ゴールを目指しましょう
カメラがプレイヤーについていくようにする
MainCameraをプレイヤーにドラッグ&ドロップします
そうするとカメラがプレイヤーの子オブジェクトになり、プレイヤーについていくようになります
アイテムを配置する
Item → Prefabsにあるアイテムをドラッグ&ドロップします
座標を調整します。xは0、yとzは取りやすい位置にするのがオススメです
いっぱい置いてステージを豪華にしましょう。
お疲れ様でした♪