Más contenido relacionado
クロスサマナーのド派手演出制作を支えたクリエイティブ開発環境
- 2. © POKELABO, INC.
自己紹介
池田 博幸 41歳
エフェクトアーティスト
主な社歴 スクウェア 、CyberConnect2
略歴
背景デザイナー
↓
エフェクトアーティスト
↓
株式会社ポケラボ入社後
・クロスサマナーの奥義を担当
- 12. © POKELABO, INC.
1. 低レア (★3) 1~15combo
2. 高レア (★4) 15~25combo
3. 最高レア(★5) 25~35combo
※あくまで目安。最終的には企画側の調整あり
この仕様に従ってアーティストが演出を制作
奥義演出仕様と運営の話
クロサマコンボ数基準
- 14. © POKELABO, INC. 142015/2/10
近接系 size x=0.5
遠隔系 size x=4.0
超遠隔系 size x=8.0コライダのsize xの値で
相対距離を設定
これが開幕時の立ち位置
奥義演出仕様と運営の話
※分かり易くするためにコライダを視覚化
奥義演出開幕時の相対位置
- 15. © POKELABO, INC.
1. 攻撃判定がやられ判定に重なった時、指定した角度に指定した強度で敵を飛ばす
2. 地面判定あり※赤い線が地面
90°
270°
0°180°
45°135°
225° 315°
ノックバックの仕組み
奥義演出仕様と運営の話
白○=攻撃判定 緑○=やられ判定
矢印=ノックバック方向
- 16. © POKELABO, INC. 162015/2/10
自キャラ 敵
0 1.00.5
CloseUpCenterRate
値が0の場合自キャラ、0.5の時は双方、1の時は敵を捉える
奥義演出仕様と運営の話
カメラワークの仕組み
- 32. © POKELABO, INC.
エンジニア寄りの話
//AnimationWindowの取得
EditorWindow[] editorWindows =
Resources.FindObjectsOfTypeAll(typeof(EditorWindow)) as EditorWindow[];
foreach (EditorWindow editorWindow in editorWindows)
{
if (editorWindow.title == “UnityEditor.AnimationWindow”)
{
animationWindow = editorWindow;
break;
}
}
//タイムラインの取得
timeLineTime = (float)animationWindow.GetType().InvokeMember("get_time",
BindingFlags.InvokeMethod, null, animationWindow, null);
//選択中のAnimationClipの取得
object state = animationWindow.GetType().InvokeMember("get_state",
BindingFlags.InvokeMethod, null, animationWindow, null);
AnimationClip clip = state.GetType().InvokeMember("m_ActiveAnimationClip",
BindingFlags.GetField, null, state, null) as AnimationClip;
AnimationWindowの取得方法
- 33. © POKELABO, INC.
エンジニア寄りの話
//publicメソッドの取得
MethodInfo[] methods = animationWindow
.GetType().GetMethods(BindingFlags.Public|BindingFlags.Instance|Bi
ndingFlags.DeclaredOnly);
//protectedメソッドの取得
MethodInfo[] methods =
animationWindow.GetType().GetMethods(BindingFlags.NonPublic|Bindin
gFlags.Instance|BindingFlags.DeclaredOnly);
ProtectedなMethodや
Parameterの確認方法
一覧を表示する関数があると便利
- 34. © POKELABO, INC.
エンジニア寄りの話
if (HitBounds.Intersects( TargetCollider ().bounds) )
Particleの再生
Particle.Simulate( nowTime );
GameObject.SampleAnimation( clip, nowTime );
Coliderの判定
Animation内のAnimationの再生
Rigidbody(物理演算)の再現
EditorWindowのUpdate内で手動で物理シミュレーション
ParticleがActiveになるかScriptからInstantiateされた個数分を予めhierarchyに生成
その他オリジナルのScript
気合いでEditorWindowのUpdate内からアクセスして操作
※シミュレーションする前提のスクリプトなら楽(クロサマは後付けだった)
Notas del editor
- 私は今後もこの信念を貫きつつユーザーの皆様を感動させる演出を作り続けます。
では続いて
- 弊社では定期的に社内コンペを開催しており、その優勝者であり今作の生みの親である能勢の企画が商品化されたものです。
当時弊社はフルネイティブのノウハウはゼロで、挑戦の意味でUnityで何かやろうということは決まっていました。
ドット絵の理由は、今どきのユーザーの視点からは逆に新しさを感じさせるところがその理由です。
他社と同じ土俵で勝負してもノウハウの蓄積が違いすぎますし、砂漠で砂を売ることになりかねません。
そういう意味で今作のドット絵の採用は正しかったと思います。
最後に付け加えますと、Unityでド派手な演出作りたいという私自身の欲望も合わさっています。
- 演出仕様ですが、クロサマはコンボありきですのでそこから説明します。まずクロサマの大まかなコンボ数の目安がこちらです。
制作の流れとしては、まず仕様書でユニットのレアリティと属性を確認します。
その後、炎属性で星4だから20コンボくらい積める感じで奥義演出の制作を依頼する感じです。
- つづいて自キャラと敵の相対位置について、こちら一言でいうと舞台・演劇用語でいうところのバミリですね。
こちらを最初にコライダを使って指定し奥義演出開幕時のお互いの立ち位置を決めるわけです。
コライダで見えない壁を作り、その両端に自キャラと敵を置くイメージです。
- 次にノックバックについて簡単に説明します。2D格ゲーで用いられている手法とまったく同じです。
攻撃判定がやられ判定に接触したときにノックバック(のけぞり、後退)が発生するしくみになっています。
クロサマではこれを利用して奥義などの空中連続コンボを作成しています。
- 最後にカメラワークですが、クロサマの場合自動カメラですので指定が無ければ自キャラと敵の中心座標をフォローします。
その中心座標はアーティスト側でも自由に指定でき、さらにズームなどのアニメーションを加えることで動的なカメラワークも実現可能になっています。
最近完全な手付カメラの対応も完了し、さらに意図通りの演出が可能になりました。以上、3つの組み合わせて基本的な奥義の演出が作られています。
- 運営側の要望に即対応するためにリアルタイムプレビューが絶対に欲しい。
- ちなみにリアルタイムプレビューは9年以上前にスクエニFF12チームが先駆してました。
2006年といったらポケラボ創立前ですね。確か開発に5年以上かかったと伺っていますので、実際は10年以上前になるはずです。
えふぇくちゃんがリアルタイムプレビューを搭載していたからアーティストが存分に力量を発揮しあの召喚獣演出が生みだせたのではないかと思っています。
- そんなリアルタイムプレビューが絶対に欲しい。
でもご存じのとおりUnityは
- Unityというゲームエンジンに対する反逆でもあります。
- そこで我々クリエイティブチームの出した答えがこちらです
- ちなみにこれはリアルタイムプレビューが無かった頃の字コンテです。
私自身制作前にこういった字コンテを書いてましたが直感的ではなく、見ている私もわかりにくいです。
SkillEditorのおかげで直感的に作業できるようになりました。私基準でいうと4日かかった奥義が2日以下で作れるようになりました。
- 続いて弊社エンジニアの重田にまとめていただいたリアルタイムプレビューに関する資料を発表させていただきます。
本人いわく、ものすごく高度な技術を駆使しているわけじゃないですが
与えられた環境に我慢せず、枠に囚われない発想でゲームエンジンに反逆してみると意外な解決法があります
むしろ高度な技術よりも柔軟な発想が先だと申しておりました。