色々調べてブラウザでもグラボの動かし方がわかったので今回備忘録として残しておきます。, unityroomに投稿したゲームにAdmobを追加してアプリ化するときにエラーが出てしまうことがありました。 過去の記事では、通常どおりのカメラ空間で2Dゲームの構成を作成しました。その後、「スマートフォン(複雑なアスペクト比)対応とレスポンシブ UI の基本」の記事を書いたとおり、2Dをやるなら Canvas と付き合うようにしたほうが都合よいこともありそうです。, 両者の関係を整理して、画面にどう映るようになるのか確認していきます。画面の端から端まで、ちゃんと制御して表示できるようになろうという記事です。, Canvas の設定値の Render Mode を Screen Space - Camera にすると、カメラと Canvas を指定した距離だけ空けてキャンバスを表示してくれます。よくやる設定だと思いますので次に進みます。, カメラに映る(ウィンドウに見える)Canvas の領域は、Canvas Scaler の設定値 UI Scale Mode が Scale With Screen Size であるとき、Canvas は Reference Resolution の値で制御します。, Canvas Scaler の設定値 Reference Pixels Per Unit の値は影響しません。勘違いしないように!, ここでのサンプルは、画面の縦横比を16:9と仮定することにします。画面にあわせるためには、Reference Resolution の値を 320x180 のようにします。両者の縦横比が異なると、最初は混乱すると思うので、とりあえずあわせておいたほうがよいと思います。, 最適化の観点からだと、Canvas は要素に変更があると Canvas 全体に再解析の処理は走るため 1 最適なドローコールになりません。つまり、ルートが Canvas だとドローコールのコストが大きい可能性があります。対策として、キャンバスをネストする(親 Canvas と子 Canvas の関係を持つ)ことでコンテンツを分離して、独自のジオメトリ、バッチ処理を実行できます。, Canvas のサイズ (Reference Resolution) が 320x180 なら、20x20 のブロックを 16x9 個配置できるはずです。まず、これを確認してみます。, 20x20 のブロックの画像を作成して、横に連続して並べることにします。2色のブロックを用意して、めり込んだりしないように画像の端をわかりやすくしました。, 画像を Unity の Assets にインポートするとき、画面比率に影響する重要なパラメーターが Pixels Per Unit です。デフォルトでは 100 に設定されています。この設定の意味は、この画像は1ユニットの幅に対して 100 pixel 詰め込んでください、というようなことになります。, ユニットというのは、最小単位です。ここでは Canvas の Reference Resolution の単位になります。, Canvas の 320x180 のサイズに、320 個と 180 個ずつドットを詰め込めるようにするには1ユニットの幅に対して 1 pixel とすればよいので、Pixels Per Unit の設定値は1になります。, この状態でスプライトを Canvas に追加して、インスペクターから Trasform の Scale を x, y ともに1で設定して画面に詰め込んでいくと、縦横比がとれているのを確認できます。, 仮に、Assets に追加したスプライトの Pixels Per Unit をデフォルトの 100 のまま Canvas にコンポーネントとして追加してみます。インスペクターから Trasform の Scale を x, y ともに1で設定すると、とても小さなスプライトになってしまうのが確認できます。, 元々の画像サイズは 20x20 でした。それを1ユニットに対して 100 ピクセル詰め込む設定になっています。つまり1ユニットに だけ表示されている状態だと思われます。, さっそく Canvas 上のコンポーネントの Scale を x, y ともに5倍してみます。おそらくこれで、1ユニットのサイズ(1ピクセルサイズ)になったはずです……が、わかりづらいですね。, さらに20倍すると、ちょうど20ユニットのサイズとなり、つまり1ユニット1 pixel としたコンポーネントと同じサイズになりました。(つまり Scale 100倍です), 仮に 128x128 の画像を Assets にインポートして、同じく Pixels Per Unit をデフォルトの 100 のまま Canvas にコンポーネントとして追加してみます。, (1)の説明のとおりだと、Canvas に追加したコンポーネントは、1ユニットに対して 1.28 ユニットの大きさで表示されていることになります。, 画面に対して、Scale が1のとき 1.28 ユニットの大きさなので、Scale が x のとき1ユニットの大きさなので, これにより、Scale が 0.78125 のとき1ユニットだとわかりました。一応確かめるために20倍して表示してみます。, たとえば、Canvas のサイズを 32x18 にしてみるパターンを考えてみます。縦横比はあわせてありますが、かなり小さいサイズにも思います。, 逆にいえば Canvas の1ユニットを大きく見えるように設計していますので、20x20 の画像を読み込む際は1ユニットの Pixel Per Unit は 20 にするとよいでしょう。, シンプルに取り回せるように、1 タイル = 1 ユニットになるようスケールを設定するのがいいでしょう。, この内容は、「Unity Blog - 2D アートアセットの解像度選択」のとおりですね。, ゲームのメイン部分にあわせた設定にするためにこうしたプロパティがあるのだと思いますが、今までの開発で Windows API や DirectX を使って素直にコードを書いていたなら、1unitは1Pixel というのが自然かもしれません。, Unityの教科書 Unity 2019完全対応版 2D&3Dスマートフォンゲーム入門講座, 詳細は長くなるので Unity UI の最適化に関するヒント を参照してみてください。↩, 基本情報技術者 固定したい解像度を作成、または変更します。 Unityによる2Dゲーム開発について勉強しながら書いていこうと思います。まずは、2Dゲーム開発用に画面サイズ設定するところから。 UnityはSpriteKitとは画面サイズの概念が異なる. こちらのスクリプトで、画面サイズがしっかりと端末に反映されているのですが、, 左右の両端に、切れ目が有り、切れ目の外側に ・4つのImageコンポーネントの「SourceImage」はNoneにし、色も自分が塗りつぶしたい色に設定しておきます, ちなみにさきほどのコメントで書き忘れていたのですが 現在、ブロック崩しをandroidアプリとして作っています。 背景にサイズを合わせたい また気になるのは「Canvas直下」という点なのですが、塗りつぶしのImageを一番最後に描画するためにはCanvasの最後に配置する必要があります。, ・RootPanelの下にUIなどを配置 鏡の様にブロック崩しのブロック等、画面内のオブジェクトが写っています。, 先日回答して頂いた、Imageパネルを用意し、pivotで位置を調節等、試してみたのですが、うまくいかず, 現在ブロック崩しのandroidアプリを作っています。 今回はその修正方法について紹介したいと思います。, 今回はダウンロードしたUnityプラグイン(unitypackageファイル)を 「宴」の画面サイズはデフォルトでは800x600となっています。 宴プロジェクト作成時に画面サイズを設定するのが基本ですが、画面サイズは後からでも変更可能です。 宴2以前では、こちらのやり方をしてください ゲームの画面サイズの変更 各カメラからスクリーンサイズの設定ができます。 デバイスのスクリーンサイズから縦に合わせるか横に合... Unityで画面アスペクト比を固定する方法は割と紹介されていますが、基本はアスペクト比を固定しつつも縦側の解像…, 前回Firebaseとプライバシーポリシーについてご紹介したので今回はダッシュボードへの登録とUnityへの組み込み方法をお伝えしたいと思います。, 実は現在「unity1week」というゲームジャムイベントに参加しております。 ・FramePanelの下に上下左右のパネルを配置, という構成になっています。 それともCanvas Scaler や Render Mode などの設定も任意のものに変更する必要がありますか?, とても良いスクリプトを提供していただきありがとうございます。自分のゲームでもこの機能を実装してみようと思います。, 質問なのですが、CanvasやCamera側の設定で変更しなければならない箇所はありますでしょうか。Canvas Scaler や Render Modeなどの設定は任意のものに変更しなければなりませんか?, 記事に書けておらず申し訳ないのですが、CanvasScalarは利用しない前提の実装となっています。 左右の画面外に映る物を消すことが出来ず、困っています。, 『ただ画面引き伸ばされていない場所は見えては行けないモノが見えるのでキャンバスの縁辺りは何か塗りつぶす、パネルなどを置いて隠す必要があります。』, と書いて頂いている部分になると思うのですが、Panelを置いてみても、消すことが出来ませんでした。, 下記回答となります。 2Dゲームを作っている時に色んなデバイスで画面サイズを背景に合わせたい時があったのでメモ。 ・左右2つのパネルはRectTransformで上下のストレッチ(左は左寄せ、右は右寄せ)にし、Widthを1000にしておきます RectScalerWithViewport.csをアタッチする場所がよく分からなかったのですが、キャンバス内に空のゲームオブジェクトを作成してそこにアタッチすればいいんですか?, はい、RectScalerWithViewport.csはゲーム上でお使いのCanvasを親として とてもいいスクリプトを提供していただきありがとうございます。自分のゲームでも採用してみたいと思います。, 質問なのですが、キャンバスやパネル側の設定はデフォルトの設定のままでしょうか? この記事でのバージョン Unity 2018.4.1f1 はじめに UnityのCameraはSize(orthographicSize)で表示範囲を設定する事ができます。 しかしスマホのように機種によって画面サイズやアスペクト比が変わってくる場合は、この値をプログラムで調整する必要が出てきます。 という事で、Came… 解像度が異なる端末で動作するアプリを開発する場合、そのままだと困ったことになってしまうため、サイズを指定して余剰な箇所は黒塗りにするのがベターです。, GameObject > UI > Panel を選択し、UIのベースを作成します。, 作成したPanelの親であるCanvasを選択し、CanvasScalerコンポーネントの設定を変更します。, WidthとHeight Canvas(画面サイズ)の設定 画面サイズの確認 Pixels Per Unit を1にしない例(1) Pixels Per Unit を1にしない例(2) 応用編 参考 過去の記事では、通常どおりのカメラ空間で2Dゲームの構成を作成しました。その後、「スマートフォン(複雑なアスペクト比)対応とレスポンシブ UI の… 気になることなどありましたらお気軽にご連絡ください~!, 追伸:ゲーム上でCanvasが複数ある場合、毎回対応入れないといけないのでPrefabしておくと便利です。, コメント失礼します。 ありがとうございました! ブログを報告する, スクロールビュー(uGUI で自作) uGUI で用意された Scroll Vi…, この記事は、Unity で SQLite を利用するために Standalone/And…, Unity Canvas を使った2Dゲーム画面設計と Reference Resolution のプラクティス, Unity キャンバス内に Scroll View を使ったダイアログをポップアップ, Unity ダメージ表示のアニメーションを(Final Fantasy 5, 6)っぽくやる, Unity モンスターを倒したエフェクト(Final Fantasy 5)っぽくやる, Unity Android/Windows 環境における SQLite の使い方の基本, C# System.Text.Json で非数値 (NaN, Infinity) を書込/読込する方法, SendGrid UNIX Time から EXCEL の日付+時間に値を変換する方法, Unity スクリプトコードを Visual Studio でステップ実行・ブレークポイントを使ってデバッグをする. 試行環境. | 今回は実際にGitHubという無料で利用できるサービスを利用してUnityプロジェクトを管理する方法を実践していこうと思います。, Androidアプリの高速化・最適化について記事にしてみましたので動かしてみたけど処理がすごい重い、画面がカクカクって方はぜひ読んでみてくださいね。. CanvasのReferenceResolutionも同じ値に設定します。, Copyright © 2006 - 2020 未知の路 | Powered by zBench and WordPress, 【Unity】staticなメソッドをOnClickイベントに設定すると、missingになってしまう, Xcodeでビルドしようとすると “xxx is busy: Preparing debugger support for xxx.” と表示されて先に進まない時の対処, symlinkが含まれるUnitySDKを導入する時にGUIDが更新され続ける場合の対処. アスペクト比は固定にしたい 各オブジェクトに設定していく流れとなります。, カメラに対して、下記のスクリプトをアタッチします。 伸び縮みした場合に備えて、上下左右を覆うために4つのImageパネルを用意します。, ・パネルはCanvas直下に配置し、Canvas内で一番最後に描画されるようにHierarchy上で一番最後に配置します(Canvas上の描画はHierarchy上で上から順に描画されます) Unityで開発するアプリの解像度が変わる時、カメラやキャンバス内の配置が若干変わってしまい思った通りに配置されないことがあったので今回その対策をいれてみました。, 画面のサイズを変更するとこのように変化します。 Microsoft MCP Programming in C# Prefabの階層表示で上にあるものほど優先されて表示されるので 正常に動かないケースもありそうです。, Render Modeについては特に意識していなかったのですが、私の環境のCanvasでは「Screen Space – Overlay」となっています。 ゲームUIなどを表示したあとにImageパネルで上書きするためにFramePanelという階層はゲームUI(RootPanel)よりも下側に配置しています。, こちらの画像を参考に今一度PrefabやCanvasを確認していただけると幸いです。, ありがとうございます! ありがとうございます。, android端末で試すと、画面サイズは適用するのですが、 なので利用する場合はコンポーネントを削除してご利用してみてください。, またよくミスをしそうなのは利用しているカメラに「MainCamera」タグを設定していない場合に必要なカメラがスクリプト上で参照できないため そのイベントではUnity製のゲームをブラウザで動かすシステムなのですが 見えては行けない部分はUIのImageコンポーネントでその部分を上塗りするような形で配置する必要があります。, 方法としては端末によっては上下左右どちらに余白が来るかわからないため 半分のサイズの960×540も、よく見かけるサイズです。 情報セキュリティマネジメント 左右の両端に切れ目があり、切れ目の外側に、鏡の様にゲーム内のブロックオブジェクト等が映っています。, 先日回答して頂いた、canvas直下へPanel作り、pivotで調節等試してみたのですが、 Copyright © 2019-2020 TedLab テッドラボ All Rights Reserved. ・上下2つのパネルも同様にRectTransformで左右のストレッチ(上は上寄せ、下は下寄せ)にしてHeightを1000にしておきます キチッとゲームの画面比率やUIの位置・サイズが変わらず維持できていますね。, この対応を入れておかないと、幅が長いスマホなどで本来カメラ外の見えてはいけないモノが見えてしまったり、端末毎に操作感が変わってしまうので調整に大変苦労します。, もちろん一部画面外が黒く塗りつぶされていて画面を活かしきれてない感はあるのですが、そもそもスマホによっては見えてはいけないもの(例えばイベントが起きる前でキャラが消えてるとか)が見えてるのは論外です。, ただこれだけだとCanvasScalarなどを使ってもいつも同じUI位置やサイズが維持できないためプラスアルファその辺りも対応しています。, おおまかな流れとしてはスクリプト2種類用意して こちらも設定して検証してみていただけると幸いです。, このスクリプトに凄く助けられました!unity初心者の者です お時間かけてしまい、すみませんでした。. カメラの描画領域を調整しています。, refCameraに使用するカメラコンポーネント、widthに基本解像度の幅、heightに基本解像度の高さ、pixelPerUnitについてもCanvasなどと統一した値を利用してください。, とても助かります! こちらのスクリプトを使わせていただき、画面が端末毎に反映されるようになりました!ですが、, 上下のサイズは正常なのですが、 Windows10 unity2018.3.0f2 personal. unityを使っているとスクリプトで画面操作を行いたいことってありますよね。 この記事では、 ・画面サイズの取得方法 といった基本的なことから、 ・画面サイズを画面に合わせて動的に変える方法 などの少し応用的なことまでわかりやすく解説します! Unityで開発する場合、インストール後そのままだと画面サイズが固定されていません。 解像度が異なる端末で動作するアプリを開発する場合、そのままだと困ったことになってしまうため、サイズを指定して余剰な箇所は黒塗りにするのがベターです。 その一つ下の階層にゲームオブジェクト(記事で説明しているPanel)を追加し、そこにRectScalerWithViewportスクリプトをアタッチします。, その追加したゲームオブジェクトはRectTransformと呼ばれるCanvasの子どもになるためのオブジェクトとして作成されますので、そのRectTransformプロパティはCanvasのサイズに連動するように中心を原点とした完全フィット設定にしてください(上下左右のサイズは完全連動、原点を中心にする設定です)。, そしてPanelで追加すると不要なImageコンポーネントが付いてきますのでこれを削除してください。, 最後にこれまでCanvas直下にあったUIなどのゲームオブジェクトをその追加したPanel(改名推奨、例:ScalerPanelなど)に全てドラッグ&ドロップで移動させます。, 少々初歩的な部分などを端折っている点もありますので 「上下右左の寄せ」設定についてはRectTransformのpivotで寄せる部分に合わせて変更してあげる必要ありますのでご注意ください~, 何度もすみません。 画面のサイズ を ... 前回バージョン管理の方法をいくつか紹介しておりましたが、Unity側に事前設定する必要がありましたので記事にしておきました。 もし問題が起きていた方はこちらを設定の上、試していただければ幸いです。 途中で全くグラボ(グラフィックボード)が動いていないことに気づきました…! 解決できず、コメントさせていただきました。, こちらのゲームは縦画面のものとなりますでしょうか? 解像度選択ダイアログを無効にする. unityで作成したPCアプリをwindow表示に固定して解像度を指定する方法についてまとめました. 初期状態でFreeAspectとなっている箇所を、プルダウンメニューから+を選択して インストールする際に必要な手順を紹介したいと思います。, 前回に引き続きUnityプロジェクトをバージョン管理する方法についてお伝えしたいと思います。 Unityで開発する場合、インストール後そのままだと画面サイズが固定されていません。 回答して頂いた画像どうりにすると出来ました。 詳細な説明は省きますが、おおまかに説明すると, 変更されたアスペクトの縦と横どちらが大きいか判別して 毒劇物取扱責任者(一般), shikaku_shさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog 背景からはみ出す部分は黒くしたい 現在の主流となっているワイド型モニタ、YouTube画面などのアスペクト比は16:9。 比率でいうと0.5625です。 ワイド型の主なサイズには、1920×1080がありますね。 1080px ÷ 1920px = 0.5625.