#初めに
チェックワークの解説です!
テクテクストライクが終わったくらいの人ができるレベル感のものです。
スペースキーを押すとプレイヤーの白いブロックがジャンプします。
青いブロックは1点、赤いブロックは100点です。
コンソールに加点スコアと合計スコアを表示させましょう。
青はすり抜けるけど、赤にはぶつかります。
#作り方
##準備
###土台作り
まずゲームのステージを作りましょう!この段階は、何も見ずにできると良いです!
簡単に書くと、
・床を作る
・ブロックを3つ用意する
・それぞれわかりやすいように色をつける。
ここでつまづいてしまった人は、さらにヒント!
・床は、1枚の板を置いて作る。Hierarchy
のCreate
タブから、3DオブジェクトのPlaneを選ぶよ
・ブロックはCubeという3Dオブジェクト
・色は、Project
のCreate
から、Materialを選択。Inspector
タブの上にある白い四角をクリックして、色を選択したら、そのMaterialをSceneビュー
にドラッグアンドドロップしてブロックに色をつける!
###要素を加えていく
さらに、完成動画を見てみると、プレイヤーが動く、つまり重力が必要です。また、青ブロックはすり抜け、赤ブロックにはぶつかります。この動きを作っていきましょう。何も見ずにできるともっとすごい!
やり方
①Playerのブロックに、RigidBody
をつける。
ヒント☆
Playerブロックを選択した状態でInspector
タブを見ます。
一番下のAddComponent
をクリックしてRigidBodyを検索して取り付けます。
プレイヤーブロックには、縦方向にだけ動いて欲しいので、Freeze(凍らせるという意味!)RotationとPositionにチェックを入れます。Y軸のPositionのみを動かします。
③青ブロックのisTrigger
にチェックを入れる
青ブロックを選択した状態でInspector
タブを見て、BoxCollider
のisTriggerにチェックを入れます。こうすることで、このブロックはすり抜けてぶつからないけど当たった判定だけはできる状態になります。
④最後に、ProjectタブのCreateからC#スクリプトを選び、PlayerScriptを作成して、オブジェクトに取り付けましょう。後はコードを書くだけ!
##スクリプトを書く
public class PlayerScript : MonoBehaviour
{
public float power = 400f;
Rigidbody _rigidbody;
int score = 0;
まず、ちゃんと名前がPlayerScriptになってるか確認して、宣言を3つ書いていくよ。
・ひとつ目
ジャンプ力を入れる変数を宣言。powerと名付けました。publicと付けるとUnityの画面でも数値が調整できます。
・2つ目
AddComponentした重力Rigidbody
を使いたいので、_ rigidbodyと名付けて、宣言します。
☆型名と変数名の区別がわかりやすいように_(アンダーバー)を先頭に付けているよ
・3つ目
スコアを入れる箱を用意します
void Start()
{
_rigidbody = GetComponent<Rigidbody>();
}
↑続いてStart関数の中に書きます。中身は、RigidBody
をゲットしてねという命令です。
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
this._rigidbody.AddForce(Vector3.up * power);
}
}
↑さらに、Update関数の中に書きます。
**Input.GetKeyDown(KeyCode.〇〇)**は、キーを押した時の命令の定型文です。ここではSpaceキーを使います。
今回は押した瞬間ふわっと上に行って欲しいので、GetKey Down にしましょう。
{}の中は、
「もしスペースキーを押したら、このスクリプトが付いているオブジェクトの、RigidBodyに力を加えてね(上向きで、最初に宣言したpowerの速さで)」
という意味になります。ここの説明はこれくらいにするので気になる人はAddForceとか調べてみてね
次はUpdateの外に書きます。↓
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "Blue")
{
score ++;
Debug.Log(1);
Debug.Log("合計"+ score + "点");
}
}
青ブロックを通るとスコアが+1になり、コンソールに表示されるスクリプトです。
OnTriggerEnter
というUnityで用意してくれている変数を使います。これは、簡単に説明するとトリガーがオンになったら{ }の中を実行するよ という意味です。さっきUnityでisTriggerにチェックを入れたけど、そのチェックがオンになっているとこの関数が使えます。
・{}の中では、初めに設定したscoreに、+1をする(++は+1と同じ意味)
そして、「スコアは1」とデバッグで表示しろ。という意味になっています。
合計点も表示しましょう。
さらにその外に、赤ブロックにぶつかるとスコアが+100になり、コンソールに表示されるコードを書きます
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.name == "Red")
{
score += 100;
Debug.Log(100);
Debug.Log("合計"+ score + "点");
}
}
赤いブロックはすり抜けずぶつかったら加点ですが、その場合はTriggerではなく、OnCollisionEnter
という関数を使います。Colliisionは衝突という意味の英語です。
なのでもしぶつかったら{}の中を実行してね、という感じの機能になってます。
(実はいくつか種類があり、ぶつかり始めた時、ぶつかっている時、ぶつかり終わる時と分かれていますが今回は説明は省きます。)
#終わりに
どこまでできたかな?全てできなくても大丈夫!解説読んで理解できれば100点です。
何も見ずにできた人は本当にすごい!自信を持って今後も頑張ろう。
15分以内にできるポイントは
・Unityの基本操作が素早くできるか?
・ゲーム作成の手順がすぐに頭で組み立てられるか?
・コードをどこまで理解できているか?
おしまい〜!
学んだ技術まとめ
・Cubeの追加と配置
・すり抜け/IsTrigger
・Rigidbody
・if文
・AddForce
・衝突判定
・キー入力
・スコアの計算
・Debug.Log