敵キャラのステート変更を行う方法 / ツクールVXAceスクリプト(RGSS3)wiki
ツクールVXAceで敵キャラのステート変更を行う方法をスクリプトで行うなら以下の通りです。
$game_troop.members[敵ID].add_state(ステートID)
サンプルコード(敵1へ睡眠の付加)
$game_troop.members[0].add_state(6)
または以下の通りです。
iterate_enemy_index(敵ID) do |enemy|
#敵ID=-1以下で敵グループ全体
already_dead = enemy.dead?
enemy.add_state(ステートID)
#敵の戦闘不能の場合はテクスチャ崩壊効果を追加
if enemy.dead? && !already_dead
enemy.perform_collapse_effect
end
end
サンプルコード(敵1へ睡眠の付加)
iterate_enemy_index(0) do |enemy|
already_dead = enemy.dead?
enemy.add_state(6)
if enemy.dead? && !already_dead
enemy.perform_collapse_effect
end
end
コード解説
単体の敵に戦闘不能以外のステートを付加するときは最初の1行で済むコードで問題ありません。
しかし、敵全体を対象にするときや、戦闘不能を付加することがある場合は2つ目の長いコードで行った方が無難です。
まずは最初のコードについて、$game_troop.members[敵ID]で指定したIDの敵を指定しています。
"add_state(ステートID)"でステートを付加しています。
次に長い方のコードについてです。
1~7行目:iterate_enemy_index(敵ID) do |enemy|
見慣れない形ですが、これはrubyのブロックという処理の塊です。
説明をすると長くなってしまうので、興味のある方は「ruby ブロック」等で検索してください。
行っている処理としては敵のデータ(敵の人数)の個数分だけdo~end内の処理を繰り返すというものです。
指定した敵IDが0以上であればIDの敵のデータだけを、-1以下であれば敵グループの人数分のデータを返します。
2行目:already_dead = enemy.dead?
already_deadという変数に敵が戦闘不能であればtrueを返すenemy.dead?メソッドを代入しています。
ステートを付加する前にここで判定しておくことによって付加した後に敵戦闘不能時のテクスチャの崩壊をさせるかどうかの判断材料としています。
敵がすでに戦闘不能であるのに再度戦闘不能ステートを付加したときにテクスチャの崩壊をさせると、戦闘不能で消えた敵が再度崩壊し、違和感のある演出になってしまうのを防ぐためです。
3行目:enemy.add_state(ステートID)
enemyには指定したIDの敵のデータが入っています。
敵IDで-1を指定したときは敵キャラIDが1から順に処理されていきます。
add_stateは最初の一行のコードにもあったようにステートを付加するメソッドです。
4~6行目:if enemy.dead? && !already_dead
敵が戦闘不能でないかどうかを判定するenemy.dead?がここで再度出てきていますが、これはこのスクリプトで戦闘不能ステートが付加されていないかどうかを判定するためです。
ステートを付加する前に敵が生きていてかつ、ここで戦闘不能ステートが付加されたときのみif文の中を実行するようにしています。
5行目:enemy.perform_collapse_effect
指定した敵のテクスチャの崩壊を行う処理です。
perform_collapse_effectで崩壊アニメーションを再生させます。
ツクールVXAceスクリプトリファレンスwikiトップページへ戻る
オリジナルシステムなどの製作依頼・相談があればプラグイン・マップ等個別製作依頼のページまでお願いします。