前提
Unity2Dにて弾丸を連射するスクリプトを作っているのですが、**弾丸ゲームオブジェクト(&Script)と銃コンポーネント(Script)**の2つの要素で構成するように考えていました。
- 弾丸には直進又は追尾する等といった"発射後"の処理を。
- 銃には初速・連射速度・装弾数などの情報と"発射"の処理を。
それぞれ実装していこうとしています。
しかし、ここで銃に初速の情報を持たせることに難儀しています。
問題点
銃コンポーネントに初速を持たせる、つまりInstantiate時にRigidBody2DのVelocityに代入する処理が必要だと思うのですが、この場合は弾を生成する度にRigidBody2DをGetCompornent()
しなければなりません。
例▼
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class BulletsShooter : MonoBehaviour { 6 7 [SerializeField] private GameObject bullet; 8 [SerializeField] private AudioClip se_fire; 9 [SerializeField] private int capacity; //装弾数 10 [SerializeField] private float rateOfFire; //連射速度(数/分) 11 //[SerializeField] private float muzzleVelocity; //初速(px/sec) ★★★ 12 private float rateOfFirePerSec; 13 14 private void Start() 15 { 16 rateOfFirePerSec = 60f / rateOfFire; 17 } 18 19 public IEnumerator Fire(Transform _transform) 20 { 21 GameObject blt = Instantiate(bullet, _transform.position,_transform.rotation); 22 // blt.GetCompornent<RigidBody2D>.velocity = ... ;★★★ 重そう ★★★ 23 AudioSource.PlayClipAtPoint(se_fire, _transform.position); 24 yield return new WaitForSeconds(rateOfFirePerSec); 25 } 26 27}
これを避けるために現状としては、弾丸ゲームオブジェクトの方に"初速"を持たせ、プレハブで必要個数複製させようと考えていました。
★★★ 重そう ★★★
な処理を回避しつつ、銃コンポーネントに"初速"を持たせるには、どのような方法がありますか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/20 03:21