(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

OdinとCustomEditorを併用する方法【Unity】【アセット】【エディタ拡張】


この記事でのバージョン
Unity 2018.4.0f1
Odin 2.0.20


はじめに

色々な属性を追加して、Inspectorを使いやすくしたり、


f:id:kan_kikuchi:20171127084846j:plain


シーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つけたりも出来るOdinですが、


f:id:kan_kikuchi:20180104073302j:plain


CustomEditorと併用する際にちょっとした注意点があったの記事にしました。

先にその注意点を簡潔に言ってしまうと

「OdinとCustomEditorを併用する場合、EditorではなくOdinEditorを使う」という話です。





OdinとCustomEditorを併用する方法

続きを読む

エディタ再生中に変更した値を、再生終了後もそのまま保持する属性【Unity】【エディタ拡張】【属性】


この記事でのバージョン
Unity 2018.4.01


はじめに

UnityではInspector上で色々な値を変える事が出来ますが、

基本的に再生中に変更した値は、再生終了時に元に戻ります。

f:id:kan_kikuchi:20190514162054g:plain


コンポーネントの右上にある歯車から、再生中にCopy Componentをして数値をコピー、

再生終了後にPaste Componetで値を上書きして戻すという事も可能ですが、これもちょっと面倒です。


f:id:kan_kikuchi:20190514162240j:plain


何かいい方法はないかと調べた所、皆さんご存知、テラシュールブログさんにて

自作の属性を使い「エディタでゲーム再生中に変更した値を停止しても消さない」

という方法が紹介されていました。




これをそのまま使えばいいのですが、色々と変更したい所や追加したい事があったので、

上記を参考に「エディタ再生中に変更した値をエディタ停止後もそのまま保持する属性」

を作ってみました!イメージとしては以下のような感じ。


f:id:kan_kikuchi:20190514141459g:plain


目次

  • はじめに
  • 目次
  • PersistentAmongPlayModeAttribute
  • 注意点とその対処法
  • 変更点と機能詳細
    • エラーへの対応
    • obsoleteの対応
    • Public以外の変数への対応
    • エディタ再生中に値を変更してもシーンを保存出来るように
    • Inspector上の表記変更


PersistentAmongPlayModeAttribute

続きを読む

メモリ改ざんの抑止やPlayerPrefsの暗号化、端末時間の改ざんの検出にオンライン上の時間の取得など、様々なチート対策ができるAnti-Cheat Toolkit【Unity】【アセット】

この記事でのバージョン
Unity 2018.3.4f1
Anti-Cheat Toolkit 1.6.7


はじめに

今回は様々なチート対策ができるAnti-Cheat Toolkitというアセットの紹介です!


メモリ改ざんの抑止やPlayerPrefsの暗号化など、よくあるチートに対する対策が簡単に実装でき、

しかも、最悪それらが突破されてたとしても、チートの検出も可能という万能チート対策アセットです。



なお、現在セール中で50%OFFになっています。



また、クーポン「MAYSALE10PERCENT」を使うとさらに10%OFF(計55%OFF)に出来ます。



セール期間&クーポン期限:日本時間の5月1日17時00分00秒〜5月16日16時59分59秒


目次

  • はじめに
  • 目次
  • メモリ改ざんの抑止
  • メモリ改ざんの検出
  • PlayerPrefsの暗号化
  • PlayerPrefsの改ざんの検出
  • 端末時間の改ざんの検出
  • オンライン上の時間を取得
  • おわりに


メモリ改ざんの抑止

続きを読む

uGUIのTextの代替となるTextMesh Proとは【Unity】【TextMesh Pro】

この記事でのバージョン
Unity 2018.3.4f1
TextMesh Pro 1.4.0


はじめに

昔のUnityはUIの実装がかなり大変でしたが、uGUIの登場により劇的に改善されました。

しかし、まだ物足りない部分は多々あり、特にテキスト周りは不便な点も多いのが現状です。


そこで最近では、テキストのUIを表示する時はTextMesh Proを使うのがスタンダートらしいのですが、

実は今まで使ったことがなかったので、調べるついでに諸々をまとめてみようという感じの記事です!


f:id:kan_kikuchi:20190506064435j:plain


目次

  • はじめに
  • 目次
  • TextMesh Proとは
  • uGUIのTextとの比較
    • 拡大しても綺麗
    • 設定
    • 装飾
    • フォント
  • 導入
  • 生成
  • フォントアセット
    • 作り方
    • 更新
    • Fallback Font
    • Dynamic SDF System
  • 装飾
    • グラデーション
    • タグ
    • マテリアル
  • プログラム
  • おわりに


TextMesh Proとは

続きを読む

gameObject.tagをイコールで比較した場合とCompareTagを使った場合の処理時間の比較【Unity】【最適化】

この記事でのバージョン
Unity 2018.3.4f1


はじめに

GameObjectにはTagが設定でき、そのTagを比較して判別するという事はよくありますが、


f:id:kan_kikuchi:20190428052226j:plain

var isPlayer = gameObject.tag == "Player";


実はCompareTagというメソッドを使って比較する事も可能で、

しかもCompareTagの方が処理が早かったりもします。


var isPlayer = gameObject.CompareTag("Player");


と言う事で今回は、gameObject.tagをイコールで比較した場合と、CompareTagを使って比較した場合の

具体的な処理時間の比較記事です。


なお、記事内の処理時間は以下のProcessTimerを使って測っています。





処理時間の比較

続きを読む

簡単にセーブ&ロード&暗号化が実装できるEasy Save【Unity】【アセット】

この記事でのバージョン
Unity 2018.3.4f1
Easy Save 3.0.3


はじめに

今回は簡単にセーブ&ロード&暗号化が実装できるEasy Saveというアセットの紹介です!


Easy Saveは名前の通り、PlayerPrefs並に簡単に使えるアセットですが、

ListやTransformなど色々な型を保存出来たり、暗号化を設定1つで実装出来たりと多機能でもあります。

//セーブ
ES3.Save<int>      ("IntKey",       100);
ES3.Save<bool>     ("BoolKey",      false);
ES3.Save<string>   ("StingKey",     "Text");
ES3.Save<Transform>("TransformKey", transform);

//ロード
int    num  = ES3.Load<int>   ("IntKey");
bool   flag = ES3.Load<bool>  ("BoolKey");
string text = ES3.Load<string>("StingKey");
ES3.LoadInto<Transform>("TransformKey", transform);


この"色々な型"を保存出来るというのが本当に色々で、intやstringはもちろん、

Enum、DateTimeArray(2次[,]と3次[,,]も)、List、HashSet、Dictionary、

AudioClip、Transform、Material、Vector3といったものまで保存出来てしまいます。

ちなみに保存出来る型の一覧は以下のページにあります。



なお、現在セール中で50%OFFになっています。



また、クーポン「MAYSALE10PERCENT」を使うとさらに10%OFF(計55%OFF)に出来ます。



セール期間&クーポン期限:日本時間の5月1日17時00分00秒〜5月16日16時59分59秒


目次

  • はじめに
  • 目次
  • 導入
  • 実装方法
    • セーブ
    • ロード
    • 削除
    • 存在判定
    • 一覧の取得
    • 暗号化
  • 設定
    • Managerの自動生成
    • セーブファイルの保存場所
    • 暗号化
  • おわりに


導入

続きを読む

enumをInspectorで設定する際、ポップアップの表記を日本語などに自由に変える方法【Unity】【エディタ拡張】



この記事でのバージョン
Unity 2018.3.4f1


はじめに

今回はenumをInspectorで設定する際、

ポップアップの表記を日本語などに自由に変える方法の紹介です!


イメージとしては以下のような感じ


f:id:kan_kikuchi:20190426074847g:plain:w700


enumのポップアップの拡張

続きを読む

列挙型(enum)の項目数取得したり、ランダムに取得したり、全項目を取得したり、番号や文字列から変換したり【C#】

この記事でのバージョン
Unity 2018.3.4f1


はじめに

今回は列挙型(enum)の項目数取得したり、ランダムに取得したりといった

enumの汎用的な便利メソッドをまとめた便利クラスの紹介です!


前にも似たような記事を書きましたが、





これらのまとめ&進化版みたいな感じになります!


目次

  • はじめに
  • 目次
  • EnumUtility
  • GetTypeNum : 項目数を取得
  • GetRandom : 項目をランダムに一つ取得
  • GetAllInList : 全ての項目が入ったListを取得
  • KeyToType : 入力された文字列と同じ項目を取得
  • NoToType : 入力された番号の項目を取得
  • ContainsKey : 入力された文字列の項目が含まれているか
  • ExcuteActionInAllValue : 全ての項目に対してデリゲートを実行


EnumUtility

続きを読む

LINQの遅延実行&即時実行とforeach+遅延実行の問題【C#】【LINQ】



はじめに

今回はLINQの遅延実行と即時実行についての話。

LINQを使う上で知らなくてもわりとどうにかなる場合が多いですが、かなり大切な概念です。


ちなみに、「実戦で役立つ C#プログラミングのイディオム/定石&パターン」にも同様の項目があり、


実戦で役立つ C#プログラミングのイディオム/定石&パターン

実戦で役立つ C#プログラミングのイディオム/定石&パターン


かつ、これに関するちょっとした問題に遭遇したので記事にしてみました!


遅延実行

続きを読む

エクセルやスプレッドシートを自動でScriptableObjectに変換するUnity-Excel-ImporterとUnity-QuickSheetの使い方と比較【Unity】【ScriptableObject】【エディタ拡張】



この記事でのバージョン
Unity 2018.3.4f1


はじめに

エクセルやスプレッドシートでデータをまとめて、

ScriptableObjectに変換して使うというのはUnityではよくあります。


実はその変換部分を自動でやってくれるアセット(?)の有名所に

Unity-Excel-ImporterとUnity-QuickSheetという2つがあります。




2つあるとなると、やはりどちらを使うか悩むので、

今回はその2つを実際に使い、比較をしてみた感じの記事です!


目次

  • はじめに
  • 目次
  • 両者で出来ることと出来ない事、それぞれの良い所
  • Unity-Excel-Importerの使い方
  • Unity-QuickSheetの使い方(xlsファイルがプロジェクト内にある場合)
  • Unity-QuickSheetの使い方(スプレッドシートからダウンロードしてくる場合)
  • おわりに



両者で出来ることと出来ない事、それぞれの良い所

続きを読む