前提・実現したいこと
アイテム取得における爆弾生成個数の制限
ここに質問の内容を詳しく書いてください。
最初に、拙いスクリプトである事をお詫びいたします。ですが、何卒ご尽力をお願いいたします。
ただいまUnityにおいてボンバーマンを制作しています。
他の方のブログなどを見て、Playerが爆弾を生成することは出来ております(スペースキーで生成)。
ですが、今のままですと、ゲーム開始時から何個も爆弾を出せてしまうため、自分の作りたいボンバーマンではなくなってしまいます。
ですので、最初はいくらスペースキーを押したとしても1個しか生成されないようにしたいです。
スクリプト上にて、生成可能限界数を「MaxBomb」と名付け、最初に宣言しています。
フィールド上に置いた爆弾を「BombCount」と名付けました。
C♯
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class UnityCyanController : MonoBehaviour 6{ 7 //Rigidbodyを変数に入れる 8 Rigidbody rb; 9 10 //スピード 11 public float speed = 3.0f; 12 13 14 //Animatorを入れる変数 15 private Animator animator; 16 17 //ユニティちゃんに位置を入れる 18 Vector3 playerPos; 19 20 21 22 GameObject Player; 23 GameObject LeftWall; 24 GameObject RightWall; 25 GameObject BottomWall; 26 GameObject TopWall; 27 28 Vector3 LeftPos; 29 Vector3 RightPos; 30 Vector3 BottomPos; 31 Vector3 TopPos; 32 33 34 //Can the player drop bombs? 35 public bool canDropBombs = true; 36 37 //Prefabs 38 public GameObject bombPrefab; 39 40 //爆弾個数制限 41 public int MaxBomb; 42 43 //Is this player dead? 44 public bool dead = false; 45 46 47 48 49 // Use this for initialization 50 void Start() 51 { 52 Player = GameObject.Find("Player"); 53 LeftWall = GameObject.Find("LeftWall"); 54 RightWall = GameObject.Find("RightWall"); 55 BottomWall = GameObject.Find("BottomWall"); 56 TopWall = GameObject.Find("TopWall"); 57 58 LeftPos = LeftWall.transform.position; 59 RightPos = RightWall.transform.position; 60 BottomPos = BottomWall.transform.position; 61 TopPos = TopWall.transform.position; 62 63 64 //Rigidbodyを取得 65 rb = GetComponent<Rigidbody>(); 66 67 //ユニティちゃんのAnimatorにアクセスする 68 animator = GetComponent<Animator>(); 69 70 //ユニティちゃんの現在より少し前の位置を保存 71 playerPos = transform.position; 72 73 } 74 75 76 77// Update is called once per frame 78 void Update() 79 { 80 if (Input.GetKeyDown(KeyCode.Space)) 81 { //爆弾を生成 82 DropBombs(); 83 } 84 85 86 87 //移動範囲の制限 88 Player.transform.position = (new Vector3 89 (Mathf.Clamp(Player.transform.position.x, LeftPos.x, RightPos.x), 90 transform.position.y, 91 Mathf.Clamp(Player.transform.position.z, BottomPos.z, TopPos.z)) 92 ); 93 94 95 //A・Dキー、←→キーで横移動 96 float x = Input.GetAxisRaw("Horizontal") * Time.deltaTime * speed; 97 98 //W・Sキー、↑↓キーで前後移動 99 float z = Input.GetAxisRaw("Vertical") * Time.deltaTime * speed; 100 101 //現在の位置+入力した数値の場所に移動する 102 rb.MovePosition(transform.position + new Vector3(x, 0, z)); 103 104 105 //ユニティちゃんの最新の位置から少し前の位置を引いて方向を割り出す 106 Vector3 direction = transform.position - playerPos; 107 108 //移動距離が少しでもあった場合に方向転換 109 if (direction.magnitude > 0.01f) 110 { 111 //directionのX軸とZ軸の方向を向かせる 112 transform.rotation = Quaternion.LookRotation(new Vector3 113 (direction.x, 0, direction.z)); 114 115 //走るアニメーションを再生 116 animator.SetBool("Running", true); 117 } 118 else 119 { 120 //ベクトルの長さがない=移動していない時は走るアニメーションはオフ 121 animator.SetBool("Running", false); 122 } 123 124 125 //ユニティちゃんの位置を更新する 126 playerPos = transform.position; 127 128 129 130 } 131 132 133 private void DropBombs() 134 { 135 136 if (bombPrefab) 137 { 138 // X 座標と z 座標を四捨五入 139 float x = Mathf.RoundToInt(transform.position.x); 140 float z = Mathf.RoundToInt(transform.position.z); 141 transform.position = new Vector3(x, 0, z); 142 143 144 145 // 爆弾のゲームオブジェクトを生成 146 Instantiate 147 ( 148 bombPrefab, 149 transform.position, 150 bombPrefab.transform.rotation 151 ); 152 153 154 155 //フィールド上の爆弾の数を取得 156 int BombCount = GameObject. 157 FindGameObjectsWithTag("BombItem").Length; 158 159 BombCount += 1; 160 161 //を解くと再生でバグる 162 163 //MaxBombとDropBombsの数が一緒なら爆弾生成出来ず 164 if (MaxBomb == BombCount) 165 { 166 bool canDropBombs = false; 167 } 168 169
現在何個も生成可能な状態となっております。
アイテム取得時に取得数によって生成できる爆弾の個数が増えていくようにもしたいのですが、まずは1個だけ出て、爆発して消えればまた生成可能になるようにしたいです・
試したこと
https://mono-pro.net/archives/4916
上記のサイトで
if(shotCount < 1)
return;
を使用したところ、爆弾が1個しか生成されませんでしたが、爆発後に次の爆弾が出てきませんでした。
「private IEnumerator」「 yield return」などを使うのかとも思いましたが、書き方がわかりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/13 21:12
2018/11/15 03:12
2018/11/15 14:10