タスク変数は、
・行単位で保持する変数。スクリプトの終了とともにリセットされるので基本他の行に継承できない。
・行毎にA~Pの16個保持できる。無駄に多い。
・ラウンドごとにリセットされる。
…というもの、という解説をよく見る。
実際自分もそう解釈してそれまで使っていた。
しかし、最近、上の解釈とはちょっと違う挙動をしていることに気付いた。
V|I|com|SG|V|O|I|E
Vはどちらもタスク変数A、内容は最初のが加算、2つ目が0代入(初期化)だ。
かなり簡略化したので実際はちょっと違うが、技を始動するとまずチャージを始め、タスク変数Aが一定数になったら技本体(この場合は攻撃判定を持ったオブジェクト)に移行するというスクリプト。
チャージ中コマンドでチャージを中断できるようにしている。
これによってチャージを繰り返すことで発動が高速化、コンボにも使えるようにしている。
で、このタイプの技を複数個作った。
タスク変数は行毎の保持なので、タスク変数を使ってれば技ごとのチャージ量を楽に保持できるだろうと適当にコピペしてタスク変数Aのまま作ったのだが…
技1でチャージを中断後、技2を放つと技2のチャージが短縮されている。
んん?
これは変だぞと思って色々検証した結果、以下のような事がわかった。
・キャラ本体のスクリプトで指定した場合、
キャラ本体で動作するスクリプト全てに継承される。
・キャラ本体とオブジェクトの間では継承されない。
・キャラ本体とシステムイメージ(ステージフェイスなど)間では継承されない。
・オブジェクトとシステムイメージ間では継承されない。
・たとえ同じスクリプトを呼び出しているとしてもオブジェクト間では影響しない。
・ラウンド終了でリセットされる(これはその通り)
システムスクリプトやステージのスクリプトでは一番上に書いたような挙動で動作している。
キャラ本体の場合消滅することがないし、複数発生したりもしないので、「全てのスクリプトが連続している」という事になっているのではないだろうか。
(例えば 「立ちから技を出して立ちに戻る」という動作をした場合でもプログラム的には 立ちを「キャンセル」して技を出し、立ちに「移動」する、という流れになっているのでは?)
と、俺は考える。
それと、
これキャラ変数の代わりとして使えるんじゃないか?とも思った。
オブジェクトに影響しない使い方に限られるけど、16個も増えるんだぜ。
ざっと調べた感じこういったことを報告してる人は見られなかった(まあ格闘ツクールは情報自体がほとんど流れてないが)ので俺の環境だけなのかも知れんが、そんなんありえんのかね。よくわからん。
PR