Help us understand the problem. What is going on with this article?

PostProcessingStackで手軽にそれっぽいアブストラクトを作る

More than 1 year has passed since last update.

概要

これを作ります。だいたい所用15分くらいかと思います。


環境

Unity 2018.2.5f1

作り方

Unityのビルトインで入っているSphereを適当に四角形に配置します。(画像では見やすいよう球のScaleを各軸1にしていますが、0にしてしまった方があとあと見栄えがいいです)
スクリーンショット 2019-03-16 22.23.22.png

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が必要になりますので、まずこれを作成します。スクリーンショット 2019-03-16 22.30.42.png

各SphereにTrailRendererを追加し、MaterialとColor、Widthの設定を行ないます。
スクリーンショット 2019-03-16 22.33.36.png

ここまでできたら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)を配置します。スクリプトには下記のようにオブジェクトをアタッチします。

スクリーンショット 2019-03-16 22.45.31.png

これで骨格は完成です。再生してみましょう。
スクリーンショット 2019-03-16 22.47.29.png

これにPostProcessingStackによってエフェクトをかけます。
PPSの導入はテラシュールブログさんの下記の記事に従えば10分もかからずに終わると思います。
http://tsubakit1.hateblo.jp/entry/2018/03/06/224207

PostProcessVolumeにbloomを設定します。

スクリーンショット 2019-03-16 22.51.40.png

できました。

スクリーンショット 2019-03-16 22.52.33.png

応用

記事と同じ考え方で、プレハブを作っておいてランダムに配置→PostProcessingStackという組み合わせで結構色々なアブストラクトが作れます。

coldsleep6666
同人サークルでゲームを作っています。本業はWebエンジニアです。 Unity/JS/AWS/Laravel
http://www.dlsite.com/maniax/circle/profile/=/maker_id/RG31056.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした