3DのTPS系ゲームです。
プレイヤーが弾を発射するコードを書いているのですが、上手くいきません。
弾が飛んでいく方向が変です。
一回目は狙った方向に飛んでいくのですが、2回目以降は狙った場所に関係なく、必ず決まった方向に飛んでしまいます。
弾を発射する仕組みは、以下です。
・Instantiateなどは使わず、SetActiveを使って弾の発射をする。
・プレイヤーから弾を出すのではなく、弾を発射する用のプレイヤーの空の子オブジェクトから弾を発射する。
・カメラのアングルで発射の縦の向き(x軸の向き)を決めて、発射のy軸の向きはプレイヤーのy軸の向きと同じにする。
・弾の発射の挙動はPUBGの手榴弾を投げる時と似たような感じにしたい。
弾の発射用のコードは以下です。
using System.Collections; using System.Collections.Generic; using UnityEngine; namespace CSharpScript { public class UnkoBon : MonoBehaviour { [SerializeField, Tooltip("砲身のオブジェクト")] private GameObject barrelObject; // 弾を生成する位置情報 private Vector3 instantiatePosition; // 弾の生成座標(読み取り専用) public Vector3 InstantiatePosition { get { return instantiatePosition; } private set { instantiatePosition = value; } } [SerializeField, Range(10f, 150f), Tooltip("弾の射出する速さ")] private float speed = 1.0F; // 弾の初速度 private Vector3 shootVelocity; // 弾の初速度(読み取り専用) public Vector3 ShootVelocity { get { return shootVelocity; } private set { shootVelocity = value; } } Camera MainCamera; Vector3 CameraAngle; Vector3 UnkoManAngle; Vector3 UnkoBonAngle; Animator Anim; [SerializeField] GameObject Unko; Rigidbody rid; private bool UnkoSet; public bool unkoSet { get { return UnkoSet; } private set { UnkoSet = value; } } void Start() { MainCamera = Camera.main; UnkoSet = false; Anim = barrelObject.GetComponent<Animator>(); Unko.SetActive(false); rid = Unko.GetComponent<Rigidbody>(); } void Update() { CameraAngle = MainCamera.transform.eulerAngles; UnkoManAngle = barrelObject.transform.eulerAngles; // 弾の生成座標を更新 instantiatePosition = this.transform.position; this.transform.rotation = Quaternion.Euler(CameraAngle.x - 15f, UnkoManAngle.y, 0f); UnkoBonAngle = this.transform.forward; // 弾の初速度を更新 shootVelocity = UnkoBonAngle * speed;//2回目以降必ず決まった方向に飛ぶ。UnkoBonの向きは正常。 Debug.Log(shootVelocity); if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Untiburi")) { UnkoSet = true; } if (UnkoSet == true) { if (!Anim.GetCurrentAnimatorStateInfo(0).IsName("Untiburi")) { Unko.transform.position = instantiatePosition; if (Input.GetMouseButtonUp(0)) { Unko.SetActive(true); rid.AddForce(shootVelocity, ForceMode.Impulse);//二回目以降は必ず決まった方向に飛ぶ UnkoSet = false; } } } } } }
これは弾の発射用オブジェクトであるプレイヤーの子オブジェクトにアタッチするものです。
発射した弾を非アクティブにするコードは弾のスクリプトに書いています。弾がcolliderに接触したら非アクティブにするようにしています。
このコードは、最初に書いた通り、弾が発射される方向が上手くいかないです。
もう一度書くと、
一回目は狙った場所にしっかり飛ぶのですが、二回目以降は狙った場所に関係なく毎回同じ方向に飛んでしまいます。
こうなってしまう原因とその対処法がわかる方がいましたら教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/05 05:41