エフェクトの出し方について調べてみた(エンティティ編)
[マインクラフト] [2014/08/25 20:46]
先日エフェクトについて調べたが、その後調べたところどうもエンティティに対して専用のエフェクトがあるようだ。
ついでに調べてみた。
エフェクトを起こすには、以下のようにする。
ここで変数wolfは、オオカミを表すWolfオブジェクトとする。
wolf.playEffect(EntityEffect.WOLF_SHAKE);
これを実行すると、オオカミが濡れた体から水を払うためぷるぷると胴を振る。かわいい。
同様にWOLF_SHAKEの部分をWOLF_HEARTSと変えれば、オオカミを飼いならしたときのようにハートマークが出る。
ただし、あくまでもこれはエフェクト(見た目)であり、実際にそうなったという意味ではない。
例えば定数にDEATHを指定して実行すればオオカミは死んだように表示されるが、実際には生きている。
エフェクトはすべてのエンティティに効果を及ぼすのではなく、特定のエンティティタイプのエンティティにしか効果を及ぼさない。
たとえばDEATHエフェクトは、オオカミやニワトリのような「死ぬ」概念があるエンティティでは死亡エフェクトが表示されるが、
そもそも「死ぬ」概念が無いトロッコや矢といったエンティティには効果を及ぼさず、Exceptionも起こらない。
もうひとつ、ややこしいことがある。
エフェクトの定数には例えばWOLF_HEARTSのように、一見してオオカミ(Wolf)にしか影響を及ぼさないと想像できるような名前が散見されるが、
実際のところウマやヤマネコなど他のエンティティでも有効で、きちんとハートのエフェクトが出たりする。
極端な話をすれば、ヒツジが草を食べるSHEEP_EATでTNT付きトロッコが着火したりする。
このため、定数名は正直あんまり参考にしないほうがいいだろう。というか、そのうち定数名は変更されるだろう。
それぞれの定数とその詳細、そのエフェクトが有効な対象は、以下の表に書いたとおりである。
下の画像にガストやエンダードラゴンなど大型モンスターがいないのは、単に写真写りが悪いからで、別途検証したところ問題なく作用した。
投射物系やその他のエンティティもざっと調べたが、効果はないようだ。
FIREWORK_EXPLODEとZOMBIE_TRANSFORMを除き、全てのエフェクトは無音で実行される。
必要に応じて効果音を併用するとよいだろう。
短時間でエフェクトを繰り返し実行すると、アニメーションは最初から実行される。
例えばSHEEP_EATでTNT付きトロッコが爆発しそうになっているとき、再度SHEEP_EATを実行すると、
一瞬にして爆発前の状態に戻り、再度カウントダウンが始まる。
こちらも必要に応じて数秒おきに繰り返せばエフェクト状態を維持することができる。
プレイヤーに対して有効なエフェクトはHURTとDEATHだけである。
HURTはダメージ表現で、実行すると画面が揺れ、HPバーが揺れ、ダメージ音が出て大変にリアルである。
しかしリアルすぎて本当にダメージを負ったと勘違いしやすいので、多用は禁物である。
一方プレイヤーに対してDEATHを実行すると、こちらもダメージ音がしてプレイヤーキャラクターが赤くなって倒れて消滅し、
クライアントには「死んでしまった!」とリスポーンボタンが表示される。大変にリアルである。
ただし、このときリスポーンボタンを押してもリスポーンできず、クライアントの再接続が必須になる。
(おそらく、生きているのでリスポーンできないのだろう。)
再接続すれば、キャラクターはもとの位置にいて、経験値も減っていないのでただのエフェクトと分かる。
しかしいちいち再接続するのは面倒このうえないので、このエフェクトはよほど特殊な目的でなければ、使わないほうがいいと思われる。
エンティティに火をつけるエフェクトは定義されていないようなので、必要ならEntity.setFireTicksで火をつけて
ダメージイベントで火傷をキャンセルするといった対応になるだろう。
クリーパーの帯電具合はエフェクトではないので、Creeper.setPoweredで設定できる。
走るキャラクターの足元に花火をスポーンさせ、直後に爆破エフェクト→花火はremove()で削除、という状況を繰り返してみた。
足元が爆発し、まるでロケットダッシュでもしているような見た目になる。
(もっとも、花火の爆発音が鳴るので誰がどうみても花火にしか見えないわけだけど。)
この記事を評価
この記事にコメント
- ...