今回は前回作成したタスクリストに沿っていろいろなオブジェクトを作成していこうかと思います。
発射台(Player)の作成
まず最初に今回作る土台について必要となる物を考えます。
・発射台となるオブジェクトの作成
・発射台をクリックやタップすると弾丸を発射
・発射される弾丸の作成
とりあえずはこの3つを目指して作成していきます。
発射台となるオブジェクトの作成
今回はシンプルに四角のオブジェクトを使ってそれっぽく仕上げていきます。
次にクリックされた時の為にボックスコライダー2D・イベントトリガーC#スクリプトをアタッチしていきます。(Playerのインスペクターの下の方)
C#スクリプトは後ほど記載します。
後は、地味に忘れがちなカメラからの「Physics2DRaycaster」です。
これが無いとイベントトリガーが認識してもらえず、タップした時の処理が行えません。
イメージとしてはカメラからレーザーを飛ばして対象のオブジェクトに当たったらインベントが開始される仕様となっているようです。
発射用弾丸を作成
弾丸に必要な事を先に記載してみる
・丸い画像の用意
・Rigidbody2Dのアタッチ
・CircleCollider2Dのアタッチとマテリアルの作成
・C#スクリプトのアタッチ
今回画像はUnityアセットストアから適当に探してきました。
Rigidbody2D・CircleCollider2D・Ballスクリプトをアタッチしました。
次にボールを反射させる為にマテリアルを作成し、CircleCollider2Dにセットしておきます。
「hansya」と言うマテリアルを作成し、CircleCollider2Dのマテリアルの箇所にセットしておきます。
最後にボールのオブジェクトをPrefub化しておきます。
以上でスクリプト以外の箇所準備OKとなります。
スクリプトを書いて行きます
まずは簡単なボールから書いて行きます。
public class ball : MonoBehaviour
{
//このコードは表示画面から姿が見えなくなったら消去されるコード
private void OnBecameInvisible()
{
Destroy(this.gameObject);
}
//このコードはターゲットに当たったら消去されるコードです。
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Terget")
{
Destroy(this.gameObject);
}
}
}
次にPlayerのスクリプトも書いて行きます。
今後Player自体もPrefub化してステージを跨いでも簡単に使用できるように
角度の計算のコードも一緒に追加して書いておく
public class PlayerCot : MonoBehaviour
{
//弾丸
public GameObject Ball_Prefub;
//弾丸生成用
GameObject BallObj;
//弾丸用
Rigidbody2D rd;
Vector2 force = new Vector2(5, 20);
// 角度
float Angle;
[SerializeField] int Power;
[SerializeField] GameObject ballPos;
// 移動ベクトル
Vector3 direction;
public void OneShot_Btn() //玉を発射
{
AngleChek();//発射前に角度を計算
BallObj = Instantiate(Ball_Prefub, ballPos.transform.position, ballPos.transform.rotation);
rd = BallObj.GetComponent<Rigidbody2D>();
rd.AddForce(direction * Power, ForceMode2D.Impulse);
}
void AngleChek()
{
Angle = 90 + transform.localEulerAngles.z;
// 角度をラジアンに変換
float rad = Angle * Mathf.Deg2Rad;
// ラジアンから進行方向を設定
direction = new Vector3(Mathf.Cos(rad), Mathf.Sin(rad), 0);
}
}
必要な個所にPrefubをセットしたりして完成しました!
完成した動画を載せておきます。
今回の発射台を作成するタスクは終了とすることにします。
次回の更新をお待ちください。
コメント