節電鯖民の遊び場

07-レベルアップする茜ちゃん

最終更新:

mcforum

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

目次


できたもの



前提


レベルアップ/ダウンする茜ちゃんのアニメーションを作る

+ 詳細を開く
  • 茜ちゃんを選択して、Create New Clip.... から新しいアニメーションが追加できる。

レベルアップのアニメーション


レベルダウンのアニメーション



アニメーションコントローラーに登録する

+ 詳細を開く

レイヤーの追加

  • 今回はクリックのアニメーションに加算して再生させる
  • Animator の Layers を開いた際に表示される + ボタンから、新しいレイヤーを作成する。
    • ここでは LevelUp や LevelDown とする

レイヤーの設定

  • レイヤーの右端の歯車を押して設定画面を開く
  • Weight は 1 にする(ここは中途半端にするといい感じに合成してくれるかも。お好み)
  • Blending は Additive を選択

トリガーの設定

  • トリガーの設定をする
    • LevelUp時はlevelup、LevelDown時はleveldownトリガーを発生させるように
    • 矢印は該当アニメーションに向かう矢印にトリガーの設定をしたのみで、その他は未調整


AkaneController でレベルアップアニメーションの制御をする

+ 詳細を開く
  • 今回はカウントを 100 で割った値をレベルとし、上がった際にはLevelUpアニメーションを再生し、下がった場合にはLevelDownアニメーションを再生する。
+ 詳細を開く
  1. using UnityEngine;
  2.  
  3. public class AkaneController : MonoBehaviour, ICounterReceiver
  4. {
  5. public GameObject akane;
  6. Animator anime;
  7. int prevLevel;
  8.  
  9. void Start()
  10. {
  11. anime = akane.GetComponent<Animator>();
  12. prevLevel = 0;
  13. }
  14. public void UpdateCounter(int count) {
  15. // 数値変動に応じてアニメーションする
  16. anime.SetTrigger("click_cancel");
  17. anime.SetTrigger("click");
  18.  
  19. int currentLevel = count / 100;
  20. if (prevLevel < currentLevel) {
  21. // LevelUp
  22. anime.SetTrigger("levelup");
  23. prevLevel = currentLevel;
  24. } else if (prevLevel < currentLevel) {
  25. // LevelDown
  26. anime.SetTrigger("leveldown");
  27. prevLevel = currentLevel;
  28. }
  29. }
  30. }
  31.  



概ねレベルアップに合わせて茜ちゃんを大きくする(厳密にはカメラのサイズを大きくする)

+ 詳細を開く

茜ちゃんのオブジェクトをCanvas上配置に変更

  • まず、茜ちゃんは画面対比率を固定するため、Canvas 配下に配置するよう変更

カメラ用のControllerスクリプトを追加

  • 新しく CameraController を作成し、カメラにコンポーネントとして追加する。
    • CameraController で、カウントの更新に応じてカメラのSizeを変更する。
    • 暫定で適当な値までを設定
+ 詳細を開く
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3.  
  4. public class CameraController : MonoBehaviour, ICounterReceiver
  5. {
  6. Camera cam;
  7. Dictionary<int, float> camSizeMap = new Dictionary<int, float>() {
  8. {0, 5.0f},
  9. {25, 7.0f},
  10. {50, 8.0f},
  11. {100, 12.0f},
  12. {200, 15.0f},
  13. {300, 17.0f},
  14. {400, 18.5f},
  15. {500, 20.0f},
  16. {600, 22.0f},
  17. {700, 24.0f},
  18. {800, 26.0f},
  19. {900, 28.0f},
  20. {1000, 30.0f},
  21. {1100, 32.0f},
  22. {1200, 34.0f},
  23.  
  24. };
  25. float prevsize;
  26. void Start()
  27. {
  28. cam = gameObject.GetComponent<Camera>();
  29. prevsize = 0;
  30. }
  31. public void UpdateCounter(int count) {
  32. float targetSize = 0;
  33. foreach(KeyValuePair<int, float> pair in camSizeMap) {
  34. if (count < pair.Key) {
  35. break;
  36. }
  37. targetSize = pair.Value;
  38. }
  39. if (prevsize != targetSize) {
  40. cam.orthographicSize = targetSize;
  41. prevsize = targetSize;
  42. }
  43. }
  44. }
  45.  

MainCamera を GameController のリストにドロップして、カウンタ更新通知対象として登録する。


目安箱バナー