Open10
Unity ランダムかつある程度矛盾がない歯車の平面装飾
ピン留めされたアイテム
いきさつ
TinkerCadで遊んでたら、プリセットのモデルに歯車があった
これ使ってある程度矛盾のない歯車の平面装飾作れたら可愛いかも
かわいい!
- TinkerCadで作ったモデルのエクスポートをするとき、原点付近にモデルを移動させとく必要がある
- importしたモデルにタグとか触れなくて、もう一回Prefab化する必要がある…そんなもんなのか???
- public配列にPrefabとマテリアル入れてランダム生成ランダム色付けすることはできそう
- 子オブジェクトの取得が上手くいかない
子オブジェクトが生成されているのかをとりあえず確かめる
for (int i = 0; i <= 40; i++)
{
GameObject gear = Instantiate(PrefabGears[(Random.Range(0, 3))], new Vector3(0.3f*i-0.3f*20,Random.Range(-1f,1f),0),Quaternion.identity);
// gear.GetComponent<MeshRenderer>().material = Colors[(Random.Range(0, 3))];
Debug.Log(this.transform.childCount);
float gearsScale = Random.Range(0.5f, 3f);
gear.transform.localScale = new Vector3(gearsScale,gearsScale,gearsScale);
}
0になってた
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = new Vector3(0, 1.5f, 0);
primitiveなゲームオブジェクトを出すやつ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LayOutGears : MonoBehaviour
{
[SerializeField] int TotalNumOfGears=40;
[SerializeField] GameObject[] PrefabGears = new GameObject[3];
[SerializeField] Material[] Colors = new Material[3];
public List<float> Spheres = new List<float>();
void Start()
{
for (int i = 0; i < TotalNumOfGears; i++)
{
GameObject gear = Instantiate(PrefabGears[Random.Range(0, 3)], new Vector3(0.3f*i-0.3f*20,Random.Range(-1f,1f),0),Quaternion.identity);
GameObject gearsChild = gear.transform.GetChild(0).gameObject;
gearsChild.GetComponent<MeshRenderer>().material = Colors[(Random.Range(0, 3))];
//Debug.Log(gear.transform.GetChild(0));
//Debug.Log(gear.name);
float gearsScale = Random.Range(0.5f, 3f);
gear.transform.localScale = new Vector3(gearsScale,gearsScale,gearsScale);
Spheres.Add(gearsScale);
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = new Vector3(gearsScale,gearsScale,gearsScale);
}
//Debug.Log(Spheres.Count);
//Debug.Log(Spheres[0]);
// GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
//sphere.transform.position = new Vector3(0, 1.5f, 0);
}
// Update is called once per frame
void Update()
{
}
}
今こんな