トップ > MAP作成 > トリガーエディタ > Jass Script > Jass講座 > ユニットグループ
ユニットグループ/group は、ユニットの集まりを指す変数のこと。ユニットにまとめて命令を出したり、範囲内のユニットを選ぶ等、MAP作りに欠かせない要素だ。 しかし、トリガーエディタで使った場合がそうであるように、ユニットグループはその性質上、メモリリークの温床になりうる。正しい使い方を必ずマスターしたい。 Jass NewGenの導入が前提です。導入せずとも利用できる内容も一部ありますが、あったほうが断然有利です。 宣言ユニットグループを使うには、まず変数に対し、ユニットグループを作成する。
この空のグループにユニットを追加して使う。最後には、メモリリークの原因になるので必ず破棄すること。
ユニットの追加ユニットを追加する方法はいくつかある。
ほかにもいろいろ。 ユニットの削除ユニットグループから除外する方法について。あくまでグループから取り除くだけで、ユニットそのものが消えるわけではない。
これらでユニットグループを空にしても、DestroyGroup を呼ぶのを忘れないように。 使用例範囲内のユニットについて処理したい『範囲内のユニットを選んで○○する』を実装するとき、下の方法がおすすめ。 サンプル集より、ノックバックからソースを一部転載。 function CastThunderClap takes unit Caster returns nothing local real AOE = 200+I2R(GetUnitAbilityLevel(Caster,'AHtc')*50)+16 //まず、ユニットグループを作成 local group UnitsAround = CreateGroup() local real X = GetUnitX(Caster) local real Y = GetUnitY(Caster) local unit PickedUnit = null //地点X,Yから、距離AOE以内の全ユニットを、UnitsAround に格納する。 call GroupEnumUnitsInRange(UnitsAround,X,Y,AOE,null) //※ここが重要 loop //UnitsAround内の、一番はじめに登録されてあるユニットを PickedUnit へ格納 set PickedUnit = FirstOfGroup(UnitsAround) //PickedUnit が存在しない、すなわち UnitsAround が空の場合、ループを抜ける exitwhen PickedUnit == null //UnitsAround から、PickedUnit を取り除く。 call GroupRemoveUnit(UnitsAround,PickedUnit) //ここで、Picked Unit について処理を行う。 endloop //グループを解放 call DestroyGroup(UnitsAround) //変数を開放 set UnitsAround = null set PickedUnit = null endfunction 他にも、 call ForGroup(group whichGroup, code callback) を使うという手もあるが、この方法だと引数を渡すことができないので、なにかと不便。 おまけ関数一覧ユニットグループに直接関係する、関数の一覧 native CreateGroup takes nothing returns group native DestroyGroup takes group whichGroup returns nothing native GroupAddUnit takes group whichGroup, unit whichUnit returns nothing native GroupRemoveUnit takes group whichGroup, unit whichUnit returns nothing native GroupClear takes group whichGroup returns nothing native GroupEnumUnitsOfType takes group whichGroup, string unitname, boolexpr filter returns nothing native GroupEnumUnitsOfPlayer takes group whichGroup, player whichPlayer, boolexpr filter returns nothing native GroupEnumUnitsOfTypeCounted takes group whichGroup, string unitname, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRect takes group whichGroup, rect r, boolexpr filter returns nothing native GroupEnumUnitsInRectCounted takes group whichGroup, rect r, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRange takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing native GroupEnumUnitsInRangeOfLoc takes group whichGroup, location whichLocation, real radius, boolexpr filter returns nothing native GroupEnumUnitsInRangeCounted takes group whichGroup, real x, real y, real radius, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsInRangeOfLocCounted takes group whichGroup, location whichLocation, real radius, boolexpr filter, integer countLimit returns nothing native GroupEnumUnitsSelected takes group whichGroup, player whichPlayer, boolexpr filter returns nothing native GroupImmediateOrder takes group whichGroup, string order returns boolean native GroupImmediateOrderById takes group whichGroup, integer order returns boolean native GroupPointOrder takes group whichGroup, string order, real x, real y returns boolean native GroupPointOrderLoc takes group whichGroup, string order, location whichLocation returns boolean native GroupPointOrderById takes group whichGroup, integer order, real x, real y returns boolean native GroupPointOrderByIdLoc takes group whichGroup, integer order, location whichLocation returns boolean native GroupTargetOrder takes group whichGroup, string order, widget targetWidget returns boolean native GroupTargetOrderById takes group whichGroup, integer order, widget targetWidget returns boolean native ForGroup takes group whichGroup, code callback returns nothing native FirstOfGroup takes group whichGroup returns unit |