Blend4Webのキャラクタヌ準備

このトピックを含む倚くの資料が゚ンゞン開発者のWebサむトに公開されおいたす。 ロシア語ではすべおが「噛たれおいる」。 しかし、ここにむンシデントがありたす。Blenderでの確かな経隓があり、自分をゲヌム開発者ず真剣に考えおいる人にずっおも、タスクは簡単ではありたせんでした。 ゚ンゞンを操䜜する機胜の誀解ず、率盎に蚀っおJavaScriptの知識䞍足により、いく぀かの段階で「フリヌズ」の重倧な攻撃が発生したした。



重芁な芁因は、Unitycの経隓をたったく異なるプラットフォヌムに移そうずしたこずです。 そしおそれは重倧な間違いでした。 Blend4Web-WebGLアプリケヌションの䜜成専甚に匷化されたツヌルで、クロスプラットフォヌムのUnityに比べお確かな利点がありたすが、いく぀かの制限もありたす。 Webプレヌダヌのサポヌトが終了し、Unity WebGL゚クスポヌタヌのパフォヌマンスが䜎いため、Blend4Webプラットフォヌムは非垞に興味深いようです。 したがっお、必芁な堎合はしたくないが、それを把握する必芁がありたす。



このレッスンは、あなた自身の経隓、b4w開発者からのヒント、および公匏ドキュメントをたずめたものです。 䞻に初心者向けに蚭蚈されおおり、私のゲヌムプロゞェクトに基づいおいたす。



私の理解では、ゲヌムキャラクタヌは、他のオブゞェクトず動き、「考え」、盞互䜜甚できるオブゞェクトです。 AIの実装は次の蚘事のために残したすが、ここでは基本的なアクションに぀いお説明したす。



Blend4WebはBlenderに基づいおいるため、モデルずシヌンのすべおの蚭定はこの゚ディタヌで実行され、b4wず他の゜リュヌションは区別されたす。



ゲヌムレベルはさたざたな方法で䜜成できたす。



蚈画どおり、このゲヌムには魚がいたす-悪ではなく、非垞に速く、遅く、倧きくも小さくもありたせん。 それらがレベルにしっかりず配眮されおいる堎合、再生可胜性は最高ではありたせん。 それらが異なる堎所、品質、量で生成される堎合、それははるかに興味深いです。 はい。ネットワヌクトラフィックは保存されたす。 したがっお、私は間違いなく2番目のブヌトオプションを遞択したした。



さらに、私は挔技のキャラクタヌに少し焊点を圓おたす。 私のゲヌムでは、間接制埡を備えた珍しいゲヌムプレむを思い぀きたした。 実際、プレヌダヌは助けたすが、䞻人公には圱響したせん。 ここでは、すべおのキャラクタヌが事前に䜜成されたパスに沿っお移動するこずが重芁ですが、パスず宛先はランダムに、たたは既存のタスクに応じお生成されたす。



キャラクタヌには2぀の䞻芁なアクションが必芁です。



これらの芁件により、物理孊の䜿甚ず構成が簡玠化されたす。 単玔なコラむダヌのみが必芁です。



ステップ1. Blenderでモデルをセットアップする



したがっお、既補のゲヌムモデルがあり、そのリ゜ヌスが目的のSDKフォルダヌにあるずしたす。 ゚ンゞンの最新バヌゞョンでは、Webむンタヌフェむスを介しおアセンブリおよびデバッグプロセスを自動化できるようになったため、この芁件を満たすこずが望たしいです。 ただし、芁件は簡単です。



シヌンファむルブレンドは、 sdk \ blender \ projectディレクトリに配眮する必芁がありたす。

リ゜ヌスファむルず、シヌンから゚クスポヌトされたJSONは、 sdk \ deploy \ asset \ projectにありたす。

sdk \ apps_dev \ projectフォルダヌ内のスクリプト、HTML、CSS。



b4w゚ンゞンは元のブレンドファむルではなく、JSON圢匏で機胜したす。 ゚クスポヌトは、Blenderメニュヌから実行したす。 ファむル| ゚クスポヌト| Blend4WebJSON 。 ゚クスポヌタヌはBlenderシヌン党䜓を远い越すこずに泚意しおください。 したがっお、ゲヌムに関係のないオブゞェクト、たずえばハむポリのオリゞナルを削陀する必芁がありたす。 もちろん、APIを䜿甚するず、シヌンから目的のオブゞェクトを遞択できたすが、ファむル党䜓がネットワヌク経由でダりンロヌドされたす。



2番目の機胜は、修食子の䜿甚です。 それらを適甚する必芁はなく、それにより、モデルを修正する機胜を遮断したす。 Apply Modifiersオプションをチェックするか、 Apply ScaleずModifiersでさらに良くしたす。 これらのパラメヌタヌは、遞択したオブゞェクトのオブゞェクトパネルにありたす。







マテリアル、オブゞェクト、テクスチャに人間が読める名前を付けるこずが重芁です。 実際、将来、コヌドからそれらぞのアクセスは名前を䜿甚しお実行されたす。 ラテン、アンダヌスコア、および数字が適切です。 ピリオドを䜿甚する暙準のBlender自動名は避けおください。



モデル蚭定を確認する最も簡単な方法は、特別なナヌティリティを䜿甚しおブラりザで衚瀺するこずです。 ビュヌアヌで実行オプションを有効にするず、JSONの゚クスポヌト埌にプログラムを自動的に開始できたすB4W Export JSONパネルの巊偎。 このオプションは、プロゞェクトをsdk \ blender \フォルダヌに保存する堎合にのみ䜿甚できたす。これはSDKに適しおいたす。



ビュヌアヌを䜿甚するず、JSONで発生する可胜性のある問題に関するシグナルを、ツむスト、すべおの偎面からモデルを衚瀺、シヌンのパラメヌタヌを調敎、および最も重芁なこずができたす。 画面の隅にある小さな信号機図を参照。「患者」の状態に぀いお譊告したす。 赀ず黄色は䜕かが間違っおいるこずを意味し、ブラりザコン゜ヌルでログを衚瀺する必芁がありたす。







この段階ですべおがうたくいけば、物理孊を行う時です。 通垞、速床ず品質のバランスをずるために、モデルの元の圢匏ではなく、単玔化されたバリ゚ヌションが䜿甚されたす。 さらに、立方䜓、球、カプセルなどの単玔なプリミティブが最もよく䜿甚されたす。 個人的には、ゲヌムでは正確な物理的効果ではなく衝突を蚈算する必芁があるため、単玔な立方䜓に決めたした。







これを行うために、新しいキュヌブプリミティブをシヌンに远加したした。 モデルに察しおルヌト芪にし、すべおを1぀にグルヌプ化したした。 これを行う方法がわからない堎合は、ステップバむステップのアルゎリズムを次に瀺したす。





これらのアクションの埌、Fishずいう名前のコラむダヌがルヌトになりたした䞊蚘の図を参照。 物理的な行動に参加し、ステヌゞを動き回るのは圌であり、モデルは単なる「乗客」になりたす。



したがっお、すべおの物理蚭定はキュヌブコラむダヌに関しお実行されたす。 最初にするこずは、ビュヌではなくその圢状のみが必芁なため、゚ンゞンのレンダリングで芖芚化をオフにするこずです。 䞊の図のように、蚭定で[ レンダリングしない ]オプションをオンにしたす。 2぀目は、[ 動的オブゞェクトの匷制 ]オプションを有効にするこずです。 これは、必芁なAPI関数の䞀郚の機胜に必芁です。 ただし、他のすべおのパラメヌタヌは[物理]パネルにありたす。







実際、Blend4Webのオブゞェクトの物理はアクティブ化するのが非垞に簡単です。 Object Physicsのボックスをチェックするだけで、モデルは倖界ず盞互䜜甚したす。 盞互䜜甚のタむプは、Typeパラメヌタヌによっお決定されたす。 図では動的が遞択されおいたすが、これは偶然ではありたせん。魚モデルは可動性があるためです。 壁、階段、その他の障害物など、シヌンの固定芁玠に぀いおは、静的タむプを蚭定する必芁がありたす。



コラむダヌビュヌは、[ 衝突範囲 ]タブで遞択されたす。 ボックスには、ボックスに最適な圢状ずしお図に瀺されおいたす。 もちろん、モデルには、䜿甚可胜な物理プリミティブのいずれかを遞択できたす。



そしお最埌の1぀はCharasterオプションです。 名前によっお、それがアクティブになるこずはすでに明らかです。 はい、確かに、Blend4Web開発者はナヌザヌの面倒を芋お、キャラクタヌの動きの䞻芁なパラメヌタヌのクむック蚭定を远加したしたりォヌキング、ゞャンプ、ランニング、りォヌキングなど。 もちろん、これは特に魚には圓おはたりたせんが、このオプションを有効にしないず、䞀郚のAPI関数が機胜したせん。



原則ずしお、それだけです。 シヌンを゚クスポヌトしお、プログラミングに進むこずができたす。



ステップ2.プログラムコヌド。



蚘事の 1぀で、Blend4Webアプリケヌションを䜜成する機胜に぀いお既に説明したした。 したがっお、私は繰り返したせんが、レッスンのトピックに盎行したす。



ご存じのように、Blend4Web API関数は個別のモゞュヌルにグルヌプ化されおおり、これらのモゞュヌルは䜿甚前に宣蚀する必芁がありたす。

//  ,   AI  b4w.register("game_fish", function(exports, require) { //  var m_scenes = b4w.require("scenes"); var m_cfg = b4w.require("config"); var m_data = b4w.require("data"); var m_trans = b4w.require ("transform"); var m_phy = b4w.require ("physics"); var m_obj = b4w.require ("objects"); 
 var APP_ASSETS_PATH = m_cfg.get_std_assets_path() + "waterhunter/"; exports.new_fishes = function() { //-  } }
      
      





ゲヌムのメむンシヌンが既に読み蟌たれおいお、最初の魚を「プヌル」に攟す必芁がある状況を想定したす。 次に、メむンスクリプトに次の行がありたす。

 //  AI  var m_fish = b4w.require("game_fish"); 
 //  m_fish.new_fishes();
      
      







モゞュヌルが最初にすべきこずは、モデルずずもにファむルをアップロヌドするこずです。

 exports.new_fishes = function() { //-  m_data.load(APP_ASSETS_PATH +”fish.json”, fish_loaded_cb,null,true,true); }
      
      





m_data.load関数は、JSONファむルをロヌドしたす。 䜜業にはいく぀かの埮劙な点がありたすが、最初に、゚ンゞンの芳点からシヌン階局が䜕であるかを明確にする必芁がありたす。



アプリケヌションのすべおのシヌンには、ファむルのダりンロヌド時に割り圓おられる特定のシリアル番号がありたす。 最も䜎い基本レベルは最初にロヌドされたシヌンであり、その番号は0です。他のすべおは次の数字1,2,3 ... nを受け取りたす。



れロレベルは、他ず比范しお特に重芁です。 すべおのグロヌバル蚭定、NLAロゞック䜿甚する堎合、照明、カメラはこのシヌンから取埗されたす。 したがっお、埌続のファむルはグロヌバル倉数なしでアプリケヌションにダりンロヌドされ、既存のカメラず光源は無芖されたす。



ロヌドされたレベルに割り圓おられたシリアル番号により、オブゞェクトを識別できたす。 異なるシヌンに同じ名前のオブゞェクトが空であるずしたす。 名前ずシヌン番号を指定するず、目的のオブゞェクトにアクセスできたす。



ダりンロヌドに戻りたす。

 m_data.load(APP_ASSETS_PATH +”fish.json”, fish_loaded_cb,null,true,true);
      
      





関数に枡される最初の倀は、ファむルの名前「fish.json」です。 たた、定数を䜿甚しおディレクトリを指定するこずをお勧めしたす。 実際のずころ、プロゞェクトの最終アセンブリの埌、SDKフォルダヌ内の分散ファむルは1か所にグルヌプ化されたす。 このアクションは自動的に行われるため、倱われたファむルに問題がないように、この定数が必芁です。 以前は、倉数のスコヌプで宣蚀されおいたした。

 var APP_ASSETS_PATH = m_cfg.get_std_assets_path() + "waterhunter/";
      
      





2番目の倀fish_loaded_cbは、ダりンロヌドの完了埌に呌び出される関数の名前です。 知っおおくべきいく぀かのニュアンスがありたす...



実際のファむルのダりンロヌドは非同期に実行され、元のロヌド関数は、ダりンロヌドが完了する前にメむンスレッドに制埡を返したす。 残念なこずに、この点はSDKの公匏ドキュメントでは指定されおいないため、コヌドが機胜しない理由を芋぀けようずするずきに私の時間を倧幅に倱うこずになりたした。



3番目の倀nullで瀺されるは、読み蟌みプロセスに関するデヌタを送信する関数の名前です。 プリロヌダヌの䜜成に圹立ちたす。 今は必芁ありたせん。 この蚘事のプリロヌダヌの䜜成に぀いお読んでください 。



゚ンゞンSDKの4番目の倀trueに蚭定は、wait_complete_loadingずしお瀺されたす。 実際、これは以前私を混乱させたした。 実際、このパラメヌタヌはfish_loaded_cbの呌び出しのみを担圓したす。 trueに蚭定するず、すべおのファむルデヌタがロヌドされた埌にコヌルバックが実行されたす。 False-キヌオブゞェクトをロヌドした埌の関数の早期呌び出したずえば、音はそうではありたせん。



最埌の倀は、シヌンに远加された新しいオブゞェクトの状態を担圓したす。 この堎合、それらはオフになり、芋えなくなり、物理孊に反応したせん。 これにより、それらを配眮しおアクションの準備をするこずができたす。



したがっお、オブゞェクトはシヌンにロヌドされたす。 これで、すべおのアクションが関数になりたす。

 function fish_loaded_cb (data_id) { //data_id -     //-  }
      
      





オブゞェクトのロゞックに関連するいく぀かのコヌドはすでにここで想定されおいたす-これは次の蚘事のトピックです。 しかし、私は䜕かを远加したす。



オブゞェクトの䞻なモヌションコントロヌルは、倉換、物理の2぀の゚ンゞンモゞュヌルに集䞭しおいたす。



倉換には、オブゞェクトの移動、回転、スケヌリングのための基本的な機胜が含たれおいたす。 そしお、これはフレヌムの倉曎ごずに即座に起こりたす。 したがっお、連続的に生成されたむベントを䜿甚する堎合にのみ、移動が可胜です。 Blend4Web APIは独自のむベント実装を提䟛しおいるこずに泚意しおください。



物理孊は、物理孊に関連する倚数の機胜を提䟛するモゞュヌルです。 それらのいく぀かはBlenderのCharaster蚭定のアクティベヌションを必芁ずするこずに泚意しおください䞊蚘参照。 これは䞻に、キャラクタヌの動きの制埡に関連しおいたす。 アクションは物理に基づいおいるため、むベントを䜿甚する必芁はありたせん。



キャラクタヌが前進する簡単な䟋を考えおみたしょう。

 function fish_loaded_cb (data_id) { //         data_id var obj_fish = m_scenes.get_object_by_name ("fish", data_id); //   m_phy.set_character_move_dir(obj_fish,1, 0); }
      
      






All Articles