渋谷ほととぎす通信

新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。※あくまで個人ブログであり所属組織とは関係ありません

Unity

uGUIのCanvasGroupがしている事とは何か?

全子要素のアルファを一括で操作できるため、uGUIのCanvasGroupコンポーネントはUnityでUIを作る上で重宝しています。 ところCanvasGroupはどのようにしてアルファを適用しているのかを確認しました。 というのもuGUI用のシェーダを開発する上でCanvasGroup…

シェーダバリアントが多く作られるシェーダの最大使用メモリを計測する

Unityでキーワードを追加して処理を分岐させながらシェーダを書いていくと、知らず知らずのうちにシェーダバリアントが大量に増えることがあります。シェーダバリアントを作成するためには#prgama multi_compileまたは#pragma shader_featureを追加だけなの…

UnityからiOSビルドしてXcodeで実行したらトラブったのでそのメモ

環境 macOS HighSierra 10.13.6 Unity2019.3.0f6 Xcode10.1 iPhone6s iOS10.3.1 はじめに 久々にXcodeの実機デバッグをやりたくなりました。 そこでUnityからiOSビルドしてXcodeで実行すると期待通り?1発では上手くいかなかったので、今回の対応ログを残し…

知っておいた方が良いUnityのProject検索窓の小技

最近ブログを書いていなかったので、リハビリがてら小ネタを投下します。 僕はそこそこの頻度でUnityのProjectの検索窓を使用します。 HogeButtonというファイルを検索する場合 みたいな感じで入力します。 HogeShibuya24Buttonというファイルを検索する場合…

TexturePackerで画像を追加する際のちょっとした効率化Tips

Unityでゲーム開発中アトラスを作成する際によくTexturePackerを使用します。 アトラスとは複数の画像を一枚の画像と座標情報をセットにして書き出したもので、CPU負荷削減のために使用されます。 本記事ではTexturePackerで画像追加時の効率化アップTipsを1…

Unityからmicro:bitへ無線通信する方法

以前micro:bitを入力デバイスとしてUnityに無線通信で送信するサンプルを作りました。 今回はUnityを入力デバイスとしてmicro:bitへデータを送信してみます。 準備するもの Unityインストール済みパソコン micro:bit 2個 処理の流れ C#側からUSBにつながった…

RiderがUnityの.NET4環境を認識しない場合の対処法

UnityのPlayer Settingsの.NET4.xに設定を変更すると、Rider側が認識せずコンパイルエラー状態になりコード補完が効かなくなりました。 ※ただし、Unity側は正常にコンパイルは通ります。 Unityの設定画面で解決 UnityのPreferences > Riderから、Override Ta…

開発初期に暇を持て余しているUnityエンジニアができる42のTips後編

本記事は、サムザップ Advent Calendar 2019 #1 の12/24の記事です。 株式会社サムザップでUnityエンジニアをしている大庭です。 グラフィックデザイナー、Flashデベロッパーを経て、現在はUnityエンジニアでスマホゲームを作っています。Unity歴は6年くらい…

Prefabモードのまま再生すると編集中のPrefabも実行されてしまう気がした件の検証

Prefabモードのまま、シーンを実行するとPrefabモードのスクリプトが動いているような気がしたので確認しました。 手順 条件付きで動く時がありました。 Prefabモードにする [ExecuteInEditMode]をくっつける シーンを再生する すると、Prefabモードのスクリ…

DOTween実行時警告 : An error inside a tween callback was silently taken care of ~~► Index was outside the bounds of the array.の対処法

DOTWEEN ► An error inside a tween callback was silently taken care of (Void \<HogehogeMethod>b__21_0(Int32)) ► Index was outside the bounds of the array. DOTweenでこういう警告が出て困っていたのですが、DOTweenが悪いわけでありませんでした。(大抵悪いのはコー</hogehogemethod>…

開発初期に暇を持て余しているUnityエンジニアができる42のTips前編

本記事は、サムザップ Advent Calendar 2019 #2の12/11の記事です。 ※後編リリースしました。 株式会社サムザップでUnityエンジニアをしている大庭です。 グラフィックデザイナー、Flashデベロッパーを経て、現在はUnityエンジニアでスマホゲームを作ってい…

Unity PolygonCollider2DのEditColliderができなくなる条件

UnityのPolygonCollider2Dはインスペクタからドラッグで感覚的にコライダーのメッシュを作ることができます。 ピンクの枠部分をクリックすると、シーンビューにコライダーのハンドルが表示されます。 このようにSpriteRendererで表示している2Dオブジェクト…

DOTweenをasync/await化して可読性の高いコードにしてみる件(キャンセルにも対応)

この辺りの記事からの続きですが、個人的な開発環境をコルーチンからasync/awaitに移行中です。 移行するにあたって、僕が最もよく使うDOTweenのasync/await化は必須で、特にキャンセル周りは演出を作る上では最重要と考えています。 本記事では安全に使いや…

Task.Delayの待機時間をUnityEditor上で計測をしたら少しずれる件

Task.Delayの待機時間が本当に数値通りかを以下のサンプルコードで確認しました。 async void Start() { var t = Time.time; var st = Time.realtimeSinceStartup; await Task.Delay(5000); // ゲーム時間 Debug.Log($"Time.time :{Time.time - t}"); // リ…

C#コンストラクタパフォーマンス比較検証

余程のパフォーマンスチューニングが必要なときしか不要なパフォーマンス検証結果を残しておきます。 インスタンスをnewキーワードで生成する時、コンストラクタに引数を入れるパターンと入れ無いパターンがあります。 // コンストラクタに引数を持たないパ…

async/awaitを使う上でタスクのキャンセルは例外処理であるという考え方に移行する必要がある件

最近async/awaitデビューしたので、完全理解しようと思う。主にキャンセル周り。あと噂のUnitaskとその負荷とコルーチンWorkflowとの比較— 大庭俊介@Unityエンジニア (@ohbashunsuke) 2019年10月18日 この辺りの経緯から基礎的なところからUnityを使う上での…

初心者向けUnity Shader Graphの始め方

ノードを繋げてシェーダを作成することができる、Unity純正のShader Graphを始めてみました。 環境セットアップ(Unity2019.1.10f1の場合) 新規プロジェクトで始める場合、Unity HubからLightWeight RPを選んだ状態でプロジェクトを作成するとスムーズにShade…

CEDEC2019気になったUnity情報、直接中の人に質問しにいったこと編

タイムシフト、スライド、動画が公開されるのがほぼ当たり前になりつつある、CEDECやUniteにおいて、現地に行って参加するメリットの1つは、発表者や中の人と直接話しができることです。Unityのロードマップの中で気になっている以下の2点についてUnityの中…

CEDEC2019 Unityミニセッション気になった事まとめ

CEDEC2019では休憩時間中にUnityブースでミニセッションが行われていました。計6回行われた内容の中で特に気になったものをまとめておきます。 9月4日~6日の #cedec2019 。4FエレベーターホールのUnityブースでは1日2回ミニセッションを行います! https://…

CEDEC2019気になったUnity情報主に2019.3以降の新機能編

CEDEC2019に参加してきて自分なりのレポートを残している最中です。 本記事は「Unity2019年注目機能まとめ」を元にUnity2019の新機能について気になったことをまとめています。ただし、基本的にUnity2019.3以降の機能です。 Universal Render Pipeline(以下:…

CEDEC2019気になったUnity情報DOTS編

CEDEC2019に聞き手として参加させて頂き「Unityではじめるオープンワールド入門 エンジニア編」セッションを元にDOTS関連についてまとめます。 そもそもDOTSとは? 簡単に紹介すると、DOTSとは将来のスタンダードなUnity開発手法になると思われるフレームワ…

CEDEC2019気になったUnity情報パフォーマンス編

CEDEC2019に聞き手として参加させて頂き「Unity2018/2019における最適化事情」セッションを元にパフォーマンス関連についてまとめます。 既存機能のアップデート 既存機能アップデートに関するスライドですが、気になったものだけ取り上げて説明します。 Ani…

UIElementsのStyleSheetインスタンスは保持してはいけない

開発環境をUnity2019にアップグレードしたし、新機能のUIElementsを始めました。 公式のブログを読みながら進めています。 本記事はUIElementsに関する落とし穴共有です。 StyleSheetのフィールド保持 何も気にせず、StyleSheetインスタンスをフィールドに保…

子階層のSpriteRendererのSpriteが1つでも未設定だったらリストを赤くするUnityのEditor拡張

オブジェクトの設定が正しいかどうかをチェックする方法を考えていて、見た目から分かるアプローチをやってみます。 お題は「SpriteRendererのSprite設定がnullのオブジェクトを分かりやすくする」です。 Hierarchy、Projectそれぞれ処理を書く EditorApplic…

Riderにデフォルトで表示されるUsagesやEventFunctionを消す

PCを変えてRiderを使った時、余計なお節介で不要な表示物がデフォルトで表示されていることがあります。 UsagesとかEventFunctionなどがそれです。 これらの表記は僕にとっては不要なので消したいと思います。 あわせて読みたい ・Riderを使っててコードが畳…

Dictionary.TryGetValueの書き方がシンプルになってた件

UnityのScripting Runtime Versionを.NET4xに切り替えてから、C#の記述が変わりました。 その中で細かいけど、ちょっとイイと思った部分を共有します。 Scripting Runtime Versionを.NET3.5の時の場合は、Dictionaryの書き方はこうでした。 Object result = …

Unityのスプライトの単位についてまとめておく

UnityでSpriteRendererを使用して2Dを扱う際、必要知識としてスプライトの単位についてまとめておきます。 Unityの単位はメートル 基礎の基礎から X, Y, Zのスケールが1のこの立方体は、1立方メートルの立方体ということになります。 また、ポジションが(1, …

Unity 板ポリを比率を変えずにスクリーンサイズにフィットさせる

カメラ : 位置(0,0,-5) 板ポリ(board) : 位置(0, 0, 0) scale(1, 1, 1) 板ポリをスクリーンに縦横比率を変えずにフィットさせるサンプルです。 // 指定サイズの比率 float targetRatio= targetWidth / targetHeight; // 画面比率 float screenRatio = (float…

Unityスクリーン座標をワールド座標に変換する

個人的に時々必要になる且つよく忘れるコードなのでメモです。 この記事でも活用してて、 このようなスクリーン座標のマウスに追随してワールド座標にメッシュを描画するときに使用しています。 スクリーン座標 スクリーン座標は左下が原点で、右上にひくほ…

Unity2019.1でAndroidリリースに必要なKeyStoreを作成する

Unity2019.1.0もリリースされ、早速個人的な開発に使用しています。 本記事ではUnity2019.1.0でKeyStoreを作成したログを残します。 Build Settins > Player Settings > Publising Settings > KeyStoreManagerを使用します。 Create New > Anywhereでkeystor…