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

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

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

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

解決済

Unityでの画面スワイプの実装と、ウィンドウサイズ取得方法

Matsuri_
Matsuri_

総合スコア13

C#

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

1回答

0リアクション

0クリップ

202閲覧

投稿2022/08/09 14:14

前提

Unityでスマホアプリを作っています。
画面を横にスワイプして切り替える機能を実装しようとしています。
使用コードはこちらhttps://www.youtube.com/watch?v=rjFgThTjLso
(Swaiping Pages In Unity)を参照しています。

以下は画面のスクリーンショットです。
Canvas設定は、
Render Mode : ScreenSpace-Camera
UI Scale Mode : Scale with ScreenSize
にしています。使い慣れているから、という理由です。
スクリプトはPanelConというオブジェクトに付与しています。

イメージ説明

赤→青→緑とスワイプしたいと思っています。

発生している問題

上記のCanvas設定だと、上記のコードSwaiping Pages In Unityを使っても
スワイプ動作が早すぎるなど、うまくいきませんでした。
そのため、自分でわかる範囲で変更を加えました。
(変更後が以下のコードです。)
スワイプ自体はするようになりました。

ただ、どうしてもわからない部分が、
一ページ分だけ、綺麗にスワイプさせる動作の実装です。
中段あたりにある
newLocation += new Vector3(-Screen.width, 0, 0);
のコードですが、
Screen.widthを使ってスワイプすると、
PanelConというパネルがだいぶ遠くに飛んでしまい、
何も見えない状態になってしまいます。

該当のソースコード

PanelCon

public class Swipeeasier : MonoBehaviour, IDragHandler, IEndDragHandler { public RectTransform canvas; private Vector3 panelLocation; public float percentThreshold = 0.2f; // Start is called before the first frame update void Start() { panelLocation = transform.position; } public void OnDrag(PointerEventData data) { float difference = data.pressPosition.x - data.position.x; //transform.position = (panelLocation - new Vector3(difference, 0, 0)) * 0.01f; transform.position += (panelLocation - new Vector3(difference, 0, 0))*0.0006f; } public void OnEndDrag(PointerEventData data) { float percentage = (data.pressPosition.x - data.position.x) / Screen.width; Debug.Log(Screen.width); if(Mathf.Abs(percentage) >= percentThreshold) { Vector3 newLocation = panelLocation; if(percentage > 0) { newLocation += new Vector3(-Screen.width, 0, 0); } else if(percentage < 0) { newLocation += new Vector3(Screen.width, 0, 0); } transform.position = newLocation; panelLocation = newLocation; }else { transform.position = panelLocation; } } }

試したこと

new Vector3のあとの、Screen.widthの部分をほかの数字に変えてみて、どう映るか確認してみました。
小さい数字にすると、画面にページの色は映るのですが、
画面が中途半端にスクロールされてしまいます。

イメージ説明

例えば、上記のようになります。

動画見本とCanvas設定が違うのでうまくいかないのかもしれませんが、
できればこのままの設定で解決できないかなあと思っています。
もしお分かりの方いらっしゃれば、
よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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