OnActivateは特殊な変数で、オブジェクトをActivateしたフレームでは1を返し、それ以外のフレームでは(たぶん)0を返す。
ちょっとOnActivateではまったので覚え書きを残す。
ちょっとOnActivateではまったので覚え書きを残す。
例として「地面に置いてある武器を普通に取ろうとした場合は取れるが、インベントリを開いて地面の武器をクリックしてインベントリに落とす操作はできないようにするスクリプト」を考える。スクリプトは武器に付ける。武器は最初は地面に置いてある。
悪い例
1: begin test 2: 3: if ( MenuMode == 1 ) 4: return 5: endif 6: 7: if ( OnActivate == 1 ) 8: Activate 9: endif 10: 11: end 12:
悪い例の説明。インベントリを開いた状態で地面の武器をクリックしても何も起きない。しかしインベントリを閉じた瞬間に勝手に武器を取ってしまう。これはインベントリを開いている間、つまり一行目から四行目をループしている間にOnActivateが1になっても0に戻らない。そしてインベントリを閉じた瞬間に七行目が真になってしまう。
良い例
1: begin test 2: 3: if ( MenuMode == 1 ) 4: if ( OnActivate == 1 ) 5: endif 6: return 7: endif 8: 9: if ( OnActivate == 1 ) 10: Activate 11: endif 12: 13: end 14:
こうすれば意図した通りに動作する。
考察。OnActivateを使う場合は、OnActivateを毎フレーム参照する必要がある?