しかし、数か月後、私たちの部署の人たちが自分のゲームの作成に取り組んでいることがわかりました。 私は興味がありました。クールだったので、頭の中にはたくさんの質問やアイデアがありました。 しかし、私自身は自分のゲームを作りたいと思っています。 ゲームを作成するとき、チームはどのように機能しますか? 雰囲気を維持するには?
私が彼らがすでにやったことを考えずに、ソーシャルネットワーク上の男に書いたとき、彼はプログラミングの先生だったので、彼を知っていました。 私は長い時間答えを待ってから、1時間ほど話しました。興味のある質問で彼を盛り上げ、彼はすぐに答えました。 最後に、「あなたとゲームを作りたい!」と言いました。 あなたの場所に連れて行ってくれませんか? 私はプログラムできます!」、彼は彼らにチームで考え、決定を下すと言った。 二日もたたないうちに、彼らは私に言った。
そして今、数日後、私たち全員が市内中心部の居心地の良いカフェに集まり、行動計画、現在の開発、アイデアについて話し合います。 私は彼らがどのように議論し、さまざまなプロトタイプの図面を見せているかを熱心に見ました。これはすべて新しくてとてもエキサイティングでした。 マルチプラットフォームであり、機能が常に成長しているため、新しいUnity3Dゲームエンジンを使用することにしました。 この決定は十分な理由があり、彼らは以前に他の多くのアナログと協力し、独自のXNAベースのエンジンを作成していました。 同意するしかありませんでした。
長い間、Unityの基本的な機能と操作を学ぶ必要がありました。 しかし、徐々にすべてが適所に落ち、最初の開発が判明し始めました。
最初に、3D地形の作成方法を学びました。平面の寸法を設定し、その上にさまざまな山と谷を描きます。 非常にリアルなレリーフを作成してから、テクスチャを適用し、水、空、太陽を作成すると、小さな仮想世界の準備が整います。 最初は、すべてがとてもシンプルだとは信じられませんでした。 次第に、私のタスクの範囲が拡大しました。カメラの操作、管理の作成...
私はチームが以前はまったく新しい人だったにもかかわらず、チームがさまざまな問題について簡単に話し合い、意思決定を行い、調整を導入し、コミュニケーションをとることができる友好的な雰囲気を持っているという事実が本当に好きでした。
しかし、最終的に、ゲームには多くの時間、労力、お金が必要になるという結論に達しました。そこで、現在のゲームプロジェクトを「フリーズ」することを決定し、現在の開発レベルに合わせて、より「リアルな」新しいプロジェクトの作成を検討し始めました。
さて、ここに私たちが得たものがあります:
「Spark」というコードネームの新しいゲームを実装するために、名簿にさらに2人のすばらしい男を補充することにしました。チーム編成のプロセスが完了し、チームは次のようになりました。
•プロジェクトマネージャー 、ビデオエディター、アニメーションウィザード。
•言葉で表せないほどグラフィックスを扱うアーティスト 。
• ユーザーインターフェイスとソーシャルネットワークの開発者 、実際、私;
• ゲームロジックのプログラマー、彼を「神からのプログラマー」と呼びます。
• 3Dモデラー 。この分野で素晴らしい経験を積んでいます。
2014年1月は寒かったので、私たちのチームはアイデアを実装するための新しいハードな方法を開始しました。 私たちはできるだけ頻繁に集まるようにしました。基本的には私たちの大学の学部で働いていました。良い部屋があり、それにお金を払う必要もありませんでした。 ゲームを作成するプロセスは興味深く、非常に困難でした。なぜなら、最初は非常に難しかった新しい追加プログラムとゲームエンジンのさまざまな機能を習得する必要があったからです。出て ゲームの作成速度がどれほど向上しているかを感じました。実装自体がすでに感じられていたため、新しいものを思いつく時間はありませんでした。 このような良い雰囲気の中で、私たちは約2か月間働いて、デモゲームを1つのレベル(研究場所)で終了しました。私たちは非常に満足しており、やめようとは思いませんでした。 NGUIでキーボードとジョイスティックのユーザーインターフェイスをどのように作成したかを本当に思い出しました。 私は非常に独創的で「理想的な」ソリューションに到達しました。各ボタンに対して、特定のキーストロークでスイッチがある3つのスプライト状態(通常、誘導、押下)を作成しました。それがすべてうまくいくこと。
GUIコード(キーボードのみ):
void Start () { // (-) buttonInputMenu.SetActive (true); buttonsMapMenu.SetActive (false); // 1 (InputMenu) int currentMenu = 1; // int currentButton = 1; } void Update () { // Esc, InputMenu if(Input.GetKeyUp(KeyCode.Escape) && currentMenu == 1) { // buttonMenuNormal.SetActive (true); buttonMenuHover.SetActive (false); buttonMenuClick.SetActive (false); buttonContinueNormal.SetActive (false); buttonContinueHover.SetActive (true); buttonContinueClick.SetActive (false); // InputMenu MapMenu buttonInputMenu.SetActive (false); buttonsMapMenu.SetActive (true); // , currentMenu = 2; } // Esc, MapMenu else if(Input.GetKeyUp(KeyCode.Escape) && currentMenu == 2) { // MapMenu InputMenu buttonInputMenu.SetActive (true); buttonsMapMenu.SetActive (false); // currentMenu = 1; } // ESC, InputMenu if(Input.GetKeyDown(KeyCode.Escape) && currentMenu == 1) { // , buttonMenuNormal.SetActive (false); buttonMenuHover.SetActive (false); buttonMenuClick.SetActive (true); } // MapMenu if(currentMenu == 2) { // if(Input.GetKeyDown(KeyCode.DownArrow) && currentButton == 1) { // buttonContinueNormal.SetActive (true); buttonContinueHover.SetActive (false); buttonContinueClick.SetActive (false); buttonBackMainMenuNormal.SetActive (false); buttonBackMainMenuHover.SetActive (true); buttonBackMainMenuClick.SetActive (false); // currentButton = 2; } // if(Input.GetKeyDown(KeyCode.UpArrow) && currentButton == 2) { // buttonContinueNormal.SetActive (false); buttonContinueHover.SetActive (true); buttonContinueClick.SetActive (false); buttonBackMainMenuNormal.SetActive (true); buttonBackMainMenuHover.SetActive (false); buttonBackMainMenuClick.SetActive (false); // currentButton = 1; } } // Space if(currentMenu == 2) { // , // Continue MainMenu, // if(Input.GetKeyDown(KeyCode.Space) && currentButton == 1) { buttonContinueNormal.SetActive (false); buttonContinueHover.SetActive (false); buttonContinueClick.SetActive (true); } if(Input.GetKeyDown(KeyCode.Space) && currentButton == 2) { buttonBackMainMenuNormal.SetActive (false); buttonBackMainMenuHover.SetActive (false); buttonBackMainMenuClick.SetActive (true); } if(Input.GetKeyUp(KeyCode.Space) && currentButton == 1) { buttonContinueNormal.SetActive (true); buttonContinueHover.SetActive (false); buttonContinueClick.SetActive (false); Continue (); } if(Input.GetKeyDown(KeyCode.Space) && currentButton == 2) { buttonBackMainMenuNormal.SetActive (true); buttonBackMainMenuHover.SetActive (false); buttonBackMainMenuClick.SetActive (false); MainMenu(); } }
このゲームでは、GamesJamKanobuおよびImagineCupコンテストに参加することにしました。
GamesJamKanobuに参加して、私たちは自分たちの創造物を人々に見せ、プレイヤーやゲーム業界の達人から高品質のフィードバックを得て、バグ修正とゲームへの願いと並行して開発を続けたかったのです。 ほぼ毎日、私たちのサイト用に新しいビルドを作成しました。誰でもそれをプレイしたり、意見を共有したりできます。 その結果、ノミネート「Working Version」で3位になりました。驚いたことに、ほぼ500のゲームがコンペティションに提出され、それらはすべて独自の美しさでした。
調査場所のスクリーンショット:
このような素晴らしい勝利の後、別のレベルを追加しました-ランナー、レイモンドレジェンド、オーディオサーフ、ギターヒーローなどのゲームからインスピレーションを得ました。 また、今回も必要なものが得られました。レベルは2週間で収集され、これは私たちにとって成長の指標でした。
スピードミュージックモード(ランナー)のスクリーンショット:
すでに真剣に準備していたImagineCupに行った新しいデモで、チームユニフォーム(パンツ、シャツ、署名パッチ付きベスト)を購入しました。 私たちがチームであることは明らかでした。これは群衆の中でも理解できるでしょう。 勇気を出して、地域の決勝戦で優勝しました。そこでは、非常に重要なスピーチの経験と、審査員からの素晴らしい推薦を得ました。 次のステップは、ロシアの決勝戦のためにモスクワを準備し、旅行することでした。今回は、プレゼンテーションの内容とプレゼンテーションに集中することに決め、成功しました。 最終的に、私たちのゲーム、特にOculusRiftを使用した「仮想現実」のレベルを本当に気に入っている多くの潜在的なプレイヤーを引き付けました。 審査員の決定により、ノミネート「ゲーム」で1位になりました。 この勝利により、現在取り組んでいるさらにいくつかの潜在的な機会が開かれました。
Imagine CupRussiaからの一般的な写真:
新しいイベントや情報が不足しているため、私の小さな話はここで終わります。
この記事は私たちのような初心者の開発者を対象に書かれており、モチベーションと高揚を目標としています。 過去6か月の間に、私は多くの良いプロジェクトを見ました-さまざまな理由で所有者によって放棄された潜在的なスタートアップです。 皆さん、あなたのプロジェクトを落とさないでください-彼らはユニークであり、あなたの仕事は彼らの論理的な終わりにそれらをもたらすことです。
読んでくれてありがとう。
がんばって。