質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

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

Q&A

解決済

1回答

7016閲覧

Unity スクロール慣性、スワイプ慣性を実装したい

giftVS

総合スコア19

C#

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

Unity

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

1グッド

0クリップ

投稿2019/04/04 08:44

前提・実現したいこと

スマホのサイトやアプリでよくみられるスワイプ終了後オブジェクトがピタっと止まるのではなく少し進んだのち減速して止まる機能を実装したいです。
現在オブジェクトを動かしているコードにスワイプ慣性機能を追加したいのですがやり方がまたくわかりません。
できればrigidbodyを使わないでコードだけで実装したいです。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TabeMove : MonoBehaviour 6{ 7 private Vector3 playerPos; 8 private Vector3 mousePos; 9 public GameObject Daishi; 10 private Vector3 DaishiPos; 11 12 void Update() 13 { 14 playerControl(); 15 DaishiPos = Daishi.transform.position; 16 DaishiPos.x = Mathf.Clamp(DaishiPos.x, 0f, 0f); 17 DaishiPos.y = Mathf.Clamp(DaishiPos.y, -21f, 21f); 18 transform.position = new Vector3(DaishiPos.x, DaishiPos.y); 19 } 20 21 private void playerControl() 22 { 23 24 if (Input.GetMouseButtonDown(0)) 25 { 26 playerPos = this.transform.position; 27 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 28 } 29 30 if (Input.GetMouseButton(0)) 31 { 32 Vector3 prePos = this.transform.position; 33 Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - mousePos; 34 35 diff.z = 0.0f; 36 this.transform.position = playerPos + diff; 37 } 38 39 if (Input.GetMouseButtonUp(0)) 40 { 41 playerPos = Vector3.zero; 42 mousePos = Vector3.zero; 43 } 44 } 45}

初心者でコードの書き方もわかりません、サンプルコードなどあると本当に助かります。
ぜひともお力を借りたいです。丸投げになってしまって申し訳ありませんがよろしくお願いします。

myta👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

スワイプ中にプレイヤーの速度を求めておいて、非スワイプ中にはその速度を減衰させながらプレイヤーを動かしてやるというのはどうでしょうか?

C#

1using System.Collections; 2using System.Collections.Generic; 3using TMPro.Examples; 4using UnityEngine; 5 6public class TabeMove : MonoBehaviour 7{ 8 private Vector3 playerPos; 9 private Vector3 mousePos; 10 public GameObject Daishi; 11 private Vector3 DaishiPos; 12 13 // プレイヤーの速度を示すフィールドを追加 14 private Vector3 velocity; 15 16 // 速度の減衰率を示すフィールドを追加 17 // 0ならピタッと止まり、1なら減速せず飛び続ける 18 [Range(0.0f, 1.0f)] public float Attenuation = 0.5f; 19 20 void Update() 21 { 22 playerControl(); 23 DaishiPos = Daishi.transform.position; 24 DaishiPos.x = Mathf.Clamp(DaishiPos.x, 0f, 0f); 25 DaishiPos.y = Mathf.Clamp(DaishiPos.y, -21f, 21f); 26 transform.position = new Vector3(DaishiPos.x, DaishiPos.y); 27 } 28 29 private void playerControl() 30 { 31 if (Input.GetMouseButtonDown(0)) 32 { 33 playerPos = this.transform.position; 34 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 35 } 36 37 if (Input.GetMouseButton(0)) 38 { 39 Vector3 prePos = this.transform.position; 40 Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - mousePos; 41 42 diff.z = 0.0f; 43 this.transform.position = playerPos + diff; 44 45 // 移動前後の位置の差から速度を求めてvelocityに保存しておく 46 velocity = (this.transform.position - prePos) / Time.deltaTime; 47 } 48 else 49 { 50 // スワイプ中でないとき、velocityを減衰させながらプレイヤーを移動する 51 velocity *= Mathf.Pow(Attenuation, 10.0f * Time.deltaTime); 52 this.transform.position += velocity * Time.deltaTime; 53 } 54 55 if (Input.GetMouseButtonUp(0)) 56 { 57 playerPos = Vector3.zero; 58 mousePos = Vector3.zero; 59 } 60 } 61}

投稿2019/04/04 20:56

Bongo

総合スコア10807

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

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

giftVS

2019/04/05 12:43

回答ありがとうございます。希望の動作ができました。本当にありがとうございます。以前に続き本当にありがとうございます。前回の確立の件はあれからとても役立ち、自分なりに応用したりと本当に助かりました。 これも勉強させていただきます。感謝の気持ちが伝えきれないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問