左クリックを押している間弾道予測線を表示させて、左クリックを離した瞬間に弾が飛んでいくようにしたいです。
ここでいう”弾”とは、手榴弾のような飛び方とします。
弾を飛ばすスクリプトは簡単に作れました。
具体的には
1.プレイヤーキャラクターに、左クリックを離した瞬間に弾を生成するスクリプトを割り当てる
2.弾側のオブジェクトのStart関数内でRigidbody.AddForceを書き、弾が生成された瞬間に弾が飛ぶ力を加えるようにする
この方法で弾を飛ばせるようにはなりました。
問題は弾道予測線です。
予測線を表示するために、ググって出てきた以下のスクリプトを使わせてもらおうことにしました。
using System.Collections; using System.Collections.Generic; using UnityEngine; namespace CSharpScript { public class UnkoDandou : MonoBehaviour { public GameObject preLineRenderer; public GameObject preBullet; private GameObject objLineRenderer; private LineRenderer lineRenderer; private int count = 0; private float mass = 1f, drag = 1f, x = 0f, y = 0f, initVel = 10f, angle = 0f, step = 0.05f, time = 0; private float gravity = 9.80665f; private Vector3 vel; // Use this for initialization void Start() { angle = 30f * Mathf.Deg2Rad; vel = new Vector3(initVel * Mathf.Cos(angle), initVel * Mathf.Sin(angle), 0); objLineRenderer = Instantiate(preLineRenderer, gameObject.transform); objLineRenderer.transform.localPosition = Vector3.zero; lineRenderer = objLineRenderer.GetComponent<LineRenderer>(); Time.timeScale = 0.2f; } void DisDrag() { if (y >= 0) { float r = Mathf.Clamp01(1 - drag * Time.fixedDeltaTime); float n = time / Time.fixedDeltaTime; x = vel.x * Time.fixedDeltaTime * r * (1 - Mathf.Pow(r, n)) / (1 - r); y = vel.y * Time.fixedDeltaTime * r * (1 - Mathf.Pow(r, n)) / (1 - r); y = y - r * gravity * Time.fixedDeltaTime * Time.fixedDeltaTime / (1 - r) * (n - r * (1 - Mathf.Pow(r, n)) / (1 - r)); lineRenderer.positionCount = count + 1; lineRenderer.SetPosition(count, new Vector3(x, y, 0f)); count++; time += step; } } // Update is called once per frame void Update() { DisDrag(); } } }
Rigidbodyでの弾道予測を計算で求めているスクリプトです。
このスクリプトの計算で導き出される線を実際に表示できるようにしたいのですが、もちろんただスクリプトをアタッチしただけでは線は表示されませんでした。
何をどうしたら線が表示されるようになるのかがわかりません。
LinRendererというコンポーネントも一緒にアタッチする必要があることだけはわかりました。
ですがそれ以外は調べてもさっぱりわかりませんでした。
このスクリプトの計算による線を表示させるには何をしたら良いのか、分かる方教えてください。
回答2件
あなたの回答
tips
プレビュー