説明
Unityで円状にオブジェクトを生成します。
前回のサインカーブにオブジェクト生成するものからの発展です。
ちょっとリファクタリングしてますが、yの生成方法は前回と同じです。
さらに、xを同様にCosで求めるだけで、円形になります。
それぞれの周期が半分ずつずれてるので、うまい具合に円になってくれるのですが、
xとyにそれぞれCosとSin与えておけば円になるって覚えとけばなんとかなります。
あと、距離は円ということで 半径radiusに置き換えました。
円形なので、繰り返しについては正直意味がないんですが、
次の発展絵使えるのでとりあえず残しています。
また、真ん中の球はコピー元のオブジェクトです。
邪魔な場合は、createObjectにPrefabを指定するか、
円を生成後、createObject自体を消滅させても良いでしょう。
サンプルコード
using UnityEngine;
public class CircleObjectCreater : MonoBehaviour {
[SerializeField]
private GameObject createObject; // 生成するオブジェクト
[SerializeField]
private int itemCount = 40; // 生成するオブジェクトの数
[SerializeField]
private float radius = 5f; // 半径
[SerializeField]
private float repeat = 2f; // 何周期するか
void Start () {
var oneCycle = 2.0f * Mathf.PI; // sin の周期は 2π
for (var i = 0; i < itemCount; ++i)
{
var point = ((float)i / itemCount) * oneCycle; // 周期の位置 (1.0 = 100% の時 2π となる)
var repeatPoint = point * repeat; // 繰り返し位置
var x = Mathf.Cos(repeatPoint) * radius;
var y = Mathf.Sin(repeatPoint) * radius;
var position = new Vector3(x, y);
Instantiate(
createObject,
position,
Quaternion.identity,
transform
);
}
}
}
GitHub