unityで3Dの的あてゲームを作ろうとしているのですが玉を引っ張って奥に飛ばすようにしたいのですがどうしたらいいかわかりません
とりあえずAddForceでクリックして玉を飛ばせるようにはしています
public void Throw(Vector3 dir)
{
GetComponent<Rigidbody>().AddForce(dir);
}
private void Start() { Throw(new Vector3(0, 800, 1500)); }
上記のスクリプトととは全く違うスクリプトになっても大丈夫です
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
マウスボタンを押してからのドラッグの移動量で力を計算して、マウスボタンを離した際に物体へ力を加えて下さい
方法はイベントハンドラという「何らかの処理要求が発生したときに起動される関数」を使うと良いです。
イベントハンドラは自分でも作れますが今回は最初から用意されているものでも可能なのでそれをつかうと良いです。
下記が実装例になります。
C#
1using UnityEngine; 2 3[RequireComponent( typeof( Rigidbody ) )] 4public class PullObject : MonoBehaviour 5{ 6 private Camera m_MainCamera = null; 7 private Transform m_MainCameraTransform = null; 8 private Rigidbody m_Physics = null; 9 10 private Vector3 m_CurrentForce = Vector3.zero; // 発射方向の力 11 private Vector3 m_DragStart = Vector3.zero; // ドラッグ開始地点 12 const float MaxMagnitude = 1f; // 最大力量 13 const float FixForce = 10f; // 加える力量の調整 14 15 void Start() 16 { 17 this.m_Physics = this.GetComponent<Rigidbody>(); 18 19 this.m_MainCamera = Camera.main; 20 this.m_MainCameraTransform = this.m_MainCamera.transform; 21 } 22 23 /// <summary> 24 /// マウス座標をワールド座標に変換して返す 25 /// </summary> 26 /// <returns>ワールド座標</returns> 27 Vector3 GetMousePosition() 28 { 29 var pos = Input.mousePosition; 30 31 pos.z = this.m_MainCameraTransform.position.z; 32 pos = this.m_MainCamera.ScreenToWorldPoint( pos ); 33 pos.z = 0; 34 35 return pos; 36 } 37 38 /// <summary> 39 /// ドラック開始のイベントハンドラ 40 /// </summary> 41 void OnMouseDown() 42 { 43 this.m_DragStart = this.GetMousePosition(); 44 } 45 46 /// <summary> 47 /// ドラッグ中のイベントハンドラ 48 /// </summary> 49 void OnMouseDrag() 50 { 51 var pos = this.GetMousePosition(); 52 53 this.m_CurrentForce = pos - this.m_DragStart; 54 if (this.m_CurrentForce.magnitude > MaxMagnitude* MaxMagnitude) 55 { 56 this.m_CurrentForce *= MaxMagnitude / this.m_CurrentForce.magnitude; 57 } 58 } 59 60 /// <summary> 61 /// ドラッグ終了イベントハンドラ 62 /// </summary> 63 void OnMouseUp() 64 { 65 this.Flip( this.m_CurrentForce * FixForce ); 66 } 67 68 /// <summary> 69 /// 力を加える 70 /// </summary> 71 /// <param name="force">力量</param> 72 void Flip( Vector3 force ) 73 { 74 this.m_Physics.AddForce( force, ForceMode.Impulse ); 75 } 76}
これをRigidbody
が付けられたオブジェクトにアタッチしてゲームを開始して下さい。
マウスドラッグを行うと反対方向に飛んで行くかと思います。
どれだけ引っ張っているかを表示するGUIなどは考慮していないので必要であれば自身で実装をおこなって下さい。
スマホでのスワイプの場合は少し作り変える必要があるかと思います。
投稿2021/01/16 10:00
編集2021/01/16 10:09総合スコア1222
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/16 11:43