Open10

Unity ランダムかつある程度矛盾がない歯車の平面装飾

ピン留めされたアイテム
HANAEHANAE

いきさつ
TinkerCadで遊んでたら、プリセットのモデルに歯車があった
これ使ってある程度矛盾のない歯車の平面装飾作れたら可愛いかも

HANAEHANAE
  • TinkerCadで作ったモデルのエクスポートをするとき、原点付近にモデルを移動させとく必要がある
  • importしたモデルにタグとか触れなくて、もう一回Prefab化する必要がある…そんなもんなのか???
  • public配列にPrefabとマテリアル入れてランダム生成ランダム色付けすることはできそう
  • 子オブジェクトの取得が上手くいかない
HANAEHANAE
HANAEHANAE

子オブジェクトが生成されているのかをとりあえず確かめる

   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);
        }
HANAEHANAE
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = new Vector3(0, 1.5f, 0);

primitiveなゲームオブジェクトを出すやつ

HANAEHANAE
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()
    {
        
    }
}

今こんな