(注意)
この連載は、ある程度ゲームを作ったことある人の
ためのものです。「アタッチ」とか「C#スクリプト
の作成」とか「カメラアングルの変更」とか、その
レベルの話は省略しています。よろしくお願いしま
す。
前回の続きです。
前回はブロックが床に落ちるたびに、一個ずつ出てくる
ようになったのですが、ブロックが積み重なるともうブ
ロックは出てこなくなります。これを改善したいと思い
ます。
(1)ブロックをPrefabにしましょう
GeneのオブジェクトにPrefabを突っ込みます。
下のブロックは消してしまいましょう。
(2)フラグを返す対象を増やす
今のところ、床に接触した時だけflagを返しているので
すが。ブロックやそのコピーにも適応させましょう。
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name=="Field") {
GC.flag = 0;
}
if (collision.gameObject.name=="Block") {
GC.flag = 0;
}
if (collision.gameObject.name == "Block(Clone)")
{
GC.flag = 0;
}
}
ただ、これだとまた無秩序に置けるんですよね・・・
床に落ちたらゲームオーバーにしたいんですけどね。
(3)射出するGeneが左右に動くようにしましょう。
GeneについてるGame CのUpdateに次のプログラムを
追加します。
//インスタンス用
public GameObject blk;
//スコア
public int Score = 0;
//フラグ
public int flag = 0;
//スタート位置
Vector3 stPos;
// Start is called before the first frame update
void Start()
{
//スタート位置を取得
stPos = transform.position;
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.Space)&&flag==0)
{
//オブジェクトを生成する
Instantiate(blk, new Vector3(transform.position.x, transform.position.y - 1, transform.position.z), Quaternion.identity);
//フラグを立てて
flag = 1;
//スコアを加算する
Score += 1;
}
//射出の左右の動き
transform.position = new Vector3(Mathf.Sin(Time.time) * 4.0f + stPos.x, stPos.y, stPos.z);
}
あれれ?ブロックが積み上がると射出が引っかかる・・・
というわけで、様々な問題を抱えながら次回です!
質問があればDMやらコメントをお願いします。
それではよきプログラミングライフを!
またね。