カロリーメイトください

Barbaroi Ware(バルバロイ・ウェア)という名前でアプリ開発してます

【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter02 放置ゲームを作ろう」4

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

寒い。

寒暖差に体がついていけなくなりそう。
とりあえず、葛根湯で耐える。

進捗

  • Chapter02 放置ゲームを作ろう
    • 2-2 オーブを産み出そう

コード実装部分(一部)

(PlantUML)

@startuml TheTemple
namespace Orb{
    class OrbDeleter{
        ~ Delete() : void
    }

    class OrbGenerateTimeManager{
        + OrbsManager
        + OrbGenerator
        - lastOrbGenerateTime : DateTime
        + GENERATE_SPAN_SEC : const int
        - Start() : void
        - Update() : void
    }
    OrbGenerateTimeManager --> OrbsManager
    OrbGenerateTimeManager --> OrbGenerator

    class OrbGenerator{
        + OrbsManager
        + orbPrefab : GameObject
        + OrbPositionRandomSetter
        + sprites : Sprite[]
        - Start() : void
        ~ GenerateOrb() : void
    }
    OrbGenerator --> OrbsManager
    OrbGenerator --> OrbPositionRandomSetter

    class OrbPositionRandomSetter{
        + canvasGame : GameObject
        - minViewPosition : const Vector3
        - maxViewPosition : const Vector3
        ~ SetRandomPosition(GameObject) : void
    }

    class OrbsManager{
        + MAX_ORB : const int
        - currentOrb : int
        - Start() : void
        ~ GetMaxOrb() : int
        ~ GetCurrentOrbMaxOrbDifference() : int
        ~ DeleteOrb() : void
        ~ GenerateOrb() : void
    }

    class OrbTouchHandler{
        + ScoreManager
        + ScoreDisplayer
        + OrbDeleter
        + OrbsManager
        + TempleScaler
        + LevelUpChecker
        + Touch() : void
    }
    OrbTouchHandler --> Score.ScoreManager
    OrbTouchHandler --> Score.ScoreDisplayer
    OrbTouchHandler --> OrbDeleter
    OrbTouchHandler --> OrbsManager
    OrbTouchHandler --> Temple.TempleScaler
    OrbTouchHandler --> Score.LevelUpChecker

    class OrbData{
        - orbKind : GameEnum.ORB_KIND
        + ScoreManager
        ~ GetScore() : int
        ~ SetOrbKind() : void
        ~ GetOrbKind() : GameEnum.ORB_KIND
    }
    OrbData --> Score.ScoreManager
    OrbData --> Enum.GameEnum
}

namespace Score{
    class ScoreDisplayer{
        + scoreManager : GameObject
        - Start() : void
        ~ RefreshScoreText() : void
    }

    class ScoreManager{
        - score : int
        - level : int
        - nextScore : int
        - nextScores : int[]
        - isClearFlag : bool
        ~ GetMaxLevel() : int
        ~ AddScore(int) : int
        ~ GetLevel() : int
        ~ IsClear() : bool
        ~ GetScore() : int
        ~ NextLevel() : bool
        ~ GetNextScore() : int
    }
    ScoreDisplayer --> ScoreManager

    class LevelUpChecker{
        + ScoreManager
        + EffectGenerator
        + TempleSpriteChanger
        ~ Check() : void
    }
    LevelUpChecker --> ScoreManager
    LevelUpChecker --> Effect.EffectGenerator
    LevelUpChecker --> Temple.TempleSpriteChanger
}

namespace Effect{
    class EffectGenerator{
        + ScoreManager
        + smokePrefab : GameObject
        + kusudamaPrefab : GameObject
        + canvasGame : GameObject
        ~ GenerateEffect() : void
    }
    EffectGenerator --> Score.ScoreManager
}

namespace Temple{
    class TempleScaler{
        + ScoreManager
        ~ Scale() : void
    }

    class TempleSpriteChanger{
        + sprites : Sprite[]
        + imageComponent : Image
        ~ ChangeTempleSprite(int level) : void
    }

}

namespace Enum{
    class GameEnum{
        + ORB_KIND : enum
    }
}
@enduml

GitHub

github.com

実行結果

www.youtube.com

クラス図

f:id:yjkym:20180927155703p:plain

感想

クラス図が大きくなってきたー。
今はできあがったコードからクラス図を書き直しているけど、本来はクラス図を書いてからプログラミングしないといけない。
システム全体の理解の手助けにはなるから、意味がないとはいわないけれど。

しかしUnityはGame Objectを経由して別のスクリプトにアクセスするっていうことがあるから、これを普通のオブジェクト指向プログラミングに適用するとまた別の問題が出てきそうだ。
自由度が高い=不安というのは人生と同じだ。(なんだそのまとめは)

カロリーメイトください。

BGM

GOOD MUSIC / 秋山羊子 www.youtube.com この発想はなか(ry