Unity 5でのAndroidゲーム開発。アイデアから収益化まで(ライブ)

こんにちはHabr。 Unity 5バージョンでクイズゲームを開発した経験を共有したいと思います。 同様のゲームは2014年に既にリリースされており、ダウンロード数は7800でした。 ひどい実装のため、ゲームは削除の80%を獲得し、プロジェクトは放棄されました。 新しいゲームでゲームを開始して、前任者のエラーを修正してみましょう。



この記事では、次のようなトピックを検討します。



  1. ゲームのアイデア
  2. プロジェクト構造
  3. ゲームロジックの機能と実装方法
  4. アプリ購入および公式AdMobプラグインでの収益化ツールの実装
  5. プロモーション


ゲームのアイデア



ゲームのアイデアはシンプルです。 人気のある曲を絵文字絵文字の形式で暗号化し、ユーザーに復号化を提供します。



画像












公開時点では、Google Playに類似したロシア語のゲームはありません。



プロジェクト構造



Unityで開発する場合、パターンを使用しませんが、ロジックをディスプレイから分離しようとします。















Display(Canvas)ゲームオブジェクトはUIの親要素であり、UI全体にアクセスするためのクラスであるGameDisplayがハングします。 インターフェイス全体は親ディスプレイ(キャンバス)でホストされ、必要に応じて、GameDisplayクラスを介してUI要素を参照します。



UIとの対話を処理するには、空のHandlersゲームオブジェクトを作成し、ボタンクリックを処理するメソッドを含むクラスをその上に配置します。



グループ化の便宜上、これらすべてを空のUIゲームオブジェクトに配置します(インターフェイス要素ではなく、表示されません)。



GameDisplayクラスの例
public class GameDisplay : MonoBehaviour { public GameObject LevelNumText; public GameObject InputField; public static GameObject StaticInputField, StaticAlertsText; public GameObject AlertsText; float AlertHideTimer = 4f; void Awake() { //     UI  static    StaticInputField = InputField; StaticAlertsText = AlertsText; }
      
      







ハンドラークラスの例:
 namespace NavigationHandlers { public class NavigationHandlers : MonoBehaviour { public void LoadHowToPlayScene() { SceneManager.LoadScene(1); } public void StartGame() { SceneManager.LoadScene(2); } public void BackToMainMenu() { SceneManager.LoadScene(0); } } }
      
      







Levelsオブジェクトには、Level_(num)レベルが含まれています。 スクリーンショットからわかるように、Level_1はグリッドレイアウトグループコンポーネントを含むUI要素です。 Level_1には、絵文字を表示し、親コンポーネントのおかげでグリッドにグループ化される子画像要素が含まれます。



ゲームロジックとデータストレージの機能



少量のゲームデータ(アカウント\プレイヤー名など)を保存するには、DBクラスで便利なようにラップされたPlayerPrefsを使用します。



DBクラスの例:
 public class Db : MonoBehaviour { public static List<string> answers = new List<string>(); public static void SaveDb() { PlayerPrefs.Save(); } public static int CurrentLevel { get { return PlayerPrefs.GetInt("CurrentLevel"); } set { PlayerPrefs.SetInt("CurrentLevel", value); } }
      
      







これにより、 データベースに便利にアクセスできますDb.CurrentLevel = Db.CurrentLevel + 1;



ゲームのロジックは複雑ではなく、 Gameの1つのクラスで構成されています。 デフォルトではすべてのレベル( Levelタグがあります)がアクティブになっています。 私たちのタスクは、現在のCurrentLevelを除き、検索して無効にすることです。



 //      Levels = GameObject.FindGameObjectsWithTag("Level"); //   foreach (GameObject Level in Levels) { //        if (Level.gameObject.name != "Level_" + Db.CurrentLevel + "") { Level.gameObject.SetActive(false); } //    else { Level.gameObject.SetActive(true); } }
      
      





アプリ購入および公式AdMobプラグインでの収益化ツールの実装



以前は、Admobサービスとゲーム内購入に「自作」ツールを使用していました。 UnityとGoogleはすぐに使える優れた\便利な\シンプルなプラグインを提供します。 広告用のプラグインはここからダウンロードできますが、Unity自体のアプリ購入→サービスの場合。 ダウンロードし、すべてをプロジェクトにアップロードして使用します。 公式の例とドキュメントは優れています。



プロモーション



私は5の不正行為\ダウンロード\コメントadvertmobileapptoolsのサービスを使用していました。 これらのツールを使用しないことを強くお勧めします。 ビーバーコーポレーションのスタッフは真剣に取り組んでおり、ラップされたレビューは削除されて表示されません。



ゲームは5日目にGPでダウンロード統計をダウンロードします: 228/459 (ゲーム購入+1)。 adMobには5,900インプレッションと6ドルがあります。 231件の削除がありましたが、やるべきことがあります。 おそらく、品質が不十分であるか、ゲームが期待どおりに機能しませんでした。 ゲームをプレイする「リーダーボード」によると、人々はメールで私に手紙を書き、ヒントを求めます。



プロモーションには、テーマフォーラム、VKグループ、ブログ記事、電報グループ、 Habrahabrを使用します。 以前のバージョンと同様に7800のダウンロードを取得できますか、またはインディーズ向けGPが理解不能になりましたか? この質問に対する答えは、必要に応じて、次回のロジックのより詳細な分析を要求します。



All Articles