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 animation : 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; // 回転数を表記

    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);
       }
        }

        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;
        }

        }

        }

}

0

2Answer

意図しているものか分かりませんが、以下のようにできます。
少し気になるところがあったので修正しています。
詳しくはコメント見てください。

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

public class animation : MonoBehaviour
{
    private Animator animator;
    private int number,z,count;
    private bool countdown=true;//0,1しか使用しないint型よりbool型の方がミスも防止でき分かりやすいです
    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;

        //Updateは毎フレーム回ります。毎フレーム処理しないものは書かない方が良いです。
        //特にはGetComponentとても重いので推奨しません
        animator = GetComponent<Animator>();
        animator.SetInteger("taiki",i);
        animator.SetInteger("wait",z);

    }


    void Update()
    {
             
    
        if(Input.GetKeyDown(KeyCode.LeftArrow))//カウンター
        {
            if(_timeElapsed<=3)
            {
                _timeElapsed2 +=Time.deltaTime;
            }
            number = Random.Range (1, 9);//ここに書く
            animator.SetInteger("zugara",number);
            if(count<=4)
            {
                count+=1;
                countdown=true;
                z=1;
                Debug.Log("カウント+1");
                Debug.Log(count);

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

           }
        }


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

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


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

            if(0<count&&count<=4)
            {
                countdown=true;
            }

            //ここで消す
            if(insObjList.Count != 0)
            {

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

     }

}
1Like

[SerializeField]private Gameobject insObj;//生成するオブジェクト(Unityのインスペクターでアタッチしてください)
private List insObjList = new List();//生成したオブジェクトのリスト

すみません私の知識不足でこの部分がよくわからないのですが。スフィアを生成したい場合どのように書けばよろしいでしょうか?

0Like

Comments

  1. スフィアはこちら
    の認識で合ってますでしょうか。

    UnityではこういったオブジェクトをGameObjectとして扱います。
    Unityエディター上でPrefab化し生成します。

    変数の前に[SerializeField]と書くことで、Unityエディター上で直感的に操作ができます。
    使い方は簡単で、インスペクターで直接値を入れるだけです。

    今回の場合、Unityエディターでスフィアを作成、Prefab化し、インスペクター上で作成したPrefabをドラッグ&ドロップでinsObjに入れれば良いです。

  2. @jojoburaki

    Questioner

    Assets\end.cs(18,29): error CS0246: The type or namespace name 'Gameobject' could not be found (are you missing a using directive or an assembly reference?)

    Assets\end.cs(19,18): error CS0246: The type or namespace name 'Gameobject' could not be found (are you missing a using directive or an assembly reference?)

    何度もすみません。このようなエラーが出るのですがどうしたらよいですか?

  3. 失礼しました。
    こちらのミスです。

    プログラム上にある「Gameobject」を「GameObject」にしてみてください。

  4. @jojoburaki

    Questioner

    無事にできました。
    本当に助かりました。ありがとうございます。

  5. いえいえ。
    お力になれたようでなによりです。

Your answer might help someone💌