はじめに
約一年半「Unity」を使ってきて、よく使う機能やよく繰り返す機能を
たくさん作ってきたので、それらの一部分をいくつかのクラスにまとめて公表したいと思います!
そのまま使って頂いても構いませんし、
これらのアイデアを元に、更にいいものを作り上げて欲しいとも思っています
(それが出来上がったら是非コピp、、、もとい、参考にさせていただきたいです)
公表場所
以下のリポジトリにあります。
※C#7.0以上が必要です。
https://github.com/nomeimei/NerScript
機能紹介
ここでは内容されている機能の一部分を説明したいと思います。
機能は全て、namespace NerScriptにまとめてありますので、
using NerScript;
を忘れずにお書きください
ComponentExtend
アタッチされているRigidBodyやColliderの取得
gameObject.GetRigidBody();
gameObject.GetRigidBody2D();
gameObject.GetCollider();
gameObject.GetCollider2D();
GameObjectExtend
ありそうで無い便利なやつ
gameObject.Destroy();
gameObject.DontDestroyOnLoad();
gameObject.AddChild([オブジェクト]);
一番近いObjectを返してくれる
gameObject.GetClosestObjectInList([Objectのリスト]);
RigidBodyExtend
RigidBodyのFreeze操作
一時期とてもお世話になった
rigidbody.UnFreezeAll(); //Freeze全解除
rigidbody.FreezePosY(); //PositionYのみ凍結
rigidbody.UnFreezeRotation(); //Rotationの凍結解除
rigidbody //もちろんRigidbodyConstraintsで設定可能
.Freeze(RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionY);
内部実装を久しぶりに見たらString で1と0を管理しててビビった。
今ならビット使おうぜってなる代物。修正はしない。
StringExtend
文字列を数値に変換
int num = "12345".Int(); //Int(12345)
文字列を反転
"あいうえお".Reverse(); //おえういあ
UnityExtend
デバックがすこし捗る
int num = 5000.DebugLog(); //num:5000
string str = "ほげ".DebugLog(); //str;"ほげ"
代入するついでにLog表示してくれます。
こんなこともできちゃいます。
int num = 5000.DebugLog() + 300;
float length = new Vector3(12, 34, 56).DebugLog().magnitude;
この場合もしっかりと値が入ります。
Colors
大量の色が定義されています。
これに関しては自分で作ったものではなく、他人のものなのですが、
どこにあったか見つけ次第リンクを張っておきます。
追記:見つけました。こちらを参考にさせていただきました。
http://baba-s.hatenablog.com/entry/2017/12/28/145900
EnumLib
int->Enum変換
MyEnum enum = 3.ToEnumName<MyEnum>();
面倒くさい処理(「()」が多すぎる)を一発で出来ます。
GizmosLib
これに関しても他者のものを自分なりに拡張したものです。
参考にしたもの
https://github.com/code-beans/GizmoExtensions
ListLib
よく使うものたちです。
速度?気にしたら負けです。
人間様が使いやすいので問題ないです。
要素数を変更
list.Cut(5); //max = 5
list.Fill(10); // min = 10
list.SetCount(7); //count = 7
最後の要素を削除
list.RemoveFirst();
配列/リストに変換
int num = 10;
int[] nums = num.ShiftArray();
//nums : {10}
int[] nums2 = num.ShiftArray(30,40,700);
//nums2 : {10,30,40,700}
MathLib
intのClamp
this ref により、そのモノの変更が可能
int num = 10;
num.Clamp(0, 5);
//num : 5
num = num.Clamp(0,5);
にする必要がない!!
RandomLib
ここには様々なRandomがあります
Color
で色,PointInCircle
で円の中の一点など
ReflectionLib
使う人は使うSystem.Reflection
これが必要になるほどの人はきっと説明がなくても使いこなせるでしょう。
RectLib
AddやSet,Addedなど
Add
や、Added
がありますが、
Add,SetはRectそのものを操作します。
対して、Added,Setedは操作された、別物を返します。
例
rect
.AddedPosX(10) //x += 10
.SetedPosY(-20.5f) // y = -20.5
.SetedSize(100, 120);size = 100,120
よくこんな使い方をしています。
メソッドチェーン使いやすい。
ちなみに前述のListLibもチェーンできるように設計されています。
TransformExtend
Positionなどを変更
transform.AddPosX(10); //x += 10
transform.SetLclPos(0, -1, 20); /LocalPosition = 0,-1,20
transform.SetSclY(4); //LocalScale = 4,4,4
transform.AddPosX(10).SetSclY(4).SetLclPos(0, -1, 20);
これも割と使いやすいです。
速度?メモリ?知らん。
VectorLib
変換
Vector2 v2 = new Vector2(2,3);
Vector3 v3 = v2.ToVec3().OXY;
//v3 : 0,2,3
並び替え
v3 = v3.SortVec3().YZX;
//v3 : 2,3,0
v3 = v3.SortVec3().OYY;
//v3 : 0,3,3
応用
//v3 : 1,2,3
v3 = v3
.AddedX(3) //4,2,3
.SetedZ(-2) //4,2,-2
.AddedAxis(Axis.Y, 5) //4,7,-2
.Clamp(Vector3.zero, new Vector3(5, 5, 5)) // 4,5,0
.MergeVec3(new Vector3(22, 33, 44))["xXy"]; //4,22,5
終わりに
これからも追加されていくとおもうので
参考がてらに覗いて見ていってください