jojoburaki
@jojoburaki

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

unity 間隔を開けて横にオブジェクトを生成させる方法を教えてください

オブジェクトが二つ以上生成したときに間隔を開けて横に生成されるプログラムを教えてください

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class b : MonoBehaviour
{
   private Animator animator;
    private int number,i,z,count,countdown;
private string currentStateName;
private float _repeatSpan;    //繰り返す間隔
private float _horyuuSpan;   
private float _timeElapsed2;
private float _timeElapsed;   //経過時間
private GameObject kaitenText; // 回転数を表記
[SerializeField]private GameObject insObj;//生成するオブジェクト(Unityのインスペクターでアタッチしてください)
private List<GameObject> insObjList = new  List<GameObject>();//生成したオブジェクトのリスト


    private void Start()
    {
         count=0;//保留数
         countdown=0;
        _repeatSpan = 9; 
        _horyuuSpan = 3;
        
        _timeElapsed = 0;   //経過時間をリセット
        _timeElapsed2=0;

    }


void Update()
    {



    number = Random.Range (1, 9);
    animator = GetComponent<Animator>();
     animator.SetInteger("taiki",i);
     animator.SetInteger("wait",z);
     
    
     


        if(Input.GetKeyDown(KeyCode.LeftArrow))//カウンター
        {
      

        if(_timeElapsed<=3){
        i=1;
        }
        animator.SetInteger("zugara",number);
        if(count<=4){
        count+=1;
        countdown=1;
        z=1;
       Debug.Log("カウント+1");
       Debug.Log(count);

         //ここでオブジェクト生成
                //消すためにListに保持
                insObjList.Add(Instantiate (insObj));


       }
        }

        if(i==1){
       _timeElapsed2 +=Time.deltaTime;
        }

       if (_timeElapsed2 >= _horyuuSpan)
        {
        i=0;
        Debug.Log("待機");
         _timeElapsed2= 0;   //経過時間をリセットする
        }
       

       //時間をカウントする
       if(countdown==1){
        _timeElapsed += Time.deltaTime; 
        }


        //経過時間が繰り返す間隔を経過したら
        if (_timeElapsed >= _repeatSpan)
        {
        count--;
        Debug.Log("カウント-1");
        Debug.Log(count);
        if(0<count&&count<=4)
        {
        i=1;
        Debug.Log("待機解除");
        animator.SetInteger("zugara",number);
        }
           countdown=0;
           
            _timeElapsed = 0; 
            _timeElapsed2= 0;//経過時間をリセットする

        if(0<count&&count<=4)
        {
        countdown=1;
        }
          if(insObjList.Count != 0)
            {

                int index = 0;//任意の配列番号
                Destroy(insObjList[index]);//オブジェクト消す
                insObjList.RemoveAt(0);//箱から消す
        }

        }
        }
}
0

1Answer

以下のようにすれば動くかと思います。

横にずらすのが詳細が分からなかったため、生成したオブジェクトの数、横にずらしています。

transformで座標指定してます。
生成したオブジェクトのインスペクターの1番上の座標を変更しているものです。
とりあえずインスペクターと同じ座標になるtransform.localPositionにしてます。
(別にtransform.positionというのがありますが親オブジェクトがあるとスクリプトで指定した値とインスペクターに表示されている値が違うので今回の説明はこちらを使用してます。)

詳細が分からないのでカスタマイズしてください。

 //ここでオブジェクト生成
GameObject obj = Instantiate (insObj);

//生成したオブジェクトを移動
obj.transform.localPosition = new Vector3(insObjList.Count,0,0);

 //消すためにListに保持
 insObjList.Add(Instantiate (obj));
0Like

Your answer might help someone💌