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

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

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

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

Unity

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

Q&A

解決済

1回答

5447閲覧

Unity5.3でWebviewをNGUIのスプライトサイズぴったりの範囲に表示したい

mizuiro_makoto

総合スコア40

C#

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

Unity

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

0グッド

0クリップ

投稿2017/02/27 10:49

編集2017/02/28 01:17

###前提・実現したいこと
Unity5.3でiOS, Android向けのアプリを作っています。
2Dの表示にはNGUIを使っています。(プロジェクトの都合上ここは変更不可)
アプリの中でWebviewを表示したいのですが、フルスクリーンではなくて特定のNGUIのスプライトサイズぴったりの範囲に表示させる方法が知りたいです。
(アプリ内で表示しているウィンドウの中にWebviewが表示されるイメージ)

試したこと

GreeさんがGithubで公開しているアセットをインポートして試してみました。
フルスクリーンの表示は簡単に出来たのですが、特定のGameObject内に表示する機能はなさそうでした。

Webviewを表示する際にマージンを設定することはできるようでしたので、スプライトの左下〜右上の座標を取得してマージンを設定してやればいい感じになるかと思ったのですが、ぴったりのサイズにならずうまくいきません。

###該当のソースコード

c#

1// このUISpriteの上にWebviewを表示したい 2var background = transform.Find("Background").GetComponent<UISprite>(); 3var localPos = background.transform.localPosition; 4var localScale = background.transform.localScale; 5 6// "Background"を写すカメラ 7var camera = transform.Find.GetComponent<Camera>(); 8 9// "Background"の左下と右上のローカル座標(UIWidget.PivotはCenter前提とする) 10var localLB = new Vector3(localPos.x - background.width * 0.5f * localScale.x, localPos.y - background.height * 0.5f * localScale.y, 0f); 11var localRT = new Vector3(localPos.x + background.width * 0.5f * localScale.x, localPos.y + background.height * 0.5f * localScale.y, 0f); 12 13// "Background"の左下と右上のワールド座標 14var worldLB = background.transform.TransformPoint(localLB); 15var worldRT = background.transform.TransformPoint(localRT); 16 17// "Background"の左下と右上のスクリーン座標 18var screenLB = camera.WorldToScreenPoint(worldLB); 19var screenRT = camera.WorldToScreenPoint(worldRT); 20 21// マージンの計算 22int marginL = (int)(screenLB.x); 23int marginT = (int)(Screen.height - screenRT.y); 24int marginR = (int)(Screen.width - screenRT.x); 25int marginB = (int)(screenLB.y); 26 27// Webview表示 28var webviewObj = new GameObject("WebViewObject").AddComponent<WebViewObject>(); 29webviewObj.Init(x => Debug.Log(x)); 30webviewObj.LoadURL("https://www.google.co.jp/"); 31webviewObj.SetMargins(marginL, marginT, marginR, marginB); 32webviewObj.SetVisibility(true);

知りたいこと

上記のマージンの計算方法に誤りがないか知りたいです。

もしくは上記のような方法を用いなくても実現できる方法が他にあるのであれば知りたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

widthとheightはピクセル単位です。
なので座標計算の式の中で使うと齟齬が生じます。

Karasuのアプリ奮闘記:【Unity Tips】 NGUIのUILabel全体の幅の取得と利用例
こちらを参考にサイズを取得したらいかがでしょう……と思っていたら、

NGUI公式リファレンス」に四隅のワールド座標を直接取得出来るパラメータが出ていました。
background.worldCornersでワールド座標を取得して、
その後は提示のスクリプトでOKかと思います。

投稿2017/03/02 01:19

sakura_hana

総合スコア11425

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

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

mizuiro_makoto

2017/03/02 02:55 編集

var worldLB = background.worldCorners[0]; var worldRT = background.worldCorners[2]; とすることで期待した通りの表示を行うことができました! 大変助かりました! どうもありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問