パズルゲームネオアングル。 Unityでレベルを操作する





すべての人に良い一日を! 私の新しいNeo Angleパズルゲームのストーリーをお伝えし、Unityでレベルをインポート、保存、生成した経験を共有したいと思います。



大学で最初にプログラミング言語アクションスクリプト3.0(フラッシュゲームの開発用)に精通した5年前の短い歴史から始めます。



学期を終えて、私は自分のゲームをマスターできると決めました。 したがって、ノートブックと鉛筆の後ろにしばらく座った後、三角形のパズルのアイデアが浮上しました。プレイヤーは、三角形の石を回して所定のフォームに記入し、フィニッシュセルでレベルを仕上げる必要があります。



したがって、開発だけに1週間費やして、最初のフラッシュゲームSeaQuestがリリースされました。







そして、さらに発展させる必要がありました。 さらにいくつかのポータルフラッシュドライブをリリースした後、三角形でアイデアに戻り、ゲームプレイが完全に再設計された新しい部分、つまり、障害物、テレポーター、回転子を持つボタンが追加されました。 レベルの目標も変更され、すべての真珠を収集してフィニッシュラインに到達する必要がありました。





ストーンクエストという結果



このロジックゲームのラインは終了し、私に忘れられました。



これに続いて、フラッシュ業界の約束された崩壊が起こり、それが私をモバイル向けの統一開発に追いやった。 それで、2016年12月に、偶然に三角形指向のパズルの考えが頭に戻りました。 特に、ゲームプレイがタッチスクリーンに最適であるという事実の開発を推進しました。 前のゲームのメカニズムを使用することが決定されましたが、スタイルが異なります。



ここに、1か月半の活発な開発につながった背景があります。 奇妙なことに、ほとんどの作業はゲームデザインに費やされました。 前のバージョンから、ほとんどすべてのレベルが十分に面白くないように思えましたが、ゲームプレイの可能性ははるかに大きな可能性を秘めています。 その結果、開発はレベルエディターから始まりました。これは、書かれたレベルをテストし、xmlでエクスポート/インポートする機能を備えた、古き良きフラッシュで夜に書いたものです。



エディターでの作業の結果を以下に示します。







Unityを使い始める前に、さまざまなコンテンツを必要とするモバイルゲームに十分なレベルを提供できるようにする必要がありました。 したがって、最初の1週間半は、Unityを開くことさえしませんでしたが、グラフィックスをしながらエディターで働いていました。 ちなみに、80年代のシンセウェーブのレトロなスタイルが人気を集めていました。 実行するのは非常に簡単ですが、非常に魅力的です。







したがって、有効なレベルのセットを作成したので、それらをUnityに移植し始め、新しいレベルの完成と作成に時間の一部を費やし続けました。



この点に関して、次の質問が生じました:XMLファイルからUnityでレベルをインポート、保存、生成する方法は?



3つの解決策が見つかりました。



1.ゲームの開始時に、xmlファイルを読み取り、実行時に毎回動的にレベルを作成します。

2.編集モードで、レベルを生成し、シーンごとに作成します。

3.編集モードで、レベルを生成し、それぞれのプレハブを作成します。



明らかに、最初のオプションは最良ではありません。なぜなら、 すべてのレベルは事前に準備されており、毎回再作成する意味はありません。 2番目のオプションは、各レベルに独自のロジック、インターフェイス、構造などがある、より複雑で大規模なプロジェクトにより適しています。 私の場合、各シーンのインターフェイスとキーオブジェクトをレベルで複製する必要があり、UIが変更されるたびに、すべてのシーンを更新する必要があります。 最後の3番目のオプションが残っていますが、これは非常にうまく機能しました。 その実装についての話を続けます。



編集モードでオブジェクトを操作するには、Unityエディターでカスタムパネルを追加します。 これを行うには、 Assets / EditorフォルダーにEditorWindowから継承したクラスを作成し、そこに次のメソッドを追加します。



[MenuItem ("Window/Level Loader")] // Level Loader -     Window. public static void ShowWindow () { EditorWindow.GetWindow(typeof(LevelLoader)); // LevelLoader -    }
      
      





パネルがWindow-> Level Loaderで作成されたことをすぐに確認します。







さらに、OnGUIメソッドでは、ウィンドウのボタンとフィールドの追加を開始できます。



基本的な例:



 void OnGUI() { GUILayout.Label ("Custom Label", EditorStyles.boldLabel); //   //     GameObject GameObject customGO = EditorGUILayout.ObjectField(customGO, typeof(GameObject), true) as GameObject; int customInt = EditorGUILayout.IntField(customInt); //     int  EditorGUILayout.Space(); //    if (GUILayout.Button("Custom Button")) //      { ButtonHandler(); } }
      
      





コンポーネントの詳細については、公式ドキュメントをご覧ください。 そして、レベルローダーの説明を続け、以下の動作原理を示します。







まず、Read Levelsをクリックしてxmlファイルからレベルを差し引きます。その後、レベルを選択する機能を備えたドロップダウンリストが作成され、シーンでレベルを生成、選択したレベルのプレハブを作成、すべてのレベルのプレハブを再作成、番号を表示/非表示できる追加のコントロールが表示されますフィールド(レンダリングおよび追跡エラーのテスト用)。



編集モードでシーンにオブジェクトを作成するには、標準のInstantiate関数を使用し、 DestroyImmediateを削除します



しばらくの間、レベルプレハブをシーンからResourcesフォルダーにドラッグして手動で作成しました。 しかし、すぐに気になり、プログラムで編集モードでプレハブを作成する方法についての情報を求めてオンラインに行きました。 以下は、これを行うための設計です。



 private void CreateLevelPrefab() { GameObject levelGO = GameObject.FindGameObjectWithTag("Level").gameObject; //   Level      Object levelPrefab = EditorUtility.CreateEmptyPrefab("Assets/Resources/"+levelGO.name+".prefab"); EditorUtility.ReplacePrefab(levelGO, levelPrefab, ReplacePrefabOptions.ConnectToPrefab); }
      
      





さらに、ゲームモードでは、次のようにレベルがシーンに追加されます。



 GameObject levelGO = Instantiate (Resources.Load ("Level"+levelNum) as GameObject);
      
      





したがって、レベルを追加する段階は次のとおりです。





それだけです 私にとって、これは編集モードでのオブジェクトの最初の経験でした。 Flashをバイパスして、Unityに直接レベルエディタを実装することに関するあなたのアイデアを知りたいと思います。



ご清聴ありがとうございました! Neo Angleのリクエストにより、 Google Playでゲームをプレイできます。



All Articles