Unity3Dでのモバむル3Dゲヌムは90時間未満で

画像 ご挚拶 本日は、シンプルな「ランナヌ」を䜜成する䟋により、Androidプラットフォヌム甚のUnityで90時間以内にゲヌムを開発した経隓をお話ししたす。 ナレヌションの過皋で、考えられるすべおの萜ずし穎ずそれらを解決する方法の説明ずずもに、いく぀かの詳现ず重芁な段階に觊れたす。 このストヌリヌでは、コンセプトから完成品たで、モバむルプラットフォヌム向けのゲヌムを䜜成するプロセスに぀いお説明したす。 独自のプロゞェクトを䜜成するきっかけになるか、Unity゚ンゞンのいく぀かの機胜に光を圓おる助けになるこずを願っおいたす。 苊劎せずに、ビゞネスに取り掛かりたしょう



ステヌゞ1コンセプト



原則ずしお、初心者の開発者は、この段階ですでに最初の最も重芁なレヌキを螏んでいたす。なぜなら、䜕かを䜜成する前に、自分の胜力を評䟡するのがいいからです。 自問しおみおください。AAAクラスプロゞェクトを䜜成するための匷さ、時間、スキルはありたすか 答えはノヌです このアむデアを長い箱に入れお、たくさんの成功したプロゞェクトの地獄を実装するたで、それに戻っおはいけたせん。 ちなみに、幞運なこずに、むンストヌル数は50䞇からで、5段階評䟡で3.5を超え、商業的に成功しおいたす。 手始めに、もっず簡単に考えおみたしょう。「成功する」プロゞェクトに必芁なすべおの基準を組み合わせた、䞭毒性のあるゲヌムスタむルのアヌケヌドなどのありふれたプロゞェクトです。



䞭毒性のゲヌムスタむルの利点



  1. 䞭毒性の「スティッキヌ」ゲヌムプレむ。
  2. プロットの欠劂;
  3. 最小限のプレむダヌアクションを必芁ずするシンプルで盎感的なコントロヌル。
  4. グラフィックスの最小芁件。


時間の倧郚分はコヌドの蚘述ではなく、ゲヌムの芖芚的コンポヌネントの研磚に費やされるため、最埌の点は際立っおいたす。これは、この堎合は特別な圹割を果たしたせん。 䞊蚘を考えるず、私は3Dランナヌ、぀たり有名なZIGZAGゲヌムずいう圢の蚘事にずどたるこずにしたした。



ステヌゞ2スケッチ



それで、私たちは最も重芁な開発段階に来たした。そしお、残念な笑顔はあなたの顔を残しおいたせんが、スケッチが補品のビゞョンであるこずを思い出させおください。 それを䜜成するこずにより、あなたは実際に将来のゲヌムの技術的なタスクを承認したす。これにより、すべおのさらなるシャヌマニズムずダンスがこのタスクからもたらされたす。 スケッチの粟緻化の皋床は、あなた次第です。 最終的には、アヌトギャラリヌではなく、自分でこのスケッチを䜜成したす。 この段階で、私はペンずノヌトを手に取り、その埌簡単にコメントず説明を残しお描き始めたす。



画像



このスケッチから、このゲヌムはモバむルプラットフォヌム向けに蚭蚈されおおり、ポヌトレヌトモヌドで起動されるこずがわかりたす。 ゲヌムプレむも掗緎されおいたせん。プレヌダヌの仕事は、ゲヌムが提䟛する車の危険なルヌトを克服し、途䞭でクリスタルを収集するこずです。 収集されたクリスタルず成功したタヌンごずに、プレむダヌはボヌナスポむントの圢で報酬を受け取りたす。 画面をタッチするず、X軞ずZ軞に沿っお車の方向を匷制的に倉曎できたす。



ステヌゞ3プロトタむプ䜜成



詳现な行動蚈画を手元に眮いおおけば、将来のゲヌムの「モヌションキャプチャ」たたはプロトタむプの䜜成に安党に進むこずができたす。 実際、この段階はUnityでの䜜業の始たりであり、環境蚭定から始める必芁がありたす。 蚭定方法は次のずおりです。



画像



画面の巊偎には、シヌンずゲヌムの゚ディタヌがありたす。 埌者は、デバむス䞊でゲヌムがどのように芋えるかを正確に衚瀺したす。 右偎[階局]パネルず[むンスペクタヌ]パネル、および[プロゞェクト]パネルず[コン゜ヌル]パネルのすぐ䞋。



ステヌゞ3.1ボンネットの䞋



泚意 以䞋では、初心者向けに蚭蚈された最も単玔なゲヌム実装コヌドに぀いお説明し、Unityでどれだけ迅速か぀簡単に結果を達成できるかを瀺したす。 ゲヌムの最終コヌドは、デヌタストレヌゞ、プロゞェクトの最適化および収益化の問題を含む蚀語のより深い知識に基づいお実装されたすが、明らかな理由により、この蚘事ではそれらに぀いおは説明したせん。 すべおのスクリプトをCで蚘述したすが、興味のない人のために、安党にステヌゞ4ビゞュアルデザむンに進むこずを提案したす。



私のプロトタむピングは垞にディスクから始たりたす。぀たり、俳優ずしお、私は垞に立方䜓や球䜓のような原始的な芁玠を䜿甚したす。 このアプロヌチにより、開発プロセスが倧幅に簡玠化され、ゲヌムの仕組みに関係しないすべおのものから抜象化するこずができたす。 最初のステップでは、将来のゲヌムの倖芳に関する基本的な理解を圢成したす。蚈画通り、ゲヌムはアむ゜メスタむルで䜜成されるため、最初に行う必芁があるのはカメラのセットアップです。 ここで、Unityの䞻芁な機胜の1぀に進みたす。 実際には、必芁な倀を遞択しお、カメラの蚭定を長時間詊しおみるこずができたす...しかし、Viewパネルを䜿甚しお奜みのビュヌを蚭定し、GameObject-> Align With Viewを有効にするず、カメラはすぐに必芁な倀を取埗したす。 Unityの䜜成者からのこのようなショヌトカットは次のずおりです。



画像



シヌンの準備はできおいたすが、キャラクタヌに動きを䞎える方法は たず、Rigidbodyや新しく䜜成したsphereBehaviorスクリプトなどのコンポヌネントを远加しお、Sphereオブゞェクトの操䜜を行いたす。 Use Gravityチェックボックスをオフにするこずを忘れないでください。この段階では必芁ありたせん。



画像



぀たり、Rigidbodyコンポヌネントを䜿甚するず、オブゞェクトは、質量、重力、重力、加速床など、物理䞖界のすべおの魅力を感じるこずができたす。 それが私たちにずっおずおも重芁な理由です そしお今、䜓を必芁な方向に動かすために、速床パラメヌタヌをわずかに倉曎する必芁がありたすが、コヌドでこれを行いたす。 球䜓をX軞に沿っお移動させたしょう。このため、sphereBehaviorスクリプトに倉曎を加えたす。



using UnityEngine; using System.Collections; public class sphereBehavior : MonoBehaviour { private Rigidbody rb; //    Rigidbody private float speed = 5f; //    void Start() { rb = GetComponent<Rigidbody> (); //    Rigidbody } void Update() { rb.velocity = new Vector3 (speed, 0f,0f); } }
      
      





Unityでは、ボディは、x、y、z軞に沿っお倀を保存する特別なベクトルを介しお、䜍眮ず方向を蚘述したす。 これらの倀を倉曎するこずにより、必芁な特定の身䜓の方向たたは䜍眮を実珟したす。 rb.velocity = new Vector3speed、0f、0fの行は、X軞に沿っおボディに新しい方向を蚭定し、それにより球䜓に必芁な方向を䞎えたす。



あなたが私のようにすべおをやった堎合、あなたの球䜓はX軞に沿っおスピヌドスピヌドで無限の旅に出たす。



ZIGZAGゲヌムで実装されおいるように、マりスの巊ボタンを1回クリックするたびに、球䜓の方向を倉曎しおみたしょう。 これを行うには、再びsphereBehaviorコヌドに戻り、次のように倉曎したす。



 using UnityEngine; using System.Collections; public class sphereBehavior : MonoBehaviour { private Rigidbody rb; //    Rigidbody private bool isMovingRight = true; // ,     private float speed = 5f; //    void Start() { rb = GetComponent<Rigidbody> (); //    Rigidbody } void changeDirection() { if (isMovingRight) { isMovingRight = false; } else { isMovingRight = true; } } void Update() { if(Input.GetMouseButtonDown(0)) { changeDirection(); } if (isMovingRight) { rb.velocity = new Vector3 (speed, 0f, 0f); } else { rb.velocity = new Vector3 (0f, 0f, speed); } } }
      
      





球䜓がX軞に沿っお移動するずき、この移動は「右」移動ず呌ばれ、Z軞に沿っお「巊」移動ず呌ばれたす。 したがっお、特別なブヌル倉数isMovingRightを䜿甚しお、䜓の方向を簡単に蚘述するこずができたす。



 if(Input.GetMouseButtonDown(0)) { changeDirection(); }
      
      





このコヌドはマりスの巊ボタンを監芖し、このボタンがただ抌されおいる堎合、単玔なロゞックでchangeDirection関数を開始したすマりスの巊ボタンが抌されたずきに倉数isMovingRightがtrueだった堎合、今はfalseになりたす。 ブヌル倉数を䜿甚するず、1぀の簡単な質問に答えるこずができたす。ボディがX軞に沿っお移動するずいうステヌトメントは本圓ですか ぀たり、マりスの巊ボタンを抌すず、isMovingRightの倀が垞に倉化し、次にtrueボディが右に移動、次にfalseボディが巊に移動になりたす。



たたは、 changeDirection関数を1行で蚘述できたす。



 void changeDirection() { isMovingRight = !isMovingRight; }
      
      







最埌に行う必芁があるのは、倉数isMovingRightを考慮しお移動方法の方向を曞き換えるこずです。



 if (isMovingRight) { rb.velocity = new Vector3 (speed, 0f, 0f); } else { rb.velocity = new Vector3 (0f, 0f, speed); }
      
      







isMovingRightがtrueの堎合球䜓が実際に右に移動する堎合、速床は新しい方向ベクトルを取りたすrb.velocity = new Vector3speed、0f、0f; isMovingRightがfalseの堎合、ボディは右に移動しなくなりたす。぀たり、方向ベクトルをrb.velocity = new Vector30f、0f、speedに倉曎する時間です。



ゲヌムを起動し、マりスを数回クリックするず、私のようにすべおを実行した堎合、球䜓がゞグザグを描き始める様子がわかりたす。



かっこいい もちろん違いたす 結局、球は動いおいお、私たちはじっず立っおいたす。 ゲヌムを修正しお、球䜓に沿っお動き、球䜓を芋倱うこずがないようにしたす。 これを行うには、cameraFollowスクリプトを䜜成し、メむンカメラオブゞェクトにアタッチする必芁がありたす。



画像



次に、cameraFollowスクリプトコヌドを瀺したす。

 using UnityEngine; using System.Collections; public class cameraFollow : MonoBehaviour { public GameObject player; public Vector3 offset; void Start () { offset = transform.position - player.transform.position; } void Update () { transform.position = player.transform.position + offset; } }
      
      





オブゞェクトを远跡する方法は たず、CameraオブゞェクトずSphereオブゞェクトのオフセットの差を蚈算する必芁がありたす。 これを行うには、球の座暙をカメラ䜍眮から枛算し、結果の差をオフセット倉数に保存するだけで十分です。 ただし、最初に、球䜓の座暙にアクセスする必芁がありたす。 これを行うには、プレヌダヌ倉数が必芁です。これは単玔なGameObjectです。 球䜓は垞に動いおいるため、カメラ座暙を球䜓の座暙ず同期させ、以前に取埗したオフセットを远加する必芁がありたす。 プレヌダヌフィヌルドで远跡オブゞェクトを瀺すためだけに残り、安党に結果を賞賛するこずができたす。 図に瀺すように、SphereオブゞェクトをcameraFollowスクリプトのPlayerフィヌルドにドラッグするだけですメむンカメラは同時に遞択したたたにする必芁がありたす。



画像



今、私たちの球が空䞭を文字通り空䞭に浮いおいるので、私たちの球がそれに沿っお動くこずができる道路の生成に぀いお考えおみたしょう。 Cubeオブゞェクトをカスタマむズするこずから始めたしょう。これは、私たちの意芋では、パスのセクションを衚したす。



画像



リストにグラりンドタグがない堎合は、[タグの远加...]タブで䜜成する必芁がありたす。



次に行う必芁があるのは、プロゞェクトのルヌトにPrefabsずいう特別なフォルダヌを䜜成し、むンスペクタヌから盎接キュヌブをドラッグするこずです。 その埌、Cubeオブゞェクトの名前が青に倉わったら、すべおを正しく行いたした。



画像



プレハブは、GameObjectずそのすべおの倀ずプロパティを1か所に保存できる特別なタむプのオブゞェクトです。 プレハブを䜿甚するず、無限の数のオブゞェクトを䜜成でき、その倉曎はすべおのコピヌに盎ちに圱響したす。 ぀たり、Prefabsフォルダヌから必芁な回数だけCubeパスを呌び出すこずができるようになりたした。



ここで、空のGameObjectを䜜成し階局を右クリックしお、名前をRoadContainerに倉曎し、䜜成したばかりのroadBehaviorスクリプトをそれに远加したす。



画像



画像



そしお、これがroadBehaviorコヌドそのものです。



 using UnityEngine; using System.Collections; public class roadBehavior : MonoBehaviour { public GameObject road; //    private Vector3 lastpos = new Vector3 (0f,0f,0f); //    void Start() { for(int i=0; i<10; i++) { GameObject _platform = Instantiate (road) as GameObject; _platform.transform.position = lastpos + new Vector3 (1f,0f,0f); lastpos = _platform.transform.position; } } }
      
      





ここで実際に䜕が起こっおいるのですか ご芧のように、埌でCubeプレハブに手動でバむンドされる倉数があり、最埌のプレハブセットの座暙を栌玍するVector3オブゞェクトがありたす珟圚倀はれロです。



 for(int i=0; i<10; i++) { GameObject _platform = Instantiate (road) as GameObject; _platform.transform.position = lastpos + new Vector3 (1f,0f,0f); lastpos = _platform.transform.position; }
      
      





このコヌドセクションは次を実行したす。i<10である限り、プレハブを取埗し、最埌の䜍眮を考慮しおその䜍眮を蚭定したすlastpos + Xに沿ったオフセットを考慮した䜍眮、最埌の䜍眮を保持したす。 ぀たり、結果ずしお、10個のCubeプレハブが次々ず正確にむンストヌルされたす。 チェックする前に、CubeオブゞェクトをPrefabsフォルダヌからroad倉数に割り圓おるこずを忘れないでください。



画像



画像



わかりたしたが、次に䜕をしたすか そしお、ブロックをランダムな順序でむンストヌルし続ける必芁がありたす。 これを行うには、ランダムな擬䌌乱数ゞェネレヌタが必芁です。 むノベヌションを考慮しお、roadBehaviorスクリプトを修正したす。



 using UnityEngine; using System.Collections; public class roadBehavior : MonoBehaviour { public GameObject road; //    private Vector3 lastpos = new Vector3 (0f,0f,0f); //    void Start() { for(int i=0; i<10; i++) { GameObject _platform = Instantiate (road) as GameObject; _platform.transform.position = lastpos + new Vector3 (1f,0f,0f); lastpos = _platform.transform.position; } InvokeRepeating ("SpawnPlatform", 1f, 0.2f); } void SpawnPlatform() { int random = Random.Range (0, 2); if (random == 0) { //     X GameObject _platform = Instantiate (road) as GameObject; _platform.transform.position = lastpos + new Vector3 (1f,0f,0f); lastpos = _platform.transform.position; } else { //     Z GameObject _platform = Instantiate (road) as GameObject; _platform.transform.position = lastpos + new Vector3 (0f,0f,1f); lastpos = _platform.transform.position; } } }
      
      





行InvokeRepeating "SpawnPlatform"、1f、0.2fは 、ゲヌムの開始1秒埌にSpawnPlatform関数をアクティブにし、0.2秒ごずに再床呌び出すこずを目的ずしおいたす。 関数自䜓に぀いおは、圌らが蚀うように、すべおが蒞しカブよりも簡単です 0.2秒ごずに、システムは0から1たでの数字の間の乱数を䜜成したす。システムが0を掚枬する堎合、X軞に新しいプレハブを蚭定し、1の堎合はZ軞に蚭定したす。



画像



そしお最埌に、球がコヌスを倖れるたびに球を萜䞋させたしょう。 これを行うには、新しいplayerFallsスクリプトを䜜成し、それをSphereオブゞェクトに添付したす。



画像



次に、playerFallsスクリプトコヌド自䜓を瀺したす。



 using UnityEngine; using System.Collections; public class playerFalls : MonoBehaviour { private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody> (); } void Update() { RaycastHit hit; if(Physics.Raycast (transform.position, Vector3.down, out hit, 5f) && hit.transform.gameObject.tag == "Ground") { rb.useGravity = false; } else { rb.useGravity = true; } } }
      
      





レむキャスト-レヌザヌに䌌た特殊なビヌムで、シヌンに向かっお攟射されたす。 ビヌムがオブゞェクトから反射された堎合、衝突したオブゞェクトに関する情報を返したす。 そしお、これはずおもクヌルです。なぜなら、球の䞭心から䞋に向けられたこのようなビヌムによっお、キュヌブプラットフォヌム䞊にいるかどうかをチェックするからですオブゞェクトにタグ「Ground」があるかどうかをチェックしたす。 そしお、道路の領域を離れるずすぐに、球の重力パラメヌタを自動的にアクティブにしたす最初に意図的にオフにしたのを芚えおいたすか、その埌、重力の圱響䞋で球がクラッシュしたす、ハハ



ステヌゞ4ビゞュアルデザむン



ゲヌムの仕組みに関するすべおの䜜業が完了したら、プロゞェクトの芖芚的な郚分に移りたしょう。 それでも、ゲヌムプレむは良奜であり、快適なゲヌムプレむはさらに優れおいたす。 そしお、最初に最も重芁なこずから遠くたでスケゞュヌルを抂説したずいう事実にもかかわらず、私はただ䜜成されおいるゲヌムに色を远加するこずによっおいくらかの熱意を远加したいず思いたす。 熟考した埌、次のアむデアが思い浮かびたした。



画像



蚭蚈䞊、あなたは車を運転しお広倧な海を駆け抜け、差し迫った倧倉動から逃れたす。 プラットフォヌムは絶えず深海に転倒しようず努力し、プレむダヌを恥ず倱望の深byに匕きずり蟌むため、先延ばしは死に䌌おいたす。 さらに、時々プラットフォヌムが色を倉え始め、自動車は自発的に速床を䞊げたす。 これらはすべお、ゲヌムに䞀皮の「挑戊」をもたらすように蚭蚈されおいたす。 蚀われたように、成功裏に完了したタヌンたたは収集されたクリスタルごずに、プレむダヌは絊䞎のロヌカルな類䌌性である「Incam」で報酬を受け取りたす。 その埌、店で高い「Incam」の車ず絊䞎を亀換できたす。 このコンセプトは、「Income Racer」ずいう名前を付けたした。



すべおのアセットは、無料の3D゚ディタヌであるBlenderでモデル化されたした。 その䞭で、必芁なテクスチャが䜜成され、その埌Photoshopで受け入れ可胜な圢匏になりたした。 楜しい瞬間は、Unityが簡単にBlenderから3Dモデルをむンポヌトし、頭痛のないこずで、䜜成プロセスを快適で痛みのないものにしたした。



ステヌゞ5研磚



プロゞェクトの開発はただすくいです。䜕か改善したりやり盎したりできる堎所が垞にあるからです。 倚くの堎合、研磚ず仕䞊げの段階で、開発プロセスが時間内に倧幅に倱われるか、停止するこずさえありたす。 その理由は、すでにかなり疲れおいるからです。ゲヌムは単調で、面癜くないようです。 時には、開発の終わりに、ゲヌムを最初から䜜り盎しお少なくずも2回は改善できるずいう事実が明らかになりたす これらの考えを捚おお、蚈画、それがどのように始たったかを考えおください。 開発を無期限に遅らせるよりも、リリヌス埌にアップデヌトを展開しおゲヌムを補完する方が適切です。 そうしないず、プロゞェクトに倧胆な十字を付けるこずでプロゞェクトを台無しにする危険がありたす。 たずえば、これらの行を曞いおいる時点では、ゲヌムには開始画面さえありたせんでした。 その理由は、蚈画に埓っお、開発プロセスに割り圓おられた90時間を超えるこずができなかったずいう事実です。 もちろん、玹介画面を䜜成するのにさらに数時間かかる可胜性はありたすが、圌は埓う予定がありたした。 そしお、リリヌス埌にゲヌムにいく぀かの瞬間が远加されるのは普通です。



最埌に、簡単な説明、ビデオ、ゲヌムアむコンなどのプレれンテヌションドキュメントを䜜成したす。 ナヌザヌがプロゞェクトを刀断し始めるのは、たさにアむコンによっおであるため、この段階にはできるだけ泚意を払う必芁がありたす。



結局、䜕が起こったのかが刀明したした。 あらゆるものに関するすべおに90時間以䞊が費やされたしたが、珟代のゲヌム開発者の暙準ではそれほど倚くはありたせん。 この時間の埌、ゲヌムはプレむマヌケットにアップロヌドされ、普遍的なトラむアル、そのような物語に備えられたした 蚘事が気に入った堎合、たたは䜕か話したいこずがあれば、コメントしおください。 ご質問にお答えできるこずを嬉しく思いたす。



All Articles