概要
これを作ります。だいたい所用15分くらいかと思います。
Unityでエフェクトを作っています
— 吉田/サークル暇乞い (@coldsleep6666) 2019年3月8日
(リプ扱いになってたので直しました) pic.twitter.com/G64QIXyC4b
環境
Unity 2018.2.5f1
作り方
Unityのビルトインで入っているSphereを適当に四角形に配置します。(画像では見やすいよう球のScaleを各軸1にしていますが、0にしてしまった方があとあと見栄えがいいです)
CirculerTrailのルートに下記のコードをアタッチして、回転動作を追加します。
using UnityEngine;
public class Actor : MonoBehaviour
{
void Update () {
transform.Rotate(new Vector3(60*Time.deltaTime, 90*Time.deltaTime, 120*Time.deltaTime));
}
}
続いて、各Cubeが箒星のように尾を引いて運動するようにTrailRendererを設定します。TrailRendererに色彩を設定する際には、Sprite系のシェーダ(Shader/Spritesなど)が設定されたMaterialが必要になりますので、まずこれを作成します。
各SphereにTrailRendererを追加し、MaterialとColor、Widthの設定を行ないます。
ここまでできたらCirculerTrailをPrefab化します。続いて、これらをランダムに配置するコードを作成し、シーン上の適当なオブジェクトにアタッチします。
using UnityEngine;
using System.Linq;
public class ActorsController : MonoBehaviour
{
[SerializeField]
GameObject actor;
[SerializeField]
GameObject actorParent;
[SerializeField]
public int actorsNum = 10;
[SerializeField]
float angleRangeMax = 180f;
[SerializeField]
float angleRangeMin = -180f;
[SerializeField]
float scaleRangeMax = 1.4f;
[SerializeField]
float scaleRangeMin = 0.1f;
void Start ()
{
Enumerable.Range(0,actorsNum)
.ToList()
.ForEach(obj =>
{
var temp = Instantiate(this.actor, actorParent.transform, true) as GameObject;
SetActorsParameter(temp);
});
}
private void SetActorsParameter(GameObject actor)
{
actor.transform.localScale = Random.Range(scaleRangeMin, scaleRangeMax) * Vector3.one;
actor.transform.localRotation = Quaternion.Euler(
Random.Range(angleRangeMin, angleRangeMax),
Random.Range(angleRangeMin, angleRangeMax),
Random.Range(angleRangeMin, angleRangeMax));
}
}
シーンに適当にActorのルートとなるオブジェクト(ActorRoot)を配置します。スクリプトには下記のようにオブジェクトをアタッチします。
これにPostProcessingStackによってエフェクトをかけます。
PPSの導入はテラシュールブログさんの下記の記事に従えば10分もかからずに終わると思います。
http://tsubakit1.hateblo.jp/entry/2018/03/06/224207
PostProcessVolumeにbloomを設定します。
できました。
応用
記事と同じ考え方で、プレハブを作っておいてランダムに配置→PostProcessingStackという組み合わせで結構色々なアブストラクトが作れます。