C#
Unity
Scratch

ScratchのブロックをUnityに対応させてみた

使い方の参考動画はこちら♪

動き

10歩動かす

動き1.PNG

transform.position += transform.TransformDirection(Vector3.forward * 10);

15度回す

動き2.PNG

transform.Rotate(new Vector3(0, 0, 15));

90度に向ける

動き9.png

transform.localScale = new Vector3(1, 1, 1);

-90度に向ける

動き10.png

transform.localScale = new Vector3(-1, 1, 1);

マウスのポインターへ向ける

動き11.png
※変数の部分にはprivate Plane plane = new Plane();とprivate float distance = 0;を入力する

var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
          plane.SetNormalAndPosition(Vector3.up, transform.localPosition);
          if (plane.Raycast(ray, out distance))
        {
          var lookPoint = ray.GetPoint(distance);
          transform.LookAt(lookPoint);
        }

"ターゲット"へ向ける

動き3.PNG
※変数の部分にはpublic GameObject target;を入力する
 入力し終わった後にスクリプトにターゲットをD&Dするのを忘れずに!!

transform.LookAt(target.transform);

座標を0、y座標を0、(z座標を0)にする

動き4.PNG

transform.position = new Vector3(0, 0, 0);

"ターゲット"へ行く

動き5.PNG
※変数の部分にはpublic Transform target;を入力する
 入力し終わった後にスクリプトにターゲットをD&Dするのを忘れずに!!

transform.position = target.position;

マウスのポインターへ行く

動き12.png
※変数の部分にはprivate Vector3 position; と private Vector3 screenToWorldPointPosition;を入力する

position = Input.mousePosition;
position.z = 10f;
screenToWorldPointPosition = Camera.main.ScreenToWorldPoint(position);
gameObject.transform.position = screenToWorldPointPosition;

1秒でx座標を0に、y座標を0に変える

動き13.png
アニメーション機能を使う
動き14.png

x座標を10ずつ変える

動き6.PNG

transform.position += new Vector3 (10, 0, 0);

y座標を10ずつ変える

動き7.PNG

transform.position += new Vector3 (0, 10, 0);

回転方法を左右のみにする、回転しないにする

動き8.PNG

rigidbodyのFreezeRotationにチェック

freezerotation.PNG

見た目

("オブジェクト")を表示する

見た目1.PNG
※変数の部分にはpublic GameObject obj;を入力する
 入力し終わった後にスクリプトにターゲットをD&Dするのを忘れずに!!

obj.SetActive(true);

("オブジェクト")を隠す

見た目2.PNG
※変数の部分にはpublic GameObject obj;を入力する
 入力し終わった後にスクリプトにターゲットをD&Dするのを忘れずに!!

obj.SetActive(false);

完全に消したい場合

Destroy(this.gameObject)

背景を"背景の名前"にする

見た目6.PNG
※using~の部分に using UnityEngine.SceneManagement;を入力する
※便宜上Getabakoというシーンを読み込むことにしています

SceneManager.LoadScene("Getabako");

色の効果を0にする

見た目3.PNG
※例では色を赤にしています

GetComponent<Renderer>().material.SetColor("_Color", Color.red);

大きさを10ずつ変える

見た目4.PNG

this.transform.localScale += new Vector3(10, 10, 10);

大きさを100%にする

見た目5.PNG

transform.localScale = new Vector3(1, 1, 1);

データ

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

変数を0にする

データ1.PNG
※便宜上、getabakoという変数を作ったことにしています

getabako = 0;

変数を1ずつ変える

データ2.PNG

getabako += 1;
getabako++;

イベント

旗がクリックされたとき

イベント1.PNG
{}の中には実行する内容を入力する

void Start(){}

スペースキーがおされたとき

イベント2.PNG
{}の中には実行する内容を入力する

それぞれのキーの入力は以下の表を参考にして下さい
キー入力表.png

連打じゃない場合

if (Input.GetKeyDown(KeyCode.Space)){}

連打の場合

if (Input.GetKey(KeyCode.Space)){}

キーから離された場合

if (Input.GetKeyUp(KeyCode.Space)){}

このスプライトがクリックされたとき

イベント3.PNG

図を参考にして入力します
図2.png

{}の中には実行する内容を入力する

void OnMouseOver()
    {
        if (Input.GetMouseButtonDown(0))
        {}
    }

制御

1秒待つ(コルーチンの中でのみ使用可能)

制御1.PNG

コルーチンの説明
Scratchno定義ブロックのように一連の命令をひとかたまりにしていつでも呼び出せるようにできる機能のことです。
その一連の中にのみ、待ち時間を入れることができます。

コルーチンの作り方
図を参考にして入力します
図2.png
※便宜上getabakoというコルーチンを作っています
{}の中には一連の実行する内容を入力する

IEnumerator getabako(){}

yield return new WaitForSeconds(1);

コルーチンの呼び出し方
※呼び出したい時に以下を入力する

StartCoroutine("getabako");

10回繰り返す

制御2.PNG
{}の中には実行する内容を入力する

for (int i = 0; i < 10; i++){}

ずっと
制御3.PNG

void Update(){}

もし○○なら(便宜上、getabakoというint型の変数が1ならという条件を加えています)

制御4.PNG
{}の中には実行する内容を入力する

if(getabako==1){}

もし○○なら、でなければ

制御5.PNG
{}の中には実行する内容を入力する
※便宜上、getabakoというint型の変数が1ならという条件を加えています

if(getabako==1){}
else{}

自分自身のクローンを作る

clone.PNG 

Instantiate(this.gameObject, this.transform.position, Quaternion.identity);

他のオブジェクトのクローンを作る

制御8.PNG
※変数の部分にはpublic GameObject obj;を入力する

Instantiate(obj.gameObject, this.transform.position, Quaternion.identity);

クローンされたとき

制御7.PNG

プレファブ化したオブジェクトにスクリプトを貼りつける

調べる

"オブジェクト"に触れた

※便宜上オブジェクトの名前もしくはタグがgetabakoということにしています

※注意事項があるのでよく読んで下さい※
入力する箇所
図2.png
衝突するオブジェクトがすり抜けない場合
①Coliderをつける
②どちらかには必ずRigidBodyをつける
衝突するオブジェクトがすり抜ける場合
①colliderの「IsTrigger」にチェックをつける
②衝突するオブジェクトにタグをつける
タグのつけかた
図3.png

調べる1.PNG
{}の中には実行する内容を入力する

衝突するオブジェクトがすり抜けない場合

void OnCollisionEnter (Collision col)
    {
        if(col.gameObject.name == "getabako"){}
    }

衝突するオブジェクトがすり抜ける場合

void OnTriggerEnter (Collider col)
    {
        if(col.gameObject.tag == "getabako"){}
    }

オブジェクトまでの距離

調べる2.PNG
※変数の部分にはpublic GameObject obj1;とpublic GameObject obj2;を入力する

Vector3 Apos = "obj1".transform.position;
Vector3 Bpos = "obj2".transform.position;
float dis = Vector3.Distance(Apos,Bpos);

x座標(オブジェクト)、y座標(オブジェクト)

調べる4.PNG
※便宜上オブジェクトの名前はgetabako、代入するVector3の変数はgetabakoposとします

Vector3 getabakopos = GameObject.Find("getabakopos").transform.position;
GameObject.Find("getabako").transform.position = new Vector3(getabakopos.x, getabakopos.y, getabakopos.z);

演算

1 + 1

演算1.PNG
※便宜上1をとりあえず入れます

1+1;

1 - 1

演算2.PNG
※便宜上1をとりあえず入れます

1-1;

1 * 1

演算3.PNG
※便宜上1をとりあえず入れます

1*1;

1 / 1

演算4.PNG
※便宜上1をとりあえず入れます

1/1;

<

演算7.PNG

※便宜上getabako1とgetabako2という変数を入れています

getabako1 < getabako2;

=

演算8.PNG

※便宜上getabako1とgetabako2という変数を入れています

getabako1 = getabako2;

>

演算9.PNG
※便宜上getabako1とgetabako2という変数を入れています

getabako1 > getabako2;

1から10までの乱数

演算5.PNG
※便宜上getabakoという変数を入れています

int getabako = Random.Range (1, 10);

かつ

演算10.PNG

条件 && 条件;

または

演算11.PNG

条件 || 条件;

ではない

演算12.PNG

条件 = !条件;