渋谷ほととぎす通信

新しいこと、枯れたこと問わず大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。

Unity

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…

DOTweenで360度くるくる回転させたい

DOTweenを使って360度オブジェクトを回転させたい場合、少しいつもと違う設定が必要になります。 transform.DOLocalRotate(new Vector3(0, 0, 360f), 6f) .SetEase(Ease.Linear) .SetLoops(-1, LoopType.Restart); 普通に上のように書いてしまうと、オブジェ…

Unity CRI ADX2LEエラー「CriAtomPlugin is not initialized」の対処

今週のお題「特大ゴールデンウィークSP」 CRI ADX2LEをUnityで使用していて、シーン開始フローの中でACFファイルをロードしたタイミングで、 CriAtomPlugin is not initialized というエラーに遭遇した共有です。 ACFファイル自体はAtomCraftから正しく出力…

Unity2019 AndroidのPatchビルドが良い感じに高速

Unity2019.1から搭載されたAndroid向けのPatchビルド。 Android: Added Script Only Patching functionality, which sends only script-related changes to the device instead of repackaging the APK file. What's new in Unity 2019.1 - Unityより スクリ…

Rider2019.1アップデートで待望のIL Viwerが実装されている

その昔、UnityをMonoDevelopで開発しているときには身近に存在していたIL Viwer。 Riderに移ってからはそれが無く、不便に感じていましたが、とうとうRider2019.1で実装されました。 ILとは ILとはC#をコンパイルする際に作られる中間言語です。ILを読むこと…

Unityエラー「The same field name is serialized multiple times in the class or its parent class」の対処

The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(MonoBehaviour) _hoge UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) エディタで実行中は問題なかったのですが、Android向けにビ…

Unity SpriteRendererで表示した画像をドラッグして端から端までピッタリ表示する

結論 X座標ドラッグ可能距離 = 画像サイズ / PixelPerUnit - orthographicSize * (Screen.Width / Screen.Height) Y座標ドラッグ可能距離 = 画像サイズ / PixelPerUnit - orthographicSize で割り出せます。 ※平行投影カメラが前提 以下のコードをドラッグ処…

Unity2019 PackageManagerがメニューに表示されなくなった時の対処法

2018.3.7f1からUnity2019にアップデートした際に起こったPackageManager周りのトラブル共有です。 タイトルの通り、WindowからPackageManagerの項目が表示されなくなる現象が発生しました。 Unity2019では使用できないバージョンがmanifestで指定されている…

コルーチンの引数にはref、outは使用できない

タイトルの通り、コルーチンで少しハマったので共有です。 IEnumerator Hoge (ref int foo) { yield return null; foo = 1; } このようにIEnumeratorを返す関数にはrefやoutが使えず、以下のようなエラーが出力されます。 error CS1623: Iterators cannot ha…

Unity Undefined symbols for architecture arm64というエラーがXcodeで吐かれたときの対応

iOS向けネイティブプラグインを書いて、Unityでビルドしたらこのようなエラーに見舞われました。その備忘録です。 Undefined symbols for architecture arm64: "_OBJC_CLASS_$_MFMailComposeViewController", referenced from: objc-class-ref in CustomPlug…

UnityのAndroidビルドでApplication.persistentDataPathが取得できない件

UnityでAndroid向けビルド時、C#6.0の新機能文字列補間におけるハマり案件共有です。 実機でApplication.persistentDataPathがNullになる var path = $"{Application.persistentDataPath}/hogehoge"; Debug.Log(path); と記述すると、UnityEditor上では正常…

Android向けIL2CPPビルド失敗時に2点考えられること

UnityでAndroid向けにIL2CPPビルドした際に以下のようなエラーが出た場合の対策をメモしておきます。 Exception: /Applications/Unity/Hub/Editor/2018.3.7f1/Unity.app /Contents/il2cpp/build/il2cppcore/il2cppcore.dll did not run properly! il2cppcore…

Unity ビルド後のAndroidManifest.xmlの書き出し場所

Android開発している際に、AndroidManifest.xmlをごにょごにょ書き換えることが多々あります。最終的にビルド時に書き出されるAndroidManifest.xmlの位置をメモしておきます。 Unityプロジェクトルート/Temp/gradleOut/build/intermediates/ merged_manifest…