Unity

[Unity] 第6回ゲームエフェクトコンテストに参加してみた

More than 1 year has passed since last update.


第6回ゲームエフェクトコンテストとは

image


  • https://www.gameeffectcontest.com/

  • 2017年2月25日までエントリーを受け付けていたコンテスト

  • 第6回からUnity部門も開催したため、乗り込んでみることに

  • 賞は取れなかったものの、初めてがっつり演出を作ったので、どういう風に制作したか書いてみることに


作ったもの


プロジェクト


実行環境


  • Unity5.5.1f1


0. 全体の制御


  • Animationでのみ制御

  • 親となるGamePbjectを作成し、そこにAnimationを追加

  • 子要素にパーティクルやカメラを含み、制御させる


    • パーティクルの発火や消滅

    • カメラの移動

    • オブジェクトの回転速度の制御 (publicな変数はAnimationで制御できる)



  • AnimationはGameObjectのリネームや移動がしにくいのが難点だった


    • 参照が直ぐに外れてしまう



image


1. 箱の出現演出

effect1.gif

image


Ground


  • 地面に這うようなエフェクト


  • Shapeモジュールに Box を指定し、BoxZ の値を0にすることで地面に這わせている



    • Emit fromEdge にすることで箱形状の縁に沿わせて粒子を出現させている



  • Animationによって Color の α を下げることでフェードアウトさせている


Aura


  • 元の素材を Renderer モジュールの RenderModeStretch Billboard に指定することで引き伸ばし


  • Start Speed を設定することで上方に射出


Cube


  • Unity標準機能のプリミティブでCubeを作成

  • StanderdShaderのRenderModeをFadeにすることで透過した箱に


Edge


  • 箱を発光させているように表現する目的 + 最終演出用


  • Shape モジュールに Boxを指定


2. 箱への攻撃

effect2.gif

image


Arrow


  • 箱に向かって飛んでいく赤/青の光のパーティクル

  • 元の素材を Rendererモジュール: RenderMode を Stretch Billboard に指定することで引き伸ばし


  • Emissionモジュール: RateOverTime をAnimatorで制御することで時間に応じて数を増加


  • Shape モジュールを Hemisphere に設定、 Emit from Shell を有効にすることで半円から中心に向かって飛ばすように設定


  • Collision モジュールにて衝突時にパーティクルを消滅させるように設定


  • SubEmitters モジュールにて Collision (衝突時) 指定することで、Cubeと衝突時に各種破片を出すように設定


  • Trails トレイルモジュールはUnity5.5からの新機能



trail_on.gif trail_off.gif


Debris


  • Arrowが砕けた際に出る破片のパーティクル

  • Arrowの SubEmitters モジュールにより発生


  • Emmision モジュールの RateOverTime を 0にし、 Burst を指定することで、衝突した瞬間にのみエフェクトを発生させる

  • またArrow 側の SubEmitters モジュールにて Inhert をColorに指定することでArrowの色を継承


    • Arrowの破片が発生したように見せる工夫




Glass

light_on.gif light_off.gif


Light


  • Arrowのヒットエフェクトの役割のパーティクル

  • Arrowの SubEmitters モジュールにより発生


Cubeの回転


  • シンプルなRotateするScriptを実装

  • angleYをAnimationによって制御することで回転速度を変更する


RotateCube

using UnityEngine;

public class RotateCube : MonoBehaviour
{
public float angleY;

void Update ()
{
this.transform.eulerAngles += new Vector3(0, angleY, 0);
}
}



3. 箱への集中攻撃

effect3.gif

image


Arrowの複製


  • Arrowと設定は殆ど一緒


  • Emission モジュールだけ変更し、継続的な出現ではなく、 Burst による一括出現に変更

  • また Simulaton Speed を1から下げることで、スローに見せている




MotionBlurの適応


  • 衝突タイミングでのみCameraにポストエフェクトである MotionBlur を適応してある


    • StandarAssetsから拝借

    • 今であればむしろ New Post-processing Stack を使うのが良い

    • 動きに対してブラーを適応することでスローな感覚を強調




4. 箱の消滅

effect4.gif


Cubeの消滅


  • Matrialのα値を下げることでじわじわ消滅させる


Edgeの演出


その他


  • Cameraに対していくつか ImageEffectをアタッチ


    • 光表現を強調するためにアタッチした Bloom はともかく、他は冗長だったかも (重くなったかも)

    • 今であればやはり New Post-processing Stack がパフォーマンス的にも良さそう



imageeffect.gif


感想