Scratch のブロックを Unity で再現するときに、どのような方法があるのかを紹介していきます。
ScratchのブロックをUnityで再現しよう
回転方向を左右のみにする
Scratch の「回転方向を左右のみにする」ブロックを Unity で作ってみましょう。
準備
「動き⑤」と同様に三角形を配置してMoveTriangleスクリプトを用意します。
画像を変更する
最初に、向いている方向が分かりやすいように画像を変更しましょう。
ここでは「いらすとや」さんから画像を持ってきました。
かわいいフリー素材集
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。
Projectビューに画像ファイルをドラッグ&ドロップします。
Inspector ビューで Sprite Renderer コンポーネントの Sprite を変更しましょう。
今回持ってきた画像が左向きでしたので、Flip にチェックを付けて右向きに変更します。(必要な方のみ)
回転方向を左右のみにする
それでは、MoveTriangleコンポーネントに C#プログラムを記述して、回転方向を左右のみにしてみましょう。
プログラムを作成後、画面上部の再生ボタンを押すと、三角形が左右のみに反転します。
using UnityEngine;
public class MoveTriangle : MonoBehaviour {
public float m_fMoveSpeed = 10f;
private Rigidbody2D m_rRigidbody2D = null;
private SpriteRenderer m_rSpriteRenderer = null;
void Start() {
m_rRigidbody2D = GetComponent<Rigidbody2D>();
m_rSpriteRenderer = GetComponent<SpriteRenderer>();
// 最初の向きをランダムに決める.
float fRotZ = Random.Range(0f, 360f);
Quaternion rRot = Quaternion.Euler(0f, 0f, fRotZ);
// 最初の速度を設定する.
m_rRigidbody2D.velocity = rRot * Vector3.up * m_fMoveSpeed;
// 向きを設定する.
//transform.rotation = rRot;
transform.rotation = Quaternion.identity;
if (m_rRigidbody2D.velocity.x < 0f) {
// 最初に左に動くので、左右に反転する.
m_rSpriteRenderer.flipX = !m_rSpriteRenderer.flipX;
}
}
private void LateUpdate() {
// スクリーン座標を取得する.
Vector3 vecScreenPos = Camera.main.WorldToScreenPoint(transform.position);
// 現在の速度を取得する.
Vector3 vecVelocity = m_rRigidbody2D.velocity;
// 左右に跳ね返ったかどうか.
bool bFlipX = false;
if ((vecScreenPos.x < 0f && vecVelocity.x < 0f) || (vecScreenPos.x > Screen.width && vecVelocity.x > 0f)) {
// 左右の端に着いたので、左右に跳ね返る.
vecVelocity.x = -vecVelocity.x;
// 左右に跳ね返った.
bFlipX = true;
}
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);
if (bFlipX) {
// 左右に跳ね返ったので、左右に反転する.
m_rSpriteRenderer.flipX = !m_rSpriteRenderer.flipX;
}
}
}
プログラムのちょこっと解説
今回は「回転方向を左右のみにする」ために、SpriteRendererを使ってみました。
SpriteRendererのflipXを変更することで、左右のみ反転させることができます。
SpriteRenderer-flipX - Unity スクリプトリファレンス
スプライトを X 軸で反転します
まとめ
Scratch の「回転方向を左右のみにする」ブロックと同じ動きを Unityで作ってみました。
スプライトを制御する機能は SpriteRenderer で提供されています。
Unity の機能を使い倒して、さらに面白いゲームを作れるようになりましょう。
コメント