表示するサンプルコードの言語を指定できます。
エフェクトオブジェクト2D (EffectObject2D)
概要
オブジェクト2Dクラスを拡張し、エフェクトを描画できるようにした2D描画オブジェクトクラスです。Effekseerで作成されたエフェクトを設定し、そのエフェクトを描画します。このオブジェクト自体がエフェクトでなく、エフェクトをコントロールする役目を持っています。そのため、一度エフェクトを表示すれば終わりでなく、何度もエフェクトを表示できます。また、生成されたエフェクトの位置を制御でき、例えばビームサーベルといったエフェクトを生成した後も位置を変更するエフェクトを表示する際、エフェクトオブジェクトの位置や角度を変更することでエフェクトを制御できます。その一方、エフェクトオブジェクトはエフェクトの再生が終わっても自動的に削除されないため、注意が必要です。
エフェクトはかなり大きめにする必要があります。Effekseerの出力時に倍率を設定するか、Scaleを変更して10~20倍程度にするとわかりやすい大きさになる場合が多いです。
エフェクト自体は3Dで製作されていますが、エフェクトオブジェクト2Dは2D描画しかできません。そのため、エフェクトの内容によっては意図しない見栄えになることもあります。例えば、レーザーが画面の横に出て欲しいのに画面の外側に向かってしまう、斬撃の見栄えが悪い、などです。そのような場合、EffectRotationYを設定します。これはエフェクトを再生する時のエフェクトのY軸に対する回転方向であり、この値を変更することでエフェクトが時計回りに回転し画面の外側に向かうエフェクトを横方向に向かうよう変更できます。
Angleは画面の正面方向を軸に時計回り、EffectRotationYは画面の上方向を軸に時計回りです。
クオータービューのゲームを開発する時に、エフェクトを斜め上方向から描画したいことがあります。例えば、火柱といったエフェクトです。そのまま描画すると正面から見ることになりおかしくなります。 このような場合、EffectRotationXを設定します。エフェクトを回転させて斜め上方向から描画します。
EffectRotationXは画面の右方向を軸に時計回りです。
エフェクトには再生を開始したらその場にとどまって欲しい場合とオブジェクトにそって移動して欲しい場合があります。例えば、前者はヒットエフェクト、後者はビームサーベルです。SyncEffectsを切り替えることでこの2つを切り替えられます。SyncEffectsがtrueの場合、オブジェクトが移動するとエフェクトも一緒に移動します。ただし、エフェクトの内容によってはうまくいかない場合があります。
主なメソッド
名称 | 説明 |
---|---|
Play | 設定されているエフェクトを再生します。 |
Stop | このオブジェクトから再生されたエフェクトを全て停止します。 |
主なプロパティ
名称 | 説明 |
---|---|
Effect | 描画に使用するエフェクト |
EffectRotationX | このオブジェクトから再生されるエフェクトのX軸回転の角度(度) |
EffectRotationY | このオブジェクトから再生されるエフェクトのY軸回転の角度(度) |
SyncEffects | エフェクトがオブジェクトに同期して移動するか |
主なイベント
なし
使用方法
EffectObject2Dクラスのサンプルです。
C++
#include <Altseed.h>
/**
@brief EffectObject2Dのサンプル。エフェクトを表示しています。
*/
int main()
{
// Altseedを初期化する。
asd::Engine::Initialize(asd::ToAString("EffectObject2D_Basic").c_str(), 640, 480, asd::EngineOption());
// エフェクトを読み込む。
auto effect = asd::Engine::GetGraphics()->CreateEffect(asd::ToAString("Data/Effect/magic.efk").c_str());
// エフェクトオブジェクトを生成する。
auto effectObj = std::make_shared<asd::EffectObject2D>();
// エフェクトオブジェクトのインスタンスをエンジンに追加する
asd::Engine::AddObject2D(effectObj);
// エフェクトを設定する。
effectObj->SetEffect(effect);
// エフェクトの位置、大きさを指定する。
effectObj->SetPosition(asd::Vector2DF(320, 240));
effectObj->SetScale(asd::Vector2DF(50, 50));
// エフェクトを再生する。
effectObj->Play();
// Altseedのウインドウが閉じられていないか確認する。
while (asd::Engine::DoEvents())
{
// Altseedを更新する。
asd::Engine::Update();
}
// Altseedの終了処理をする。
asd::Engine::Terminate();
}
C#
/// <summary>
/// エフェクトを再生するサンプル。
/// </summary>
class EffectObject2D_Basic
{
public string Description
{
get { return ""; }
}
public string Title
{
get { return ""; }
}
public string ClassName
{
get { return "EffectObject2D_Basic"; }
}
[System.STAThread]
static void Main(string[] args)
{
// Altseedを初期化する。
asd.Engine.Initialize("EffectObject2D_Basic", 640, 480, new asd.EngineOption());
// エフェクトを読み込む。
var effect = asd.Engine.Graphics.CreateEffect("Data/Effect/magic.efk");
// エフェクトオブジェクトを生成する。
var effectObj = new asd.EffectObject2D();
// エフェクトオブジェクトのインスタンスをエンジンに追加する。
asd.Engine.AddObject2D(effectObj);
// エフェクトを設定する。
effectObj.Effect = effect;
// エフェクトの位置、大きさを指定する。
effectObj.Position = new asd.Vector2DF(320, 240);
effectObj.Scale = new asd.Vector2DF(50, 50);
// エフェクトを再生する。
effectObj.Play();
// Altseedのウインドウが閉じられていないか確認する。
while (asd.Engine.DoEvents())
{
// Altseedを更新する。
asd.Engine.Update();
}
// Altseedの終了処理をする。
asd.Engine.Terminate();
}
}
Java
/**
* エフェクトを再生するサンプル。
*/
class EffectObject2D_Basic
{
public java.lang.String getDescription() {
return "";
}
public java.lang.String getTitle() {
return "";
}
public java.lang.String getClassName() {
return "EffectObject2D_Basic";
}
public static void main(String args[])
{
// Altseedを初期化する。
asd.Engine.Initialize("EffectObject2D_Basic", 640, 480, new asd.EngineOption());
// エフェクトを読み込む。
asd.Effect effect = asd.Engine.getGraphics().CreateEffect("Data/Effect/magic.efk");
// エフェクトオブジェクトを生成する。
asd.EffectObject2D effectObj = new asd.EffectObject2D();
// エフェクトオブジェクトのインスタンスをエンジンに追加する。
asd.Engine.AddObject2D(effectObj);
// エフェクトを設定する。
effectObj.setEffect(effect);
// エフェクトの位置、大きさを指定する。
effectObj.setPosition(new asd.Vector2DF(320, 240));
effectObj.setScale(new asd.Vector2DF(50, 50));
// エフェクトを再生する。
effectObj.Play();
// Altseedのウインドウが閉じられていないか確認する。
while(asd.Engine.DoEvents())
{
// Altseedを更新する。
asd.Engine.Update();
}
// Altseedの終了処理をする。
asd.Engine.Terminate();
}
}