はらけんログ

unity触ったりバイクに乗ったり

【Unity】RectTransformのインスタンスとサイズの話

僕のunityを使ったお仕事では、だいたい(というか必ず)uGUIを使って実装するのだが、uGUIのGameObject(って表現があってるかわかんないけど)って普通のTransformと違ってちょっとめんどいだんよね。

 

なんで、毎回作る度にどっかしらつまずくんスよ。

ってことで、今日つまずいたとこを一応メモっとく。

 

 

uGUIをインスタンス化してなんかの子にするとき

まずは、uGUIのGameObjectをprefab化して、そいつをスクリプトでuGUIのGameObjectの子にインスタンス化するとき。

 

いつものTransformのGameObjectを子にインスタンス化するときは

 

public GameObject gObj; //uGUIのGameObject
public GameObject prefabObj; //上の奴の子にするprefab
void ObjInstantiate() //関数名は適当やで
{
GameObject ui= Instantiate ((GameObject)prefabObj);
ui.transform.parent = gObj.transform;
}

 とかって書くと思うんだけど、このとき

”Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.”

 っていう黄色エラーが出た。

 

まぁ黄色だから大丈夫だと思うんだけど、会社にいるプログラムの師匠に「わーにんぐ、きもい」って言われそうだった(ってか、見たことないエラーだったから自分でもキモイと思った。)ので、解決策を探した。

 

んで、こういう時は

ui.transform.parent = gObj.transform;

 のとこを

ui.transform.SetParent (gObj.transform);

 ってしたら黄色エラーが消えるんだってさ。

 

 

uGUIのサイズをスクリプトで変えるとき

RectTransformって普通のTransformの値のほかに、サイズとかアンカーとかピボットとかが追加されている。(Transformを継承してるからposition、rotation、Scaleもある)

 

んで、RectTransformはScaleで大きさを変えるんじゃなくて、Sizeってのを変えることでソースのImageに大きさをあわせることが多い。(ここも日本語あってるかわからん)

そのSizeってのはインスペクターで見るとWidthとかHeightって書いてあるやつね。

f:id:HarakeN:20161111183423p:plain

 

Sizeはpositionとかと違ってVector2なんすよ。

で、これにスクリプトで設定するには

 

public RectTransform uiObj;
void UiObjSize() //関数名は適当やで
{
uiObj.sizeDelta = new Vector2 (100,100); //サイズも適当やで
}

 

ってしてやれば指定の大きさにできるっぽい。

 

 

 

マイクロソフトのHoloLens -その3 実行してみる-

 

はい、じゃあ作ったAppフォルダ内にある.slnをたたいてください。

f:id:HarakeN:20161109125031p:plain

 

Visual Stadio が起動したら実行・・・の前に

ここんところを変更しよう。エミュレータでもいいけど、HoloLens持ってる人はUSBでデバイスつないでDeviceにすると実機でできるよ。その際、アプリケーションがついでにインストールされちゃうので注意。

f:id:HarakeN:20161109125250p:plain

 

 

そして実行しよう。

 

 

こんな感じのウィンドウ出てくるけど、Retryおしてちゃっちゃと起動しよう。

f:id:HarakeN:20161109125411p:plain

 

 

 

すると、エミュレータが起動して、HoloLensの画面が出てくる。

 

 

とりあえずUnityの女神降臨。

f:id:HarakeN:20161109125612p:plain

 

 

 

まぁ実行自体は楽なんだけど、途中どこかでつまづくんだよねこれ。

 

 

今の進捗的にここらへんまでなので、HoloLensの記事はしばらくでないと思う。

 

かわりにUnityのプログラムとかについてつらつら書いていきます。よろしく。

 

 

ライセンスもはっときましょうねー 

 

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

マイクロソフトのHoloLens -その2 ビルドするまで-

 

長い長いインストールが終わったら、お楽しみの動作テスト。

だけど、これで動かなかったら悲しいよね・・・

 

なにがなんでも動かせるようにしようか。

 

 

とりあえず、インストールしたHoloLens用のUnity起動して、適当なプロジェクトつくろう。

ちなみに前の記事で

 

HoloLens専用Unityとしてインストールした方がよさそう。

マイクロソフトのHoloLens -その1 開発環境つくる- - ブログ名どんなのにしようか

 と書いたけど、インストールしたUnityのショートカットにも Unity HoloLens 5.4.0f3 -  HTP って書いてあるってことはそういうことなのかも。

f:id:HarakeN:20161108215636p:plain

 

 

んで、今回は単純に実行できたかどうかだけ見たいんで、ユニティちゃそにモデルになってもらおうではないか。

 

あ、でも長くなりそうだから今回はビルドするまでで、実行するのは次の記事からお願い。

 

ということで、AssetStoreからユニティちゃそをダウンロードして適当に配置してくだしあ。

 

 

んでもってここからが本題。

 

HoloLens用にビルドするにはいくつか設定しなければいけないことがあるそうだ。

ざっと説明すると

 

・Main Cameraの初期設定

・Build SettingでWindows Store書き出し

・Pleyer Settingでいろいろ設定

・Quality Settingでちょっと設定

・Projectフォルダ直下にAppフォルダを作成してビルド

・Visual Stadioを起動して実行

 

こんな感じ。

 

では、細かく刻んで説明。

 

 

Main Cameraの初期設定

なんでかは知らない部分もあるけど、MainCameraの数値は決まってるみたいなんで、インスペクター上で設定していく。設定する箇所は以下の通り。

・TransformのPositionを原点へ

・CameraのClear FlagをSolid Colorへ

・Backgroundを真っ黒(RGBA 0,0,0,0)へ

・Clipping Planesを0.3から0.85へ

 

f:id:HarakeN:20161108232823p:plain

 

 

 

Build SettingでWindows Store書き出し

 HoloLensは「Windows10扱いだけど、できることはWindows Phone」みたいな感じで、基本的にWindows StoreからAppをダウンロードして使うようになってる。

なんで、UnityでもWinStore形式でかきだしてやりましょーか。

ただ、単にWindows Store形式で書き出せばいけるというわけではない模様。設定は以下の通り。

あと、まだBuildボタンは押すな。絶対だぞ。

SDKをUniversal10へ

・UWP Build TypeをD3Dへ

・Unity C# Projectにチェック

 

f:id:HarakeN:20161108232849p:plain

 

 

 

Pleyer Settingでいろいろ設定

一応、HoloLensもVRというか、そういう系らしいのでそういう系の設定しましょうね。ここで「項目ないし、設定できねぇじゃねぇか!」ってなったら、もう一度、今開いているUnityのバージョンを確認して、前の記事を見直してインストールしなおせ!お兄さんとの約束だ。

設定はPlayer Settingを開いて以下の通り。

・Other Settingsを開いてVirtual Reality Supportedにチェック

Windows Holographicを追加

 

f:id:HarakeN:20161108232914p:plain

 

 

また、適宜、作成するAppで使用を許可する項目を選択できる。

・publishing Settingを開いてCapabilitiesの使用する項目にチェック

 

f:id:HarakeN:20161108232928p:plain

 

 

 

Quality Settingでちょっと設定

 

HoloLensは据え置きPCのようなハイスペックな描画は出来ないので、Qualityをおとそうね~。設定はQuality Settingを開いて以下の通り。

・defaultをクリックしてFastestに設定

 

f:id:HarakeN:20161108232940p:plain

 

 

 

Projectフォルダ直下にAppフォルダを作成してビルド

やっとビルドだよ。今回作成したUnityのProjectフォルダ直下にAppっていうフォルダ作ってBuild Settingからビルドしてね。書き出しに時間かかるけど、慌てない慌てない。

   f:id:HarakeN:20161109122042p:plain

 

 

 

さて、これでいったん完成。

 

 

実行は次の記事で書く。

 

 

 

 

 

マイクロソフトのHoloLens -その1 開発環境つくる-

ものすごく退屈だったところに、先日、マイクロソフトから発売されたHoloLensが会社にやってきたので、いろいろいじってみた。

f:id:HarakeN:20161108194943j:plain

 

 

とはいえ、動作環境を作るのにものすごく時間がかかったから

とりあえず今回はセットアップの手順だけ書いとく。

 

 

まず、開発に必要なPCのスペックは

 

・Windows10 Pro

・4コアCPU

・8GB以上のメモリ

BIOSHAV、SLAT、DEPをサポート

DirectX 11、WDDM 1.2 driver以上をサポートするGPU

 

 

ハード的には普通のゲーミングマシンを持っているならまず問題ない。

ただ、ずっこけたのが Win10 Pro でないといけなかったところ。

 

なんでぇっ!?

とおもったが、どうやらHyper-VとやらがHoloLensのエミュレータに必要らしい。

これは Win10 Pro にしないと有効にできない。

 

Win10 Homeからアップグレードは設定から行えるので買い替える必要はないが

アップグレードすると13000円ぐらいかかるし、Microsoftアカウント作れいわれるし、かなりめんどい。

 

ただ、MicrosoftアカウントはHoloLens本体を使用するときにも必要なので、作っておかなければならない。

 

 

 

 

んで、ハードがそろったら今度はインストールするもの一覧

一応、公式URL >> Install the tools

 

・Visual Stadio 2015 Update 2

・Unity HoloLens Technical Preview Beta 10

・HoloLensEmulator

 

 

UnityはHoloLens用に書き出せるバージョンが決まっているようで

5.4.0以上ならおkってことではないらしい。

と、いうのもUnityからのビルド自体もまだβ段階なのかもしれない。

 

PCのCドラに新しいフォルダを作って、HoloLens専用Unityとしてインストールした方がよさそう。一番新しく安定しているものは5.4.0f3とかってバージョンらしい。

僕もこれをインストールした。

 

 (追記)

インストールに注意するとこ、もう一つだけあった。

Visual Stadioをインストールする際に、チェックしておかなければいけに項目がある。

タブレットとかの書き出しに必要な奴だと思う。これに注意。

f:id:HarakeN:20161109120941p:plain

 

 

 

 話を戻して

あとインストール時に注意するところは、エミュレータは最後にインストールしなきゃいけないところぐらい。

 

 

 

これで、大体は大丈夫。

だが、インストールはめちゃめちゃ時間がかかるので、耐えながら待つべし。

 

HoloLensを持っていない人でもエミュレータをつかえばPC上で動かせるので

来年、日本向けに発売される前に準備しておける。

 

 

次はエミュレータの起動方法とかUnityで書き出す方法とか書くよ。

 

 

 

unity以前の話

 

大学でプログラムとかちょこっとやってます!!!!!!!

 

なんて、でかい声で入社したくせにC#のCの字(割合でかすぎなのは誤解)も知らなかったので、ちょっとした恥をかいたことがあるんすよね。

 

やってた事は嘘じゃないよ!

キネクトXNAでなんかつくった覚えあるし・・・

 

 

で、どんな恥をかいたかというと

 

 

「コンストラクタってなんすか?」って聞いたこと。

 

 

うん、君、プログラムやったことないよねwww

 

 

それも、まぁそのはずで、大学では

どういう仕組みで初期化されているのか

そもそも、なんで初期化しなきゃいけないのか

なーんてことは、教えてもらう機会も知ろうとも思う機会もなかった。

 

ということで

この夏ちょこっと勉強して、また少しだけ賢くなった。

 

実は、まだ完全に理解したわけじゃないけど

なんでみんなが new Vector3 なんて書かなきゃいけないかは理解できた。 

 

コンストラクタとかデストラクタとかは他のサイトに詳しく書いてあるので

URLをはっつけて終了。

 

ufcpp.net