1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ポイント獲得ゲーム -チェックワーク解説!-

Last updated at Posted at 2020-12-08

#初めに
チェックワークの解説です!
テクテクストライクが終わったくらいの人ができるレベル感のものです。

#動画
checkwork.gif

スペースキーを押すとプレイヤーの白いブロックがジャンプします。
青いブロックは1点、赤いブロックは100点です。
コンソールに加点スコアと合計スコアを表示させましょう。

青はすり抜けるけど、赤にはぶつかります。

#作り方
##準備
###土台作り
まずゲームのステージを作りましょう!この段階は、何も見ずにできると良いです!

簡単に書くと、
・床を作る
・ブロックを3つ用意する
・それぞれわかりやすいように色をつける。

ここでつまづいてしまった人は、さらにヒント!
・床は、1枚の板を置いて作る。HierarchyCreateタブから、3DオブジェクトのPlaneを選ぶよ
・ブロックはCubeという3Dオブジェクト
・色は、ProjectCreateから、Materialを選択。Inspectorタブの上にある白い四角をクリックして、色を選択したら、そのMaterialをSceneビューにドラッグアンドドロップしてブロックに色をつける!

###要素を加えていく
さらに、完成動画を見てみると、プレイヤーが動く、つまり重力が必要です。また、青ブロックはすり抜け、赤ブロックにはぶつかります。この動きを作っていきましょう。何も見ずにできるともっとすごい!

やり方
①Playerのブロックに、RigidBodyをつける。
 ヒント☆
 Playerブロックを選択した状態でInspectorタブを見ます。
 一番下のAddComponentをクリックしてRigidBodyを検索して取り付けます。

②FreezeRotationにチェック!
スクリーンショット 2021-06-05 23.07.00.png

プレイヤーブロックには、縦方向にだけ動いて欲しいので、Freeze(凍らせるという意味!)RotationとPositionにチェックを入れます。Y軸のPositionのみを動かします。

③青ブロックのisTriggerにチェックを入れる
青ブロックを選択した状態でInspectorタブを見て、BoxColliderisTriggerにチェックを入れます。こうすることで、このブロックはすり抜けてぶつからないけど当たった判定だけはできる状態になります。
スクリーンショット 2021-06-05 23.08.57.png

④最後に、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は衝突という意味の英語です。
なのでもしぶつかったら{}の中を実行してね、という感じの機能になってます。

(実はいくつか種類があり、ぶつかり始めた時、ぶつかっている時、ぶつかり終わる時と分かれていますが今回は説明は省きます。)

####全体のスクリプト
スクリーンショット 2021-06-05 23.41.20.png

#終わりに
どこまでできたかな?全てできなくても大丈夫!解説読んで理解できれば100点です。
何も見ずにできた人は本当にすごい!自信を持って今後も頑張ろう。

15分以内にできるポイントは
・Unityの基本操作が素早くできるか?
・ゲーム作成の手順がすぐに頭で組み立てられるか?
・コードをどこまで理解できているか?

おしまい〜!

学んだ技術まとめ
・Cubeの追加と配置
・すり抜け/IsTrigger
・Rigidbody
・if文
・AddForce
・衝突判定
・キー入力
・スコアの計算
・Debug.Log

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?