LoginSignup
5
3

More than 5 years have passed since last update.

CharacterControllerを使ってアスレチックアクションを作ろう

Last updated at Posted at 2018-10-20

今回作るゲーム

51

今回やること

①プレイヤーの移動
②プレイヤーのジャンプ
③プレイヤーからエフェクトを出す
④アイテムを配置する
⑤制限時間を作る

パッケージのダウンロード

こちら
よりパッケージをダウンロードしてプロジェクトに入れて下さい

一応元データも載っけておきます

プロジェクトの入れ方はこちら

プレイヤーの移動

今回はプレイヤーの移動をするために、CharacterControllerというものを使います
このチュートリアルでは事前につけてありますが、本当は自分でつけて、大きさの設定もします
こちらにまとめてあるので自分で一から作成したい場合はご覧ください

CharacterControllerの説明

①プレイヤーに当たり判定がつく
②階段や坂道の判定を自動で行ってくれる
③characterController.Move(Vector3型の変数)で、プレイヤーを動かす
④characterController.Groundedで、地面についているかどうかを判定できる

C#の基本的なルールと構造の説明

Unityで使うC#にはいくつかルールがあります。それは以下の通りですが、

①どのような種類のコードをどこに入力するのか

②エリアとエリアは{}でとじる

この2点をおさえておけば、Scratchと大差ありません!!
図4-1.png

プレイヤーの移動のプログラミング

プレイヤーの移動は
図2
のようにしていきます

早速、Assets → ScriptsにあるPlayerスクリプトをダブルクリックして開きます
1-2

では実際に、表を参考にしながらコードを書いていきましょう。
Scratchのブロックを積む感覚で一行ずつ打っていきます。

図5.png

表はこちらにあります。

以下の画像の四角で囲った部分を参考に入力の手順を見ていきましょう

図6.png

①このブロックは「ずっと」ではさまれているので、
「ゲーム開始後ずっと実行するエリア」に入力します。

②「もし~なら」を入力していきます。表を見てみると、
mosihyou.png
となっています。条件は違うので()の中は空欄にし、
if(){}
と入力しましょう。

③条件は「Wキーが押されたら」です。
図7.png
となっていて、今回はSpaceキーではなく、Wキーなので、
if(){}の()の中にInput.GetKey(KeyCode.W))をいれます。

if(Input.GetKey(KeyCode.W))){}
となります。

④実行する内容は「10歩動かす」です。
図8.png
となっているので、
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]

となりました。

画面がこんな風になっていれば正解です。
13-1.png

テストプレイをしてWキーをおしてみると…
14

早すぎて全部突き抜けていきましたね

なので、10の後に「 * Time.deltaTime」を追加で入力しましょう

[su_box title="Time.deltaTimeとは?" style="glass"]Scratchで言う「タイマー」のこと
これを移動の後に入力すると処理の速度が一定になり、ちょうどいい感じになる[/su_box]

同様に他のブロックも入力してみましょう。
再生ボタンを押してエラーがないか、確認しましょう。
図9.png

正解はコチラ♪入力したら答え合わせしましょう。
20.png

プレイヤーの重力処理とジャンプのプログラミング

CharacterControllerを用いた場合、ジャンプと重力処理に工夫が必要になります
[su_list]


  • 重力という変数はUnityで用意されているPhysics.gravity.yを使う

  • 地面に触れているかどうかはcharacterController.isGroundedを使う

[/su_list]
コードをScratchで表すと以下のようになります
なので、右側のコードを表を参考に記述していきましょう
3-2

変数をつくる

コードを見てみるとJumpという変数が使われています
4-2

今回はprivateのVector3型のJumpという変数を作ります
変数についてはUnityでは沢山の種類があるので、詳しくは以下を参考にして下さい

#C#での変数の作り方
①図を参考にして変数を入力していきます。
図1.png
②変数はアクセス修飾子 型 変数名;と入力します。
アクセス修飾子については以下を参考にして下さい。
スライド1.PNG
型については以下を参考にして下さい。
スライド2.PNG
例えば他のオブジェクトでも使用可能なfloat型のgetabakoという変数を作る場合
public float getabako; と入力します。

読むのが面倒くさい人は、以下画像を参考にして、
図1.png

private Vector3 Jump;
と入力しましょう
16

CharacterControllerを使えるようにする

CharacterControllerを使うには
①変数の部分にprivate CharacterController characterController;を入力
②void Start(){}の中にcharacterController = GetComponent<使用したい機能>();を入力する
17

重力処理を行う

5-2
を入力していきます
ここからは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の当たり判定が勝手にやってくれる
18

ジャンプを実装する

9-1
を入力していきます
ジャンプは地面についている時のみ出来るようにするので、
if(characterController.isGrounded){}を入力します

{}の中にはプレイヤーの移動の時のようにif文を作成し、スペースキーがおされたらという条件を()に入力し、{}にはJumpを3にする命令を入力します
21

テストプレイをしてみると…Wキーで前進、Sキーで後退、ADキーで方向転換、スペースキーでジャンプができますね
22

プレイヤーからエフェクトを出す

AssetStoreを開きます
Window → General → AssetStoreをおします
23

左上をパーティクルに変更し、検索欄にfreeと入力して虫眼鏡のボタンをおします
24

気に入ったパーティクルを選んで、パーティクルの名前をクリックします
25

インポートをおします
26

importをおします
27

どんなエフェクトを出したいか決めます
importをしたパーティクル → Scene → Sceneをダブルクリックしてシーンを開きます
再生ボタンを押してパーティクルをダブルクリックするとそのパーティクルによるのでどれがどれだか分かります
29

シーンを戻し、importをしたパーティクル → Prefabs → 好きなパーティクル を選んでPlayerにD&Dしましょう
28

左上のアイコンをおして移動させたり回転させたりしてちょうどいい位置にしましょう
30

いい感じになりました
31

アイテムを配置する

Item → PrefabsにあるアイテムをD&Dします
32

座標を調整します。xは0、yとzは取りやすい位置にするのがオススメです
33

いっぱい置いてステージを豪華にしましょう。取れば得点が入るように準備はしてあります
34

制限時間をつくる

ここはまず、自分で考えてみましょう。
※ヒント:public float TimeLimit;という変数を作ります
小数を使う場合、必ず最後にfをつける 例:0.1f
12

制限時間の正解
38

成功していれば、LimitTimeが0になったらスタートに戻されます
50

お疲れ様でした♪

プログラミングの完成プロジェクト

こちらにありますのでご自由にどうぞ♪

5
3
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
5
3