きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

Unity

CIでUnity向けの静的コード分析を走らせる

あのResharperやRiderで使われている静的コード分析をCI(=コマンドライン)で、それも無料で使えちゃうんです。 CIで実行することで、PullRequestの自動チェックで走らせて未然に事故を防ぐことが出来ます。 静的コード分析って? コードを分析して、以下のよ…

IDisposableの寿命をシーンに紐付ける

ああ〜このリソース、Sceneの寿命に紐付けたいな〜って時ありますよね。 var disposable = Disposable.Create(() => {}); disposable.AddTo(Lifespan.Scene); これを実現するのが以下のコード。 using System; using UnityEngine; using UniRx; using Object…

New Input SystemをPlayerInputを通さずに使う (v1.0.2)

このあたりインターフェイスが変わりまくっているようで、ググって出てきた情報が古かったので1.0.2時点での使い方を置いておきます。 公式のクイックスタートを読んでも、PlayerInputを通した使い方しか書いておらず、 いやいや、そんなMonoBehaviourにベッ…

特定条件までawaitしつつも毎フレームこれを実行したい!

async/awaitで、特定条件までawaitしつつも毎フレームこれを実行したい!みたいなめっちゃゲームでしか出てこなさそうなことをどう書くと綺麗に書けるか考えている。 とりあえず素直に書くならこう。 var cancellationTokenSource = new CancellationTokenSo…

UnityEditor上でAddressableのAssetを同期的に読む

Testとかのために同期的にAddressableからAssetを読みたい時用。 public static class EditorAddressables { public static AddressableAssetGroup[] GetGroups() { var settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Se…

Unity VisualScriptingでUI遷移 + アニメーション付けてみた

Unity2021から入るVisualScriptingでUI遷移 + アニメーション作ってみた!アニメーションを実行中にいじりながら確認できるのは便利そう!#unity #visualscripting pic.twitter.com/iFcmRLIzfo— きゅぶんず (@kyubuns) 2021年2月27日 説明 Start, Menu 中身…

Unity VisualScripting用のEasingアニメーションライブラリ、ApureEasingを作りました!

github.com コンセプトは、加工しやすいようにシンプルに値だけを出力するもの。 HogeEasingRawを使うと0~1の入力を受け取って値を帰すバージョンもあります。 ちなみに、AnKuchenもVisualScripting対応しました。 AnKuchenがVisualScripting対応しました!…

モバイルで使いやすいデバッグコンソール、AbcConsoleを作りました!

github.com 機能 Debug.Logの出力を実機で確認、クリップボードにコピー出来ます。 入力補完付きのテキストボックスで、モバイルでも素早くデバッグコマンドが打ち込めます。 この入力補完付きって部分が探してもなかなか見つからなかったので作っちゃいまし…

Unity iOSで対応言語を設定する

using UnityEngine; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; #if UNITY_IOS using System.IO; using Extension; using UnityEditor.iOS.Xcode; #endif public class IosPostprocessBuild : IPostprocessBuildWithR…

TextMeshProとTextMeshPro uGUIで同じFontAssetを参照すると文字が消えることがある

私はこれで休日を失いました。 新しいFontAsset作ってそっちを参照すればオッケー。 https://forum.unity.com/threads/tmpro-text-is-not-visible-on-a-device.636085/

半角は1文字、全角は2文字みたいに数えるやつ

ググるとshift_jisに変換してバイト数数えるやつがよく出てくるんですが、 Unity + Android環境だとI18N.dll突っ込まないと動かないらしいので正確じゃないけどそれっぽい動きするやつ。 正確にやりたい人は頑張ってください。 public static class StringUt…

"Auto 9Slicer"がAssetStoreに登場!

便利なもの作ったのは良いけど、githubで公開してるだけじゃ誰も見つけてくれないんだよな〜 ということで、AssetStoreに出してみました!!! 以上。 Auto 9Slicerの機能紹介記事はこちら。

AnimeTask v1.3 リリースしました!

github.com Task(async/await)ガンガン使ってる方向けのTweenアニメーションライブラリです。 v1.0から何が変わった? なんと、基本構文すら変わりました。 ということで、1から紹介し直します。 基本 (-5f, 0f, 0f) から (5f, 0f, 0f) へ2秒かけて移動する…

Adobe XDからUnityのPrefabを自動生成出来ると何が嬉しいの?

はじめに これは、Adobe XDからPrefabを自動生成できるライブラリAkyuiUnityをオススメする際に、 「そもそもUIをAdobe XDで作れると何が嬉しいの?」と聞かれた時用の記事です。 この記事では「デザイナーさん」と「プログラマーさん」という2人の登場人物…

本当に使える!TextMeshProでの「日本語」「多言語」対応方法

はじめに TextMeshProがUnityに標準搭載されてから、もう3年近く経とうとしています。 もう皆さん知ってると思うので、今更TextMeshProの利点をいちいち紹介したりはしません。 それでも「良いものなのは知ってるけど、日本語表示するのは大変なんでしょ?」…

UnityEditorでもApplication.isEditor == falseになるケースがある

Device Simulatorのパッケージを入れていると、 気を利かせてApplication.isEditorはfalseになるわ、 Application.platformもiPhonePlayerになるわ、 そういうこともあるんだなぁ。みたいな挙動をします。 Application.installMode == ApplicationInstallMod…

Unity Addressableで"Use Existing Build"を使っているときにSpriteAtlasからSpriteが読まれない時の対処法

問題 青色と緑色の2つがSpriteAtlasになっています。 上がシーンに直接Prefabを配置、 下がAddressable経由でPrefabをロードした状態。 "Use Existing Build"を使えばほぼ実機と同じ挙動になるはずなのに、なぜかSpriteAtlasからSpriteが読まれない!なぜ? …

Auto9Slicer - 自動的に9スライス用画像に変換してくれるライブラリ

github.com 画像を入れると、自動的に9スライス用画像に変換してくれるライブラリです。 メリットとしては、テクスチャサイズが小さくなる、サイズを変更しても拡大した感がでなくなる、などなど9スライスの恩恵を自動的に受けられます。 (昔、OnionRingと…

Unity Editorでsvgからpngを作る

using System.IO; using AkyuiUnity.Editor.Extensions; using Unity.VectorGraphics.Editor; using UnityEditor; using UnityEngine; namespace Sandbox { public static class SvgToPng { public static byte[] Convert(string svg, Vector2Int size) { va…

常用漢字を突っ込むのはもうやめ!Adobeが定めた良い感じの日本語文字セットをTextMeshProで使う

Adobe-Japan1 文字コレクションって? 先日、Fontworksさんがゲームにも使えるライセンスでフォントを無償公開してましたね! めっちゃ良い!これ使おう!!と思ってフォントの詳細ページを見ると 収録文字 Adobe-Japan1-4の全グリフ GF Latin Core という表…

Unityで画面に描画せずにテキストの幅と高さを取る方法

var fontAsset = AssetDatabase.LoadAssetAtPath<Font>(fontPath); var settings = new TextGenerationSettings { generationExtents = Vector2.zero, textAnchor = TextAnchor.MiddleCenter, alignByGeometry = false, scaleFactor = 1.0f, color = Color.white, </font>…

球の表面のuvを回転するシェーダー

百聞は一見に如かず で。 球のtransformを変更せずに球を回転させたい時どうすれば良いか。 テクスチャだけ回転させてしまえば良いのです! まあ、そんな機会めったにないと思いますが、めったに無いからこそググってもあんまり出なかったので貼っときます。…

Unity2020.2でnull許容参照型を使う

null許容参照型って? ドキュメントを読みましょう。 これが欲しかった!最高! Unityで使うには辛さがある SerializeFieldは#nullable enableで囲う。とかは良いとして、 public class Hoge : MonoBehaviour { private HogeComponent _cache; public void S…

Unityの物理演算使ってると、すぐに物が吹っ飛ぶんだけど?って時に読む記事

板を2秒時点で下にずらして、さらに2秒後に元の高さに戻すデモ はじめに ゲームで使う物体のサイズ感、質量、求めている精度によってパラメーター調整を行う必要があるので、これが正解!みたいな数値があるわけじゃありません。 MaxDepenetrationVelocity P…

AndroidのIAPレシートにpackageNameが入っていないことがある

リストアのときはレシート内にpackageNameが含まれなくなったらしい。 UnityIAP1.23.2〜1.23.4までの間は、購入キャンセルしたときに1個前に成功した購入のリストア処理が勝手に走るバグがあり、(1.23.5で修正済み)購入キャンセルしたはずなのにProcessPur…

AnKuchen - UIを作成する際にInspectorにドラッグ&ドロップする必要がなくなります

github.com セットアップ UnityPackageManagerで「AnKuchen」をインストールします。 https://github.com/kyubuns/AnKuchen.git?path=Unity/Assets/AnKuchen UIのルートにUICacheComponentを追加し、Updateボタンを押します。 更新ボタンを押す処理をワーク…

もうUI作るときにInspectorでTextとかButtonをペタペタ登録する作業をやめたい

追記:公開しました → https://blog.kyubuns.dev/entry/2020/09/03/212257 Unity上でUIを作るとき、こんな感じでSerializeFieldにButtonやらTextやらをペタペタ登録するじゃないですか。 そもそもめっちゃ面倒だし、更新したときに参照張り替え忘れるし、や…

TaskとMessageBrokerを活用してゲームロジックを書くとこんなシンプルに書ける

ゲーム開発の入門書の一番最初で「毎フレーム描画処理を挟む必要があるので、こうは書けません。」って言ってくるサンプルコードあるじゃないですか。 あれ、あのまま書けたらめっちゃ良いですよね。という話です。 UniRx, UniTask, TaskMessageBrokerを使い…

BridgeJsCoreUnity - UnityでJavaScriptを走らせる

github.com UnityからJavaScriptを走らせるやつです。iOS, macOS限定です。 もう死語になったUnityScriptではなく、ちゃんとJavaScriptです。 実態はJavaScriptCoreを叩く薄いラッパーです。 jsからC#のメソッドを呼び出す、みたいな高度なことは出来ません…

Unity2019.3以降で新しいキャッシュサーバーUnity Acceleratorをコマンドラインから利用する

2019.3から古いキャッシュサーバーは使えなくなり、UnityAcceleratorになりました。 普通にエディタから使う分にはこちらのページを参考に。 コマンドラインから利用するには -adb2 -EnableCacheServer -cacheServerEndpoint Address:Port を指定する。 これ…