Unity C# PUN2でのBullet Init関数の引数エラーを解消する方法

C言語関連

UnityでPUN2を使ったマルチプレイヤーゲーム開発では、サーバー時刻を用いて同期的に弾を発射することが重要です。しかし、BulletクラスのInit関数の引数が正しく指定されていないと、”必要なパラメーターがありません”というエラーが発生します。

エラーの原因

今回のエラー “‘angle’ の必要なパラメーター ‘〇〇〇.Init(Vector3, float)’ に対応する特定の引数がありません” は、BulletクラスのInit関数が Vector3 と float 型の2つの引数を要求しているのに、呼び出し時に double 型や不足している引数を渡していることが原因です。

正しいInit関数の呼び出し方

Bulletクラスが次のように定義されているとします。

public void Init(Vector3 direction, float fireTime){ ... }

この場合、呼び出し側では必ず Vector3 型の方向ベクトルと float 型の発射時刻を渡す必要があります。例えば。

if (Input.GetKey(KeyCode.Space)){
    GameObject S = PhotonNetwork.Instantiate("Shoot", transform.position, transform.rotation);
    Bullet bullet = S.GetComponent<Bullet>();
    Vector3 fireDirection = transform.forward; // 発射方向を設定
    float fireTime = (float)PhotonNetwork.Time; // double を float にキャスト
    bullet.Init(fireDirection, fireTime);
}

ポイント

  • PhotonNetwork.Time は double 型なので、必要に応じて float にキャストする
  • 発射方向の Vector3 は必ず渡す
  • Bullet の Init 関数の定義に合わせて引数を整える

まとめ

PUN2でBulletをサーバー時刻に合わせて発射する際は、BulletクラスのInit関数が求める型と順序に沿って引数を渡すことが重要です。double 型を float 型にキャストすることや、Vector3 型の方向ベクトルを正しく渡すことで、エラーを解消できます。

コメント

タイトルとURLをコピーしました