おはようございます!
1月21日 火曜日。薄曇りの晴れ🌞
予想気温12/7℃。1週間くらい寒くない日が続くみたいです。
さて、今日も早速お勉強してまいります。
今日の教材はこちら、
[PR]
CHAPTER 5 上下左右キーで移動して衝突
CHAPTER 5.1 上下左右キーで、移動(衝突なし)
🐶 上下左右キーで動く主人公
・配置した画像に「On Key Press Move Sprite」を追加

・「Play」ボタンで実行

おおー!!
左に移動するときはちゃんと左向くね!

すげー
あれか、反転処理か

反転術式
🐶 スクリプトの中身
<「上下左右キーを押したら、オブジェクトが移動する(On Key Press Move Sprite)」スクリプト(抜粋)>
・Update関数の箇所

・Input.GetAxisRaw(“Horizontal”):水平方向キーが押されたかどうか
・Input.GetAxisRaw(“Vertical”):垂直方向キーが押されたかどうか
⇒いずれも「1」or「0」or「-1」の値が毎フレーム返ってくる。
※「0」であれば動いていない。
・FixedUpdate関数の箇所

・Time.deltaTime:前回のUpdate関数から今回のUpdate関数までの経過時間(秒)
🐶 いろいろなUnityの関数
関数 | 実行内容 |
---|---|
Start() | 最初に1回だけ実行 |
Update() | ゲーム中ずっと実行 |
FixedUpdate() | 一定時間ごとにずっと実行 |
OnCollisionEnter2D() | オブジェクトが衝突したときに実行 |
OnMouseDown() | マウスでタッチしたときに実行 |
LateUpdate() | いろいろな描画が終わったあとに実行 |
CHAPTER 5.2 衝突のしくみ
🐶 Rigidbody 2DとCollider 2D
・リジッドボディ2D(Rigidbody 2D):オブジェクトを物理的に動かす機能
例えば👇
・オブジェクトと衝突したら衝突を検知
・衝突相手が壁オブジェクトならそれ以上進めない
・押せるオブジェクトなら押しながら進む
など
・コライダー2D(Collider 2D):オブジェクトの衝突枠(絵のどこが衝突するかの境界線)
⇒衝突枠が他の画像の衝突枠と触れることで衝突が発生する。
🐶 重力スケールを0にすると、落下しなくなる
・「Rigidbody 2D」「Box Collider 2D」を追加して動かしてみる

・Rigidbody 2Dの「重力スケール(Gravity Scale)」を「0」にして動かしてみる


岩は落下しなくなったけど通過してしまう。。
なぜか?
キャラクターの方には「衝突枠」をつけてないから。

つけてないよ
・キャラクターに「Rigidbody 2D」「Capsule Collider 2D」をアタッチし、キャラクターのRigidbody 2Dの「重力スケール(Gravity Scale)」を「0」に設定

・「Play」ボタンで実行


なんじゃこりゃ
<問題点>
・岩の端っこを押すと一緒に曲がってしまう
→岩の端だけに力が加わると、物理的な回転の動きが発生するため
⇒回転しない設定を追加する必要がある
CHAPTER 5.3 上下左右キーで、移動(衝突あり)
🐶 リジッドボディで移動する
・「Key Press Move Sprite」を「On Key Press Move」に差し替えて動かしてみる

スーっと滑っていきました。。
これは重力スケールが0(無重力)なので、止まる要素がないため。
・岩の画像の「Rigidbody 2D」の「線形減衰(Linear Damping)」「角度減衰(Anglar Damping)」をそれぞれ「10」にして動かしてみる


🐶 スクリプトの中身
<「上下左右キーを押したら、リジッドボディで移動する(On Key Press Move)」スクリプト(抜粋)>
・Start関数の箇所

・FixedUpdate関数の箇所
void FixedUpdate()
{
rbody.linearVelocity = new Vector2(vx, vy); // 移動する
GetComponent().flipX = leftFlag;
}
⇒linearVelocityプロパティにVector2型の値を設定することで、オブジェクトの線形速度を直接設定できる。
🐶 ステージに壁を作る
・描画モード「タイル」

引いた壁に「Box Collider 2D」をアタッチ。アタッチされた「Box Collider 2D」は元の画像の大きさのままのため、「自動タイリング」にチェックを入れる。
・「Box Collider 2D」の大きさ(元の画像のまま)

・「自動タイリング(Auto Tiling)」チェックオン

これで「Box Collider 2D」が引き伸ばした壁と同じ大きさに自動調整された。
Ctrl+Dで壁を複製。四方に壁を設置。
・「Play」ボタンで実行

ゲームっぽくなってきた!

いいねー
CHAPTER 5.4 「ずっと、追いかける」
🐶 目標に向かって、少しずつ近づく
おばけオブジェクトを配置。
「Rigidbody 2D」「Box Collider 2D」「Forever Chase」をアタッチ。
「Forever Chase」の「Target Object」にキャラクターを設定。
・「Play」ボタンで実行

・装飾してみる
背景を追加。
青いレンガを埋める。
Transformの「Z」の値を「10」にする。
背景の青いレンガの色を少し暗くする。
おばけを半透明にする。
・「Play」ボタンで実行

🐶 スクリプトの中身
<「ずっと、追いかける(Forever Chase)」スクリプト(抜粋)>
・変数設定箇所

・Start関数の箇所

・追いかける処理の箇所

・targetObject.transform.position:追跡対象のオブジェクトの位置を取得
・transform.position:自身のオブジェクトの位置を取得
⇒2つの位置の差を計算し、目標方向のベクトルを求める
・.normalized:ベクトルの長さを1に正規化。れにより、方向ベクトルが得られる。
CHAPTER5.5と5.6が残っているんですけど、今日はここまででm(_ _)m
学ぶ時間よりWordPressを編集するほうが時間かかっているというジレンマ。。。
特に画像の作成が😭
作るだけならいいんですけどね~、SEO的に画像に対して色々設定しないといけないのがツラい。
がんばるます、、、

ひへ~
体力回復に努めるためこれにて終了です。
おつかれさまでした~(-ω-)/