• 検索結果がありません。

Lead in(はじめに) このチュートリアルでは 基 本 の[Entity]の 追 加 方 法 を 述 べます もっと 詳 しく 知 りたい 場 合 Crysis のスクリプトを 調 べてみてください 作 成 した[Entity]がモデルとして In-game にも 使 用 できます 作 成 した

N/A
N/A
Protected

Academic year: 2021

シェア "Lead in(はじめに) このチュートリアルでは 基 本 の[Entity]の 追 加 方 法 を 述 べます もっと 詳 しく 知 りたい 場 合 Crysis のスクリプトを 調 べてみてください 作 成 した[Entity]がモデルとして In-game にも 使 用 できます 作 成 した"

Copied!
17
0
0

読み込み中.... (全文を見る)

全文

(1)

(文字のフォント:Comic Sans MS)

S&C002_[Doc] Creating a new Entity(新規の[Entity]を作成します。)

Description(解説):

 フローグラフのサポートを得ながら、Lua スクリプトの作成により新たな[Entity]を追 加します。

Reference(参考資料、参考サイト)

● タイトル:Creating a new entity

http://www.crymod.com/thread.php?threadid=16182 ● 作成者:Ins ● Skill Level: 中級 ● チュートリアルタイプ:資料[Doc] ● キーワード:Scripting

解説者の情報

● 解説者:Crysis Sandbox2 In-Deep 管理者

● ホームページURL:http://www4.atpages.jp/~alexwong2/index.php?FrontPage ● E メール:alexwchvui@hotmail.com ● このチュートリアルに対するコメント: - [*正][Inputs][Outputs]コードを[FlowEvents]コードの上に記入します。 ● ページ数:17 ページ

S&C002_Page1

(2)

Lead in(はじめに)

● このチュートリアルでは、基本の[Entity]の追加方法を述べます。もっと詳しく知 りたい場合、Crysis のスクリプトを調べてみてください。 ● 作成した[Entity]がモデルとして、In-game にも使用できます。作成した[Entity] を使用すると、[Entity]が複製され、オリジナル[Entity]の隣に配置されます。 ● このチュートリアルはCrysis の SDK ではありません。 ● [luacompiler.zip]をダウンロードして解凍します。[LuaCompiler.exe]を[..\Crysis\ bin32]フォルダにコピーします。

S&C002_Page2

(3)

Step 001 : Setting up an entity ([Entity]を設定します。)

● [..\Crysis\Mods\]フォルダに空フォルダ[MyMod]を作成します。

● [Editor.exe]ショートカットのプロパティ→[ショートカット]タブ→[リンカ先]に

[ -DEVMODE -MOD MyMod ]を追加します。

● [MyMod]フォルダに[Game]新規フォルダを作成します。[Game]フォルダに

[entities]新規フォルダを作成します。[entities]フォルダにテキストエディタで [MyEntity.ent]新規ファイルを作成します。

- [ .ent]形式ファイルはゲームエンジンに[entity]をロードさせるためです。

(4)

● テキストエディタで[MyEntity.ent]を開き、以下のように追加します。 <Entity Name = “MyEntity” Script = “Scripts/Entities/MyMod/MyEntity.lua” /> ● [Note]: [MyMod][MyEntity]以外の名前は自由に設定できます。

STEP002 : The entity script(basics) [Entity]

スクリプトの基本

● [entity](MyEnity.ent)を設定したら、Lua ファイルを作成します。Lua ファイルに [Entity]のプロパティとコードを書きます。 ● [MyEnity.ent]で書かれたパス[..\Scripts\Entities\MyMod\MyEntity.lua]の同じ ように[MyEntity.lua]新規ファイルを作成します。 ● [..\Crysis\Game\scripts\entities\MyMod\]空フォルダを作成し、その中にテキ ストエディタで[MyEntity.lua]新規ファイルを作成します。

● [Note]:Sandbox2 エディタは Mod フォルダの[Entities]ファイルの編集・更新し

ないため、デフォルトのフォルダ[..\Crysis\Game\]フォルダに[Entities]ファイル を作成します。 ● テキストエディタで[MyEntity.lua]ファイルを開き、以下のように記入します。 MyEntity = { Properties = { fMessageDuration = 10.0, sMessage = ”Use me”, bDoesNothing = 0, object_MyModel = “Editor/Objects/objective.cgf”, Colors = { clrColor = {x=1,y=0,z=0}, }, },

S&C002_Page4

(5)

Editor = { Icon = “Target.bmp”, }, }; ● Lua コードの解説: - MyEntity = { ... } : Entity を宣言します。 - 次に、プロパティを設定します。それらのプロパティは Sandbox2 エディタの [Entity Properties]で変更できます。 -- fMessageDuration : [Entity]を使用する際、メッセージの表示時間 -- sMessage : 表示されるメッセージ -- bDoesNothing : 何もしない -- object_MyModel : [Entity]にモデルの指定 -- clrColor : メッセージの色 ● 各パラメータ名の前に、[ f ][ s ][ b ][ clr ]の接頭文字が付けます。その理由は Sandbox2 に変数の型を指定するためです。 - b : boolean → true または false

- s : string → 文字列 - f : float 4→ バイト単精度浮動小数点数 - object_ : モデル(ファイル開くダイアログ付き) - clr : 色(色選択ダイアログ付き) -- clrColor に更のプロパティテーブル[x][y][z]があります。Sandbox のサブカテ ゴリです。

S&C002_Page5

(6)

● [Properties]の次に、[Editor]のプロパティです。Sandbox で使用するアイコンを 設定します。 - Editor = { Icon=”Target.bmp”, }; ● Lua ファイルに他の変数の指定もできます。ここでは、以上の設定で終わります。

STEP 003: Sandbox2 エディタを起動します。

● 作成したMod 用の[Editor.exe]ショートカットをダブルクリックして、Sandbox2

エディタを起動します。マップを開かないまま、[RollupBar] [Objects] [Entity]→ → を選択して、[MyMod] [MyEntity]→ がロードされたことを確認します。

● [MyEntity]をダブルクリックして、[Entity Properties]の表示が正しいことを確認

します。文字の前に[?][ab][n][ ]△ などの記号が現れます。

(7)

● [Note]:[Entity Properties]が表示されなかった場合、[Tools]メインメニュー

→[Reload Scripts]を選択して、[Errors Report]を確認します。

- エラーの所を確認して Lua の内容を修正して上書き保存してください。Sanbox2 エディタをもう一度再起動してください。

STEP 004 : Lua スクリプトに更のコードを追加します。

● Sandbox2 エディタを起動したまま、[MyEntity.lua]にコードを追加します。 ● STEP003 の設定では、[MyEntity]が何も機能しないので、更のコードを以下のよ うに追加します。 Function MyEntity:OnInit() self:OnReset(); end ● [解説:] - OnInit() : マップを開く時に、[Entity]の初期設定をゲットします。 - 次に OnReset()の機能を呼び出します。(*OnReset()の機能を次から作成しま す。)

S&C002_Page7

(8)

● [OnReset()]機能を追加します。 function MyEntity:OnReset() if(self.Properties.object_MyModel ~="") then self:LoadObject(0,self.Properties.object_MyModel); end end ● [解説]:エディタが起動する時、また、[OnInit()]から[OnReset()]の機能が呼び出 され、自分をロードします。[if] もし モデルが[~=” ”] 空 string でなかったら [then]、モデルをロード [LoadObject] します。 ● [MyEntity.lua]を上書き保存します。 ● Sandbox2 エディタで適当なマップを開きます。 ● [MyEntity]をマップ上に配置して、[Reload Script]ボタンをクリックすると、Lua コードが再ロードされます。 ● [*Note]:[Edit Script]ボタンはデフォルト[..\Crysis\Game\Scripts\Entities\]フォ ルダ内のファイルのみを開きます。[Reload Script]ボタンは[..\Crysis\Bin32\]フォ ルダ内に[LuaCompiler.exe]があったら、実行されます。

S&C002_Page8

(9)

● [Entity Properties] [MyModel]→ の[開く]アイコンをクリックして、適当なモデル を選択して、[Reload Script]ボタンをクリックして、モデルが変わったことを確認 します。 ● もし、モデルが更新しなかったら、以下の[OnPropertyChange()]機能を追加して ください。 Function MyEntity:OnPropertyChange() self:OnReset(); end -[解説]:[OnPropertyChange()]の機能はエディタでの[Entity Properties]が変更 された場合、[Reload Script]ボタンをクリックしなくでも、自動更新されます。 (*[Reload Script]ボタンをクリックせずに、モデルを変更してみてください。) ● 現時点の設定では、[MyEntity]にモデルをロード・変更できます。 ● 次に、[MyEntity]を使えるように[IsUsable][GetUsableMessage]機能を追加しま す。 function MyEntity:IsUsable(user) return 2; end funtion MyEntity:GetUsableMessage(idx) return self.Properties.sMessage; end

S&C002_Page9

(10)

● [ゲームモード]に切り替え、[MyEntity]に近づくと、[Use Me]の表示が現れること

を確認します。

● [解説]:

- [IsUsable() return 2]は[MyEntity]を使えるように設定します。

- [GetUsableMessage]は[MyEntity]が使用される際にメッセージを表示される機 能です。プロパティの[sMessage: Use me]を表示メッセージとして使用します。

● 現時点では、[MyEntity]使用できるようにしたが、更の使用目的の機能を追加しま す。 Function MyEntity:OnUsed(user,idx) CryAction.Persistant2DText(string.format(“Used>%s”, self.Properties.sMessage),2,self.Properties.Colors.clrColor,”OnUsed”,self.Prope rties.fMessageDuration); end ● [Reload Script]を実行してから、[ゲームモード]に切り替え、[F]キーを数回押す と、[Used>Use me]の文字がプレイヤーの HUD に現れます。また、時間が経つと、 [Used>Use me]の文字をだんだん薄くなります。

S&C002_Page10

(11)

● [解説]:

- プレイヤーのスクリーン上にメッセージを表示される機能の設定です。メッセー ジは[User>self.Properties.sMessage]、プロパティの[sMessage: Used me]です。 - 第 2 項目:メッセージのサイズです。通常[2]に設定します。 - 第 3 項目:[色]指定です。プロパティの[Color]です。 - 第 4 項目:メッセージの名前です。 - 第 5 項目:メッセージの表示時間[秒単位]です。 (*プロパティをいじって、その結果を確認してみてください。) ● 以下[MyEntity.Lua]全体のコードです。

S&C002_Page11

(12)

Step005 : Extending our entity ([Entity]を拡張します。)

● Step004 で基本の[MyEntity]を設定した、ここから、更のコードを追加します。 ● まず、[MyEntity]に物理的なモデルに設定します。 ● [OnReset()]機能に[PhysicalizeThis]を以下のように追加します。 Function MyEntity:OnReset() if(self.Properties.object_MyModel~=””)then self:LoadObject(0,self.Properties.object_MyModel); end self:PhysicalizeThis(); end function MyEntity:PhysicalizeThis() local Physics={ bRigidBody=1, bRigidBodyActive=0, bRigidBodyAfterDeath=1, bResting=1, Density=-1, Mass=5, }; EntityCommon.PhysicalizeRigid(self,0,Physics,1); end ● [解説]:エディタで使用されるパラメータを確認しながら、[PhysicalizeThis]機能 に物理を設定します。それらの設定を[EntityCommon.PhysicalizeRigid()]に渡しま す。 ● これで、[MyEntity]が物理的に機能されます。[ゲームモーで]に切り替えて、確認 します。(*物理的な設定をできないモデルがあるため、確認してみてください。)

S&C002_Page12

(13)

● 次に、[MyEntity]を使う時に、[MyEntity]を複製する機能のコードを追加します。

function MyEntity:OnUsed(user, idx)     

CryAction.Persistant2DText(string.format("Used> %s",

self.Properties.sMessage),2, self.Properties.Colors.clrColor, "OnUsed", self.Properties.fMessageDuration); self:Clone(); end function MyEntity:Clone() local clone = { class = "MyEntity", }; clone.properties = self.Properties; local ent = System.SpawnEntity(clone); local pos = self:GetPos();

pos.x = pos.x + 1; ent:SetPos(pos); end

(14)

● [解説]:これで[MyEntity]を複製できます。 - まず、クラスを[MyEntity]に設定して、デフォルトの値で[MyEntity]を生成しま す。 - [clone.properties=self.Properties;] : [MyEntity]のプロパティを[Clone]プロパティに渡します。 - [local pos=self:GetPos();] : [MyEntity]の位置をゲートします。 - pos.x=pos.x+1; : [MyEntity]の位置に[1]の値を足します。(そうすると、複製した[Entity]をはっ きり分かります。) - [ent:SetPos(pos)] : [1]を足した位置を複製した[Clone]に設定します。

Step 006 : Adding Flowgraph support(フローグラフのサポートを追加)

● すべてのフローグラフ情報は[FlowEvents]にあります。それを定義しなければなり ません。以下のようなコードを追加します。 MyEntity.FlowEvents={ Inputs= { Clone={MyEntity.Event_Clone,”bool”}, Message={MyEntity.Event_Message,”string”}, }, Outputs= { Used=”bool”, }, } ● [解説]:フローグラフの設定はそれほど難しくない。フローグラフのノードに [Inputs]と[Outputs]部分があります。[Inputs]側に[Clone]と[Message]をゲート します。[MyEntity]が使用された際に、[Outputs]側に[Used]機能が呼び出されま す。

● [疑問]:[Clone= ?]と[Message= ?]、それから、[MyEntity.Event_Clone]と

[MyEntity.Event_Message]はどこから定義される??

(15)

● [答え]:それらも定義しなけらばなりません。以下のように定義します。 function MyEntity:Event_Clone(sender) self:Clone(); end function MyEntity:Event_Message(sender,msg) self.Properties.sMessage=msg; end ● [解説]:[Event_Clone]は[Clone()]機能を呼び出すだけです。[Event_Message]で はフローグラフでのプロパティを変更できます。これで、[Inputs]側の設定を終わ りました。 ● [Outputs]側は[Outputs]の[Event]を始動させる所にコードを追加します。

function MyEntity:OnUsed(user, idx)     

CryAction.Persistant2DText(string.format("Used> %s",

self.Properties.sMessage),2, self.Properties.Colors.clrColor, "OnUsed", self.Properties.fMessageDuration); self:Clone(); self:ActivateOutput(“Used”,true); end ● [OnUsed()]機能に[Used]を[true]に設定するだけです。 ● これで、フローグラフの設定を終わりました。 ● [MyEntity.lua]を上書き保存します。 ● Sandbox2 エディタをもう一度再起動します。適当なマップを開きます。

● Sandbox2 エディタで[MyEntity]をマップに配置します。[Flow Graph] [Create]→

ボタンをクリックします。

(16)

● 適当なグループ名を記入して、[OK]ボタンをクリックします

● [MyEntity]を選択したまま、[Flow Graph]ウィンドウのグレー所にマウス右クリッ

クして、[Add Graph Default Entity][Fit Graph to View]を選択すると、作成した [entity:MyEntity]ノードが現れます。

● グレー所にマウス右クリックして、[Add Node] [HUD]→ →

[DisplayInstructionmMessage]ノードを追加して、以下のように設定します。

● [ゲームモード]に切り替えして、[MyEntity]の前に[F]キーをクリックして、

[Flowgraph is here]のメッセージ、[Used>Use me]のテキスト、[Clone]が生成され たことを確認します。

(17)

● [*注]:[Event_Clone][Event_Message]の[Inputs]と[FlowEvents]コードの順が間

違った場合、[Inputs]側が表示できなくなります。

● [*正][Inputs][Outputs]コードを[FlowEvents]コードの上に記入します。

参照

関連したドキュメント

 音楽は古くから親しまれ,私たちの生活に密着したも

もっと早く詳しく報告すべきだったのだが、今日初めてフルヤ氏との共同の仕事の悲し

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

父親が入会されることも多くなっています。月に 1 回の頻度で、交流会を SEED テラスに

基準の電力は,原則として次のいずれかを基準として決定するも

・私は小さい頃は人見知りの激しい子どもでした。しかし、当時の担任の先生が遊びを

大村 その場合に、なぜ成り立たなくなったのか ということ、つまりあの図式でいうと基本的には S1 という 場