どういった場面なのか
プレイヤーが放射状にオブジェクトを生成、撃ちだす場面でつまずいでいる
実現したいこと
タイトルの通り、オブジェクトの向いている真正面ではなく少し上に向けてAddForceしたいです。
また上げる際には角度を指定してその角度分軌道を変えたいです。
今のところ、直接座標を加えて上に上げる事は成功しているのですが...
どうしても角度で変えていきたいので皆様のアドバイスを頂きたいです。
該当のソースコード
using System.Collections; using UnityEngine; // 生成するオブジェクトにつける public class TestThrow : MonoBehaviour { private float throwForcePow = 1200f; private void Update() { // 30フレームに1回生成 if(Time.frameCount % 30 == 0) { // 作って、座標を生成元に合わせて、必要なコンポーネント付けて、飛ばす GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position = transform.position; obj.transform.rotation = transform.rotation; obj.AddComponent<AutoDestroy>(); Rigidbody rb = obj.AddComponent<Rigidbody>(); // 直接座標を加えて上奥に向けることで上に飛ばせているが...目的の角度を狙うとなるとかなりトライ&エラー rb.AddForce(obj.transform.forward + new Vector3(0,0.3f,0.3f) * throwForcePow); } } } // 生成されたオブジェクトにつける public class AutoDestroy : MonoBehaviour { // これより下に下がったら破棄する private float deathPosY = -30f; private void Update() { if (transform.position.y < deathPosY) Destroy(gameObject); } }
試したこと
射出速度を計算して飛ばす方法をインターネットで見つけたのですが、場合によって算出が不可能な場面があったのでその方法は使えませんでした。
参考 https://qiita.com/_udonba/items/a71e11c8dd039171f86c
解決しました。
回答者様から三角関数とやらを使い new Vector3(0,0.3f,0.3f)を変えれば良いとの答えを頂きましたので
「Unity sin cos 回転」と調べたところ以下のように置き換えたらちゃんと動きました。
// 30度上に飛ばす float angle = 30f; Vector3 dir = new Vector3(0, Mathf.Sin(angle * Mathf.Deg2Rad), Mathf.Cos(angle * Mathf.Deg2Rad)); rb.AddForce(obj.transform.forward + dir * throwForcePow);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/12 02:51