🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4534閲覧

unity) 3Dでパチンコのように玉を引っ張って奥に飛ばしたい

SL_Looty1

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/01/16 04:10

unityで3Dの的あてゲームを作ろうとしているのですが玉を引っ張って奥に飛ばすようにしたいのですがどうしたらいいかわかりません
とりあえずAddForceでクリックして玉を飛ばせるようにはしています

public void Throw(Vector3 dir)
{
GetComponent<Rigidbody>().AddForce(dir);
}

private void Start() { Throw(new Vector3(0, 800, 1500)); }

上記のスクリプトととは全く違うスクリプトになっても大丈夫です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
Hawn

総合スコア1222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SL_Looty1

2021/01/16 11:43

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問