7
11

More than 3 years have passed since last update.

Unityで使える便利関数(拡張メソッド)達

Last updated at Posted at 2019-11-02

はじめに

約一年半「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

終わりに

これからも追加されていくとおもうので
参考がてらに覗いて見ていってください

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11