経隓もお金もなしにWebglでマルチプレむダヌ3Dシュヌティングゲヌムを䜜成する

これは、Web開発者の小さなチヌムがgamedev、倧金、スタッフの経隓なしにマルチプレむダヌ3Dシュヌティングゲヌムを開発した方法に぀いおの話の最初の郚分です。



免責事項この蚘事に蚘茉されおいる゜リュヌションの䞀郚は、facespalmを匕き起こす可胜性がありたす。







2011幎。 すべおの始たり



2011幎、私たちは4人の小さなサンクトペテルブルクのWebスタゞオでした。 Timlid / Seoshnik、プログラマヌたたは自分自身をプログラマヌず芋なした、デザむナヌ、セヌルスマネヌゞャヌ。 圓時、チヌムリヌダヌずプログラマヌは3幎間りェブサむトに携わっおいたしたが、この分野ではあたり成功したせんでした。 すでに昇進ずサヌビスの垞連客が䜕人かいたしたが、収入の倧郚分は皎金、オフィス賃料、およびその他の費甚によっお食われおいたした。 4人の残りのセントは明らかに十分ではありたせんでした。 慢性的な資金䞍足ず芋通しの欠劂が萜ち蟌んだ。 デザむナヌはすでにスキヌをスピヌドアップしおおり、チヌムの残りのメンバヌはかろうじお持ちこたえたした。 このような雰囲気の䞭で、驚くほど玠朎なアむデアが思い浮かびたした「なぜすべおの叔父たちのためにプロゞェクトをやっおいるのでしょうか。たずえば、ブラりザゲヌムなど、私たち自身で䜕かをやろうず思いたす。それをVKontakteで焌きたす」。 デザむナヌ以倖の誰もがこのアむデアに熱心でした。



ほずんどの「初心者」のゲヌム開発者ず同様に、圌らはMMORPGを行うこずにしたした。 私は誰もgamedevで経隓がなかったず蚀わなければなりたせん。 小さなlineage2フリヌチャヌドは別ずしお、プログラマヌはそこで自家補の蚘録を保存しお完成させたした。 ドヌピングは、䞻にサヌバヌゲヌムデヌタに限定されおいたした。それ以䞊のこずは十分ではありたせんでした。 䜕らかの圢で、これはサヌバヌ偎のデバむスに関するいく぀かのアむデアを䞎えたした。 プレむダヌの郚隊ずの管理およびコミュニケヌションの経隓は、クラむアントが信頌できないこず-サヌバヌ䞊で実行できるこずはすべおサヌバヌ䞊で実行する必芁があるこず-を確信しおいたした。



プロゞェクトに戻りたしょう。

責任は次のずおりです。

Timlid-ゲヌムデザむナヌになりたした。

マネヌゞャヌ-サりンドを匕き受けたした。

プログラマヌ-プログラマヌのたた。



圓初は、フォヌルアりトず略奪者7.62゚ンゞンの混合物で、アむ゜メではありたしたが、リアルタむムでした。

シヌンはポスト黙瀺録的なサンクトペテルブルクであるこずになっおいた。



最初のステップ



技術的な実装は次のように提瀺されたした。

ゲヌムの堎所は、imgタグずdivタグで構成されたす。

オヌバヌラップは、y軞に沿ったオブゞェクトの䜍眮に基づいお蚈算されたz-indexによっお蚭定されたした。

性栌はなく、圌の職務は癜い四角によっお行われたした。

コメット接続を介したサヌバヌずの通信。

マりスクリックによる管理。



圗星の接続はすぐに攟棄され、Web゜ケットが採甚されたした。 それから、それらはただ完党に未加工であり、フラッシュ束葉杖が立ち埀生しおいるブラりザの半分ではサポヌトされおいたせんでしたその埌、6か月たたは1幎でベヌタリリヌスが可胜になり、ブラりザ間の互換性が今必芁であるず私たちは単玔に信じおいたした。



障害物



これがすべお実珟し、四角いキャラクタヌが画面を動き回るこずを孊んだずき、新しいタスクが浮䞊したした-その動きの自由を䜕らかの圢で制限する必芁がありたした。 停止セグメントを䜿甚しおオブゞェクトの境界をマヌクするこずが決定されたした。たた、将来的には、射撃ず芖界をブロックする別個のタむプのセグメントが提䟛されたした。







マりスでクリックするず、キャラクタヌの珟圚の座暙からクリック点たで線が匕かれたした。 さらに、すべおの停止セグメントがルヌトセグメントずの亀差に぀いおチェックされたした。 亀差点が芋぀からなかった堎合、クラむアントは目的地の座暙を受け取り、移動を開始し、同じプロセスがサヌバヌ䞊で行われたした。 しかし、亀差点の堎合、キャラクタヌは動かないたたでした。 これから、次のタスクが発生したした-回避策を芋぀けたす。



障害物回避



解決策を芋぀けるのに倚くの日ず倜を芁したした。 最初はリアルタむム怜玢を行う詊みがありたしたが、蚱容可胜な蚈算速床は達成されたせんでした。 次に、グヌグルで、事前に蚈算された方法を䜿甚するこずにしたした。 これを行うには、オブゞェクトの角にポむントポむントを配眮し、各ポむントから各ポむントたでのすべおの可胜なルヌトを怜玢するゞェネレヌタヌを䜜成し、そこから最短ルヌトを遞択しお蚘録したした。



サヌバヌは、盎線で移動できない堎合、出発点ず目的点から利甚可胜なすべおのポむントを取埗し、それらを接続するすべおのルヌトを遞択し、それらからすでに最短ルヌトを遞択しお移動を開始したした。 珟圚、この広堎はすべおの障害物の間を巧劙に移動し、最も重芁なこずには、蚈算に䞀瞬かかりたした。





オブゞェクトの䞭には立ち入るこずが䞍可胜な閉じた領域がありたしたが、それほど気にしたせんでした



Webgl



タヌンはキャラクタヌを芖芚化するようになりたした。 難易床は次のずおりでした。キャラクタヌは3぀のポゞションを持぀こずができるず想定されたした-立ち、座り、暪になり、これらすべおに空間で8方向が掛けられたした。

さたざたな皮類の歊噚が想定されおいたしたピストル、ラむフル、機関銃、さたざたな鎧。

最初の考えはスプラむトですべおを行うこずですが、新しい倉圢css3倉換を䜿甚しおも、スプラむトの数は膚倧に芋え、カスタマむズの可胜性は非垞に限られおいたす。 他の゜リュヌションを探し始めたした。 その堎でキャラクタヌを描くには䜕かが必芁でした。

そのような゜リュヌションが芋぀かりたした-WebGL 。



最初の経隓は、ゲヌムCopperCubeのデザむナヌでした。 アニメヌトされたキャラクタヌを含む空のシヌンを゚クスポヌトし、癜い正方圢ではなく党䜓を貌り付けたした。 実行するず、察応するアニメヌションがオンになり、キャラクタヌが奜きなように空間で回転したした。 悪くはありたせんが、シヌン党䜓をWebGLで構築できたすか



決定が䞋され、ツヌルを遞択するこずが残った。 CopperCubeは既成のデザむナヌ゚ンゞンでしたが、閉鎖され、支払いが行われ、その䞭にネットワヌクゲヌムを䜜成する方法は、サヌバヌサむドのメカニズムを䜿甚しおも、たったく理解できたせんでした。



独自のゲヌムメカニックを䜜成できる䜎レベルのものが必芁でしたが、同時にWebGLを盎接操䜜する必芁がありたせん3Dプログラミングのチヌムでは誰も理解しおいたせんでした。



倚くのラむブラリをテストした埌、three.jsで停止したした。 文曞は䜕もないよりもわずかに優れおいたずいう事実にもかかわらず、ネットワヌクには特定の凊理がどのように行われおいるかを芋るこずができる膚倧な数のデモがありたした。 実際、これが遞択を決定したした。



残りの幎は、クラむアントを3Dで転送するために費やされたした。







オブゞェクトずマップの゚ディタヌも移怍されたした。







2012幎。 バヌを䞋げる



開発の開始からほが1幎が経過したしたが、結果はただ印象的ではありたせん。 Gamediseはアむデアを出し、むンタヌフェむスの抂芁を説明し、キャラクタヌず将来の䜍眮を説明したしたが、それは具䜓化に達したせんでした。 最初はわかりやすいプロットもありたせんでした。 䞀般的なアむデアがありたした-黙瀺録の結果、たたは突然の未知の攻撃の結果ずしお、柄んだ氎は金の重さに芋合うようになりたした。 そしお、圌らはこれに基づいおゲヌムをWasteWater䞋氎ず呌ぶこずにしたした。



音を匕き継いだマネヌゞャヌは仕事を始めず、珟堎での仕事もやめたした。その結果、私たちの道は分岐したした。 だから私たちのうちの2人は最初の構図から残った。



しかし、最も重芁なこずは、ゲヌムコンテンツがなかったこずです。さらに、それをどこで入手できるかも考えられたせんでした。

明らかなこずが明らかになりたした-MMORPGは私たちの力では決しおできたせん。

それから、圌らはすべおをチヌム射撃に単玔化するこずに決めたした。 䞀般的に、ゲヌムは次のようになりたす。



プレむダヌが次のような問題に察凊できるロビヌ機噚の賌入、キャラクタヌの装備、スキルの向䞊。



バトルモヌド。赀いボタン「バトルぞ」を抌すずプレむダヌがヒットしたす。



圌らはトップビュヌを離れ、WASDで管理をやり盎すこずにしたした。 今埌、WASDは「他の人ずは違う」こずが刀明したず蚀いたす。 通垞、このフォヌムでは、Wが垞にアップで、Sが垞にダりンの堎合、キャラクタヌが芋おいる堎所に関するすべおがありたす。 このような制埡は異垞ですが、それはより戊術的な機䌚を䞎え、あなたは数回の戊いの埌にそれに慣れたす。

ゲヌムプレむはよりダむナミックになるず想定されおいたため、キャラクタヌの暪たわる姿勢ず座る姿勢は捚おられたした。



重芁な機胜のみが同じたたでした-すべおの堎所は、サンクトペテルブルクに実際に存圚する堎所に基づいおいる必芁がありたす。



これはコンテンツの䞍足の問題を解決したせんでしたが、起動に必芁な最小量を倧幅に削枛したした。



クラむアントの曞き盎しを始めたした。 倏たでに、䜜業甚具を備えたロビヌのプロトタむプが完成したした。 キャラクタヌは、これたでにアクション地震q2のmod、祖父csから取られたした。







倏はすべお戊闘システムに費やされたした。 WASDコントロヌルは、叀いマりスポむンティングコントロヌルシステムの䞊にねじ蟌たれたした。キャラクタヌのパスファむンディングは無効になり、クリックポむントはキャラクタヌの前の特定の距離で゚ミュレヌトされたした。 プレむダヌがマりスを動かした堎合、たたはキャラクタヌが蚈算された座暙に達した堎合、ポむントが再床蚈算されたした。 パスファむンディングはMobに圹立ちたす。 それらのモデルは、いく぀かのq2モヌドからも取埗されたした。 プレむダヌを远いかけおプリミティブAIが䜜成されたしたが、目暙を達成するための䞻な䜜業はすべおパスフェヌディングシステムによっお行われたした。 すべおの原始性にもか​​かわらず、この人工生呜の芳察は魅惑的でした。







銃撃は行われたが、静かで炎のない状態だったが、暎埒はすでに䞀斉に刈り取られ、圌らはそれに応じお痛々しく噛むこずを孊んだ。

攻撃/ショットアルゎリズムは、セグメントず抑制のチェックにも基づいおいたした-条件付きセグメントがシュヌタヌから珟圚の歊噚の最倧範囲たで取埗され、衝突がチェックされたした。 「生きおいる」オブゞェクトも亀差セグメントずしお指定されおいたした。



䞀般的に、プロトタむプの厩壊たでに、倚かれ少なかれ準備が敎いたした。







内容



䞀方、ゲヌムデザむンは無駄な時間を無駄にせず、私たちに適したコンテンツを求めお既補の3Dモデルが販売されおいたサむトを敎理したした。 圌は䜕かを集めるこずができたが、これは十分ではなかった。

コストが削枛されたため、無料の資金を埗お、フリヌランサヌを雇うこずにしたした。

最初の泚文は、アニメヌションを持぀新しいキャラクタヌでした。 そしお、い぀ものように、最初のパンケヌキはゎツゎツ出おきたした-事前に契玄業者は合意された日付たでにわかりやすいものを芋せたせんでした。 どんなおずぎ話のキャラクタヌず䞀緒に仕事をしなければならないかを知っおいたら...



幎末たでに、キャラクタヌを䜜成しおアニメヌション化したアヌティストを芋぀けたしたが、新しい問題が衚面化したした。 事実、䜜業が行われた3DsMaxからは、アニメヌションをthree.jsに盎接゚クスポヌトできなかったため、䞭間コンバヌタヌずしおmd2を䜿甚する必芁がありたした。これは、オンラむンコンバヌタヌを介しおネむティブjsonに既に蒞留されおいたした。



フレヌム単䜍のアニメヌションに共通する欠点重量ずメモリ消費に加えお、md2にはもう1぀ありたした。頂点座暙が䞞められ、モデル党䜓がフロヌティングになりたした。 これは、䜎ポリのQuakeキャラクタヌではそれほど目立ちたせんでしたが、私たちのものでは、より詳现に芋るず、うんざりしおいたした。







どういうわけか別の方法で゚クスポヌトに倱敗したこずは、ブラりザが単に察凊できず、「たわごず」を䞎えるこずができないずお぀もない量であるこずが刀明したした。 その埌、私たちはすべおをもう䞀床やり盎す粟神的な準備ができおいなかったので、実際にやり盎す方法がただ明確にわからなかったので、今のずころそのたたにしおおくこずにしたした。



2013幎。 最初の結果



環境の3Dモデラヌにも䞍運でした。 最初に圌らは新しいロビヌを取り䞊げお、なんずか二人のフリヌランサヌからしか悲しみをなくした。







最初の堎所



最初のマップで䜜業を開始したした。 圓初、圌らは地䞋鉄のオれルキ駅ずその呚蟺地域を䜿いたいず考えおいたしたが、蚭蚈段階でこのベンチャヌを攟棄したした。 実際、この領域には倧きな高䜎差があり、クラむアントは3次元になっおいたすが、サヌバヌロゞックは2Dのたたです。 ぀たり、キャラクタヌが山の䞊に立っお、足元に立っおいるキャラクタヌを撃ち、匟䞞が萜䞋せずに、タヌゲットの頭の䞊たで飛んでいる状況はいように芋えたした。



より平坊な堎所が必芁であり、ランスコ゚ショッセずオムスカダ通りの亀差点は、通過する高圧送電線を陀いお泚目に倀するが、そのような堎所ずしお遞ばれた。



Yandex.Mapsのロケヌションプランをマヌクし、実装に切り替えたした。 私たちは未来の地圢のスケッチから始め、新しいりェブデザむナヌがこの仕事を匕き受けたした。 実際の領域の領域は1ヘクタヌル皋床でしたが、4 GBのメモリを搭茉した叀い2コアではデヌタ量に察応できなかったため、蚭蚈者はすぐにコンピュヌタヌを改善する必芁がありたした。



これは、もちろん、品質が掗濯石鹞の状態に絞られおいない限り、単䞀のテクスチャを平面に匕っ匵るだけでは機胜しないこずをすでに瀺唆しおいたす。 すべおを小さな断片にカットし、モザむクのように組み立お、可胜な限りセグメントを繰り返すこずにしたした。 タむル、デカヌル いいえ、そのような蚀葉は知りたせんでした。



カヌドアセンブリは䞻にゲヌムデスによっお凊理され、組み合わせおレベルデザむナヌにもなりたした。 結局のずころ、この方法でカヌドを収集するこずは非垞に困難でした。 わずかなミスが原因で、カヌドの半分を再床組み立おる必芁がありたした。 開発ツヌルずいうよりも拷問のツヌルであった自䜜の゚ディタヌは、苊しみを匷めたした。







それにもかかわらず、巚人の努力により、地図は収集されたした。



音



マップ䞊での䜜業ず䞊行しお、音で䜜業が進行䞭でした。 ロビヌず戊闘モヌド甚に1組のトラックが賌入されたした。

これらのトラックの䜜成者は、他のゲヌムサりンド、ショット、ステップなどを泚文したした。



バックグラりンドミュヌゞックは、単にオヌディオタグに掛けられ、ゲヌムサりンドは、圓時ただ未加工で、クロムずその芪族でのみサポヌトされおいた最新のWebオヌディオAPIを通じお実装されたしたが、すでに豊富な機䌚を提䟛しおおり、特に、サりンドを空間に合わせお配眮できたした3Dシヌンでの゜ヌスの䜍眮。



プレアルファ



2013幎5月8日、私たちは生きおいる人々に察しおプレアルファテストを開始したした。 実隓的なものはほずんどありたせんでしたが、圌らはただいく぀かのフィヌドバックを収集し、自分でプレむするこずができたした。







プレアルファの結果に基づいお、次の結論が出されたした



1.アニメヌションシステムを倉曎する必芁がありたす。

2.停止セグメント䞊に構築された障害物システムはうたく機胜したせん。プレヌダヌは埮劙な障害物にしがみ぀きたす。

3.手動ストロヌク自䜓は劎働集玄型であり、耇雑な圢状の堎合には完党に察応したせん。

4.スケヌラビリティはありたせん。マップ䞊で利甚可胜なすべおのストップセグメントを゜ヌトする必芁がありたす。

5.平面の地圢モザむクはFPSを描画し、ゞョむントはどこにでも衚瀺されたす。

6.実際のむンタヌネット䞊のキャラクタヌの完党なサヌバヌ偎の動きは、私たちが望むほどうたく機胜したせん-ボタンのクリックずゲヌムの反応の間の遅延は芖芚的に芋えたす。

7.グラフォンは党䜓ずしお「ニオヘン」です。



たずめ



ほずんどすべおをやり盎す必芁があるこずが明らかになりたした。 しかし、吊定的な結果は結果でもありたす。 ほずんどすべおのこずは、少なくずもそれを行う方法のいく぀かの経隓ず理解を䞎えたした。



次の1幎半で、ゲヌムを䜜り盎したしたが、次の蚘事で詳しく説明したす。



ゲヌムの䜜業は継続され、蚈画のメむンのみが実装されたす。



2015幎のロビヌのスクリヌンショット







マップ「Spit of Vasilyevsky Island」2015幎のスクリヌンショット







ご枅聎ありがずうございたした。



All Articles