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

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

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

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

Unity

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

Q&A

解決済

1回答

3372閲覧

UnityのUIをマウスを中心に拡大縮小させたい

Nekodigi

総合スコア16

C#

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

Unity

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

0グッド

0クリップ

投稿2019/06/06 14:51

編集2019/06/06 14:57

Unityでマップ状に情報を管理するソフトを作っているのですが、マウス座標を中心としたオブジェクトの拡大縮小がなかなかできません。
オブジェクトの構造はこのようになっています。ScrollViewの中のElementsが拡大縮小し、拡大縮小可能なScrollViewとして機能する予定です。
イメージ説明
Unityでは、Pivotを変更することで拡大の中心などを変えられると思い、
強引に数値を変換しようとしたのですが、とても誤差が大きく使い物になりませんでした。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System; 5 6public class ElementView : MonoBehaviourCustom 7{ 8 RectTransform thisRT; 9 // Start is called before the first frame update 10 void Start() 11 { 12 thisRT = GetComponent<RectTransform>(); 13 StartCoroutine(DelayFlameEnd(() => { UpdateSize(); })); 14 } 15 16 // Update is called once per frame 17 void Update() 18 { 19 Debug.Log(Input.GetAxis("Mouse ScrollWheel")); 20 Vector2 anchor = ((Vector2)Input.mousePosition + thisRT.anchoredPosition + new Vector2(0, 30)) / thisRT.sizeDelta; 21 Debug.Log(anchor); 22 thisRT.pivot = anchor; 23 if (Input.GetAxis("Mouse ScrollWheel") == 0.1f) 24 { 25 thisRT.localScale *= 0.9f; 26 } 27 if (Input.GetAxis("Mouse ScrollWheel") == -0.1f) 28 { 29 thisRT.localScale /= 0.9f; 30 } 31 if (Input.GetMouseButtonUp(0)) 32 { 33 UpdateSize(); 34 } 35 thisRT.pivot = new Vector2(0, 1); 36 } 37 38 void UpdateSize() 39 { 40 float maxX = 0; 41 float minY = 0; 42 foreach (Transform childTransform in transform) 43 { 44 RectTransform childRT = childTransform.gameObject.GetComponent<RectTransform>(); 45 float rtX = childRT.anchoredPosition.x + childRT.sizeDelta.x; 46 float rtY = -childRT.anchoredPosition.y + childRT.sizeDelta.y; 47 if (maxX < rtX) 48 { 49 maxX = rtX; 50 } 51 if (minY < rtY) 52 { 53 minY = rtY; 54 } 55 } 56 thisRT.sizeDelta = new Vector2(maxX+100, minY+100); 57 } 58} 59

###分からない点
マウス座標を中心として拡大する方法。
Transformを使って似たようなことをしているサイトはあったが、RectTransformではできないのか。

試したこと

Pivotを計算し、そのまま拡大縮小をした。

補足情報(FW/ツールのバージョンなど)

Unity2019 1.4f1

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

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

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

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

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

guest

回答1

0

自己解決

###簡易的な解決法
ViewportとContentの間に適当なオブジェクトを挟み拡大縮小させると簡易的に解決できます。
結局マウス座標を中心としない形になりましたが、なんとか使えそうなのでこのまま使おうと思います。
Scaleが1を超えると、動作がおかしくなるので、ロックをかけてください。
お騒がせしてすみません。

投稿2019/06/08 07:37

編集2019/06/09 09:11
Nekodigi

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問