Scratch のブロックを Unity で再現するときに、どのような方法があるのかを紹介していきます。
ScratchのブロックをUnityで再現しよう
もし端に着いたら、跳ね返る
Scratch の「もし端に着いたら、跳ね返る」ブロックを Unity で作ってみましょう。
準備
「動き④」と同様に三角形を配置してMoveTriangleスクリプトを用意します。
x座標を10ずつ変える
それでは、MoveTriangleコンポーネントに C#プログラムを記述して、座標を動かしてみましょう。
座標の設定と更新をまとめて作成していきます。
プログラムを作成後、画面上部の再生ボタンを押すと、三角形が右上に動いていきます。
using UnityEngine;
public class MoveTriangle : MonoBehaviour {
private float m_fMoveSpeedX = 1.5f;
private float m_fMoveSpeedY = 1f;
private void Start() {
float fScreenPosX = 100f;
float fScreenPosY = 50f;
float fScreenPosZ = transform.position.z - Camera.main.transform.position.z;
Vector3 vecWorldPos = Camera.main.ScreenToWorldPoint(new Vector3(fScreenPosX, fScreenPosY, fScreenPosZ));
transform.position = vecWorldPos;
}
private void Update() {
Vector3 vecWorldPos = transform.position;
vecWorldPos.x += m_fMoveSpeedX * Time.deltaTime;
vecWorldPos.y += m_fMoveSpeedY * Time.deltaTime;
transform.position = vecWorldPos;
}
}
もし端に着いたら、跳ね返る
次は、端に着いたら跳ね返るようにしましょう。
using UnityEngine;
public class MoveTriangle : MonoBehaviour {
public float m_fMoveSpeed = 10f;
private Rigidbody2D m_rRigidbody2D = null;
void Start() {
m_rRigidbody2D = GetComponent<Rigidbody2D>();
// 最初の向きをランダムに決める.
float fRotZ = Random.Range(0f, 360f);
Quaternion rRot = Quaternion.Euler(0f, 0f, fRotZ);
// 最初の速度を設定する.
m_rRigidbody2D.velocity = rRot * Vector3.up * m_fMoveSpeed;
// 向きを設定する.
transform.rotation = rRot;
}
private void LateUpdate() {
// スクリーン座標を取得する.
Vector3 vecScreenPos = Camera.main.WorldToScreenPoint(transform.position);
// 現在の速度を取得する.
Vector3 vecVelocity = m_rRigidbody2D.velocity;
if ((vecScreenPos.x < 0f && vecVelocity.x < 0f) || (vecScreenPos.x > Screen.width && vecVelocity.x > 0f)) {
// 左右の端に着いたので、左右に跳ね返る.
vecVelocity.x = -vecVelocity.x;
}
if ((vecScreenPos.y < 0f && vecVelocity.y < 0f) || (vecScreenPos.y > Screen.height && vecVelocity.y > 0f)) {
// 上下の端に着いたので、上下に跳ね返る.
vecVelocity.y = -vecVelocity.y;
}
// 現在の速度を更新する.
m_rRigidbody2D.velocity = vecVelocity;
// 向きを更新する.
transform.rotation = Quaternion.FromToRotation(Vector3.up, vecVelocity);
}
}
プログラムのちょこっと解説
今回は「もし端に着いたら、跳ね返る」ために、Rigidbody2Dを使ってみました。
Rigidbody2Dのvelocity(速度)を変更することで、移動する方向を制御することができます。
Rigidbody2D-velocity - Unity スクリプトリファレンス
Linear velocity of the Rigidbody in units per second.
まとめ
Scratch の「もし端に着いたら、跳ね返る」ブロックと同じ動きを Unityで作ってみました。
Scratch で簡単にできていたことも、Unity では少し工夫する必要があったりしますね。
Unity の機能を使い倒して、さらに面白いゲームを作れるようになりましょう。
コメント