【Unity】螺旋状にオブジェクトを生成する

説明

前回のに続き、次は螺旋状にオブジェクトを生成します。 以前のコードから単に、Z軸を少しずつずらしているだけです。

奥行きの距離を表すために、Length設定値を復活させています。 また、位置決めの前に Z軸の 足し算を行っているので、 初期値は1回分足し込み分を引いています。

f:id:rhythmcan0:20180615000750j:plain

数が少ないと、わかりにくいのでオブジェクトを100個生成してみました。

f:id:rhythmcan0:20180615000753j:plain

コード

前回まで Creater って書いていた。。 Creatorでした・・・

using UnityEngine;

public class SpiralObjectCreator : MonoBehaviour {

    [SerializeField]
    private GameObject createObject; // 生成するオブジェクト

    [SerializeField]
    private int itemCount = 100; // 生成するオブジェクトの数

    [SerializeField]
    private float radius = 5f; // 半径

    [SerializeField]
    private float repeat = 5f; // 何周期するか

    [SerializeField]
    private float length = 50f; // Z軸の長さ


    void Start () {

        var oneCycle = 2.0f * Mathf.PI; // sin の周期は 2π
        var oneLength = length / itemCount; // Z軸の1単位
        var z = transform.position.z - oneLength; // Z軸初期位置 (生成前に足しこみをしているので、一回分引いておく)

        for (var i = 0; i < itemCount; ++i)
        {

            var point = ((float)i / itemCount) * oneCycle; // 周期の位置 (1.0 = 100% の時 2π となる)
            var repeatPoint = point * repeat; // 繰り返し位置

            var x = Mathf.Sin(repeatPoint) * radius;
            var y = Mathf.Cos(repeatPoint) * radius;
            z += oneLength;

            var position = new Vector3(x, y, z);

            Instantiate(
                createObject, 
                position, 
                Quaternion.identity, 
                transform
            );

        }
        
    }
    
}

GitHub

github.com

発展

次回は、球状にオブジェクトを配置します。

後、オブジェクトを粒子状に配置するのではなく、 線として連続してつなげて生成したい。 どうやったら良いんだろう?