のにっき

【C#】VisualStudioでusingの整理を行う機能紹介

今までVisualStudioを何年も使用していて、

結構最近知った機能の紹介です。

 

### 概要

コード上で右クリックしたときのメニューで、

不要なUsingを削除してもらえます。

Using整理機能の挙動

不要なUsingをほっとくと、参照先が消えた時に

意図しないコンパイルエラーになったりよくないので

こまめに消すことを習慣化できるこの機能は便利だなと思いました

【Unity】LayoutGroupの自動レイアウトがうまくいかないときの対処法

ScrollViewなどでLayoutGroupを使った際に、
レイアウト調整がうまくいかなかった時の対処法です

うまくいかない現象

以下の動画のように各アイテムのスペースの調整が本来自動で行ってほしいところ、
うまくいかない場合があります。
スクリプトからアイテムをInstanceした際によく起こる現象かなと思います

動的にInstanceした時の挙動

対処法

 //LayoutGroupの中にInstantiateでアイテム生成
 Instantiate(GameObjectPrefab, LayoutGroupContent.transform);
 //LayoutGroupのRectTransformに対してレイアウトの再構築を実行する
 LayoutRebuilder.ForceRebuildLayoutImmediate(LayoutGroupContent.GetComponent<RectTransform>());

上記のように、アイテム生成後に
"LayoutRebuilder.ForceRebuildLayoutImmediate()"の関数で
レイアウトの再構築を実行することで、以下のようにうまく描画することができます。

レイアウト再構築後の挙動

LayoutRebuilder.ForceRebuildLayoutImmediate()関数は
自動レイアウト調整後にGameObjectの高さを取得したいけど正常な値が取れないときなど、
自動レイアウト周りの不具合の解決に最適な場合が多いです。
覚えておいて損はないかなと思います。

【Unity】InputFieldの行数をonValueChangedで取得する

InputFieldで表示を変えたりするときに、
onValueChangedのイベントはよく使われると思います。
今回は、onValueChangedでテキストの行数を取得するときに
ちょっと詰まったので注意点と対策を共有します。

行数を取得する方法

int lineCount = TMP_InputField(変数名).textComponent.textInfo.lineCount;

上記の実装でテキストの行数が取得できます。
この「textInfo」は行数以外にもいろいろ情報が入ってるので、覚えておくと便利です
Class TMP_TextInfo

実際の挙動

上の手順がわかれば、あとはonValueChangedで処理を描けばいいだけと思ったのですが、
実際の挙動は以下のようになりました。

※onValueChangedでlineCountを取得してコンソールに出力した

実際は改行が起きた次の文字でlineCountが1→2に切り替わる挙動となってしまいました。
見た感じ、「lineCount」の情報が1文字遅れてるのでしょうか?
※削除したときはちゃんと表示に合わせて2→1になってるので
単純な遅れってわけじゃなさそう・・・

対応策

onValueChangedの中で、

TMP_InputField(変数名).textComponent.text = value;

を行えばちゃんと表示に合わせてlineCountの数値も変わりました。
この実装を行うことで、onValueChangedが二重で呼ばれたりしないのか不安だったんですが、
特にそんなことはなく正常に動きました。

二度手間感はありますが一旦はこの対応でしのげます。

【C#】VisualStudioでoverrideを楽に実装する機能紹介

概要

VisualStudioでoverrideを実装するときに、

関数名やプロパティを記入するの面倒くさかったりしないでしょうか?

基底クラスを開きなおして関数名を調べたり、、、

VisualStudioの機能でそんな問題が解決します

※VisualStudio以外でも有効かもですが未調査です

手順

  1. 派生クラス内で override と記入する。
  2. 入力補完で基底クラスのvirtualなプロパティ、メソッドが候補にでる
  3. 選択するだけでベースの記述を行ってくれる

たったこれだけです。

実装サンプル

入力保管動作サンプル

サンプルだと基底クラスと派生クラスを同じソースファイルに書いてるので

パット見恩恵がわかりづらいですが、

Unityなどでソース書くときは基本1クラス1ファイルになるともうので

この入力補完の機能知ってると知ってないとじゃ大違いです!

ぜひお試しください

Excelで汎用的に自動でJsonファイル作成※C#用追加機能あり【ExcelJsonMaker】

概要

Excelを用いてJsonファイルを作成するxlsmファイルです。
ある程度汎用化させているので自由な形で作成できると思います。
追加機能で、Jsonファイルに応じたC#用のクラスファイルも生成する機能も付けています。
JsonSerializerで扱うように作ってるので、
C#でデータを扱う際にはほぼ作業なく実装できるのではないかと思ってます。
GitHubに公開していますので自由に使ってみてください。
※ご意見、ご感想お待ちしております

Gitリンク

ExcelJsonMaker.xlsmファイルが本体です。
落としてそのまま使えるようになってます
github.com

使い方

「出力」シート

基本的な情報を記入します

f:id:apuridasuo:20211213014259p:plain
出力シート記入情報
  • ▼出力開始ボタン

必要事項をすべて記入した後、
このボタンを押すと出力を開始します

  • ▼出力パス

出力先を記入することで指定できます
※未記入でもOKです
※出力後に自動でフォルダを開きます

Jsonファイルに加えて、
C#用のクラスファイルを出力するか切り替えることができます

  • ▼パラメータ用型一覧

Json作成時に、各要素の型を指定するのですが、
指定する型のリストと、未記入時に記入する内容をここに記入します。
自由に編集できるので好きな型と対応する初期値を記入してください

「各Jsonファイル」シート

作成したいJsonファイルのパラメータを記入します
※1シート1Jsonファイルです
※シート数は自由に追加削除して大丈夫です

f:id:apuridasuo:20211213015158p:plain
【例】Class2シート内容
  • 1行目

各要素の型を選択
※リストは「出力」シートの「▼パラメータ用型一覧」参照

  • 2行目

各要素の名前(Key)
配列の場合は、名前の末尾に[]を記入することで配列となります

  • 3行目以降

各要素の値(Value
※セル内で改行も可能です(\nに置換します)
※未記入のセルは、自動的に初期値で穴埋めします

サンプル出力データ

落としてきたExcelJsonMaker.xlsmファイルを
そのまま出力したらサンプルになると思います。

Master_Class1.json
f:id:apuridasuo:20211213020203p:plain
Master_Class1.jsonの内容

指定のKey,ValueJsonファイルになっているの思います。
成形はめんどくさい+自動化するならいらないので適当にやってます

Master_Class1.cs
f:id:apuridasuo:20211213020423p:plain
Master_Class1.csの内容

出力したJsonファイルに対応するクラスファイルになります。

【Unity】touchScriptを用いたスライド式ポップアップの作成

最近アプリでよく見るスライド式ポップアップを作成しました。
汎用性を持たせたので簡単に実装できるようにしてます。

デモ動画

f:id:apuridasuo:20211118220139g:plain
図:ポップアップ挙動

GitのURL

github.com

使用手順

・DotWeen、TouchScriptを導入
DOTween (HOTween v2) | Animation Tools | Unity Asset Store
TouchScript | Input Management | Unity Asset Store

パッケージ内のSampleSceneを見ればアセットの内容はわかると思います。
Inspectorの設定を画像で説明します。

f:id:apuridasuo:20211118233128p:plain
図:Inspector設定(ポップアップ)
f:id:apuridasuo:20211118233533p:plain
図:Inspector設定(CanvasCorner)

【Unity】Building native binary with IL2CPP…で止まるときの対処法

最近、IL2CPPでビルドした時に上手くいかないことがあり
対処法を色々試したので解決したものを紹介します。

環境

・開発PC:Windows
・Unity 2020.3.17f1
Android向けにビルド

問題

・ビルドを行ったら、必ず「Building native binary with IL2CPP…」で固まる

f:id:apuridasuo:20211010231444p:plain
固まった時のダイアログ

・Cancelしても固まったまま
・IL2CPPからMonoに切り替えるとビルドは成功する
・再起動、Liblary初期化等の対応を行っても直らない
・何度か試しているとビルドに成功する

解決方法

ウイルス対策ソフトを停止させた。
私はスーパーセキュリティというソフトを入れていたのですが、
そいつのせいでビルドが固まっているようでした。。。

f:id:apuridasuo:20211010231752p:plain
スパセキュ画面

画像のように保護の項目を全てOFFにして再起動後にビルドすると上手くビルドできました。
皆さんも、同じことがあった場合はウイルスソフトを疑ってみてください。