節電鯖民の遊び場

02-茜ちゃんをクリックしたら葵ちゃんを散らせる

最終更新:

mcforum

- view
メンバー限定 登録/ログイン

目次


できたもの


前提


素材集め

+ 詳細を開く

葵ちゃんをPrefab化

+ 詳細を開く
  • まず前回の茜ちゃん同様、適当に画像ファイル郡をAssetsに格納し、Sceneかヒエラルキーにドロップで配置する
    • 名前は管理上わかりやすくするため"葵"にしておく
    • 後に大量に散らせる予定であるが、茜ちゃんと比較していい感じのサイズ感にしておく。

  • また、この後物理演算に任せるため RigidBody 2D と Capsule Collider 2D のコンポーネントをつけておく
    • Gravity Scale は 2 ぐらいにしておく (再生しながらお好みで変更、後で調整でも良い)
    • Capsule Collider 2D のサイズはいい感じのサイズにしておく。
      • 葵ちゃん同士で重なることを考えると体のグラフィックの範囲内に収まった方が違和感が無いと思われる。

  • AssetsにPrefabディレクトリを作成し、ヒエラルキーにある"葵"インスタンスを掴み Assets/Prefab ディレクトリにドロップする。
  • また、ヒエラルキーの"葵"インスタンスは削除しておく。

  • 今後葵ちゃんに何か編集する場合はPrefabを選択してインスペクターで操作すること。
    • 場合によっては一旦Sceneに配置して、編集してから配置したインスタンスのインスペクターから Overrides メニューの Apply All を用いてPrefabに上書きしても良い。


クリックしたら葵ちゃんを増やして散らせる

+ 詳細を開く
  • ざっくりした仕様
    • クリックしたら茜ちゃんの中心座標から葵ちゃん出現させる
    • 上左右方向180度のランダムな方向に射出する
    • 重力に従って葵ちゃんが落下する
    • 射出された葵ちゃんはランダムな回転速度でくるくる回る
  • 上記を満たすスクリプトを、クリック時のスクリプトに追記する。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Click : MonoBehaviour
  6. {
  7. Animator anime;
  8.  
  9. // 生成するprefab を簡単に差し替えできるよう public で外部から変更できるようにしておく
  10. public GameObject prefab;
  11.  
  12. // 速度は適切な速度を探れるように、publicで外部から変更できるようにしておく
  13. public float prefabSpeed = 1000;
  14. public float prefabTorque = 300;
  15. void Start() {
  16. anime = GetComponent<Animator>();
  17. }
  18. void Update() {
  19. if (Input.GetMouseButtonDown(0)) {
  20. anime.SetTrigger("click_cancel");
  21. anime.SetTrigger("click");
  22.  
  23. // prefab からインスタンスを生成
  24. GameObject aoi = Instantiate(prefab, gameObject.transform.position, Quaternion.identity);
  25. Rigidbody2D aoiBody = aoi.GetComponent<Rigidbody2D>();
  26.  
  27. // 上方向のランダムな方向を決定
  28. Vector2 direction = Random.insideUnitCircle.normalized;
  29. direction.y = Mathf.Abs(direction.y);
  30.  
  31. // ランダムな回転速度を決定、整数にしたとき2で割り切れない場合は逆回転にする
  32. float torque = Random.value;
  33. if ((int)(torque*100) % 2 == 1) {
  34. torque *= -1;
  35. }
  36.  
  37. // 生み出した葵ちゃんに力を与える
  38. aoiBody.AddForce(direction * prefabSpeed, ForceMode2D.Force);
  39. aoiBody.AddTorque(torque * prefabTorque, ForceMode2D.Force);
  40. }
  41. }
  42. }
  43.  

目安箱バナー