tonari note

オンラインゲームエンジニアの雑記

SwitchPattern

以前、ActionPatternなるものを作ったんですが、顧客が本当に欲しいものを吟味した結果、下のようなものができました。SwitchPattern.cs · GitHub まずは単純なswitch。 using static System.Console; using static Tonari.ActionPattern.SwitchPattern; //=…

最近のUnity関連のgist

メモリにやさしい空の配列生成 gist.github.com Enumerable.Empty(T)は毎度インスタンスを生成するので、こちらにすると型ごとに1つのインスタンスだけでメモリにやさしい。 IEnumerable(GameObject)に含まれてる特定のコンポーネントをまとめて持ってくる g…

MarkUXとUniRXでGUIを作る話

この記事はUnity Advent Calendar 2015、23日目の記事です。前日はkyusyukeigoさんのエディターでWebViewを使う話でした。 鯖蔵通信ゲームならサーバ周りをWebでポチポチしながら作業することは多いと思うので、夢が広がりんぐだと思います。さて、今日はサ…

UniRxとカスタムバインディング

お久しぶりです。 最近UniVM更新しつつもどうなってるかは全くな感じだったんで、現状どうなってるかだけメモがてら書いておきます…yKimisaki/UniVMgithub.comまずUniVMの方向性を、MVRPパターンを拡張する形で、バインディングの部分を担う感じにしようと思…

C#でパターンマッチ

ひとりごと - tonari note ひとりごと - tonari note前回、独り言のようにつぶやいたこれですが、一旦形になった気がするのでまとめます。 テストとか超適当。 あとUnityでJIT落ちしない事は一応確認していますが、もし落ちるとかあったら教えてくださいませ…

ひとりごと

C#で稀によくenumなりで状態を返してちょっとした処理をしたいときがあります。 たとえば簡単な例として、符号を調べる関数があるとして enum Sign { Positive, Zero, Negative } static Sign GetSign(int value) { if (value > 0) return Sign.Positive; if…

UniVM

知人が双方向バインディングしたいっていうのでuGUI向けに作りました。 まだUnityEngine.UI.Text⇔stringの部分しかないですが後は根気で。yKimisaki/UniVM yKimisaki/UniVM · GitHub一応簡単なサンプルつけてます。まず、UI作って、CanvasにView Rootをくっ…

静的コンストラクタ

静的クラスのお話 - tonari note1年ぐらい前に静的クラスの記事書いてたらしいですが、その補足です。 静的コンストラクタの呼び出されるタイミングですが、 最初のインスタンスを作成する前、または静的メンバーが参照される前 です。 using System; publi…

MonoBehaviourの抽象化

別にMonoBehaviourじゃなくてもいいのですが、ライブラリなどで提供されている既にあるクラスにインターフェイスのような抽象化を施したい時に、抽象クラスというものがあります。 // インターフェイス public interface ILoader { IEnumerator Load(); } //…

Unityでパフォーマンス稼ぐための小ネタ その3

またしても配列ネタです。 今回はArray.Copyについて。 var source = Enumerable.Range(0, 1000).ToArray(); var copied = new int[source.Length]; Array.Copy(source, 0, copied, 0, source.Length); さて、これでもコピーは可能なのですが、実はプリミテ…

Unityでパフォーマンス稼ぐための小ネタ その2

Unityでパフォーマンス稼ぐのって結構面倒くさかったりします。 たとえばパフォーマンスの敵と言われているものにガベージコレクションがあります。 時と場合によってGCが走らないようにする回避方法は変わったりしますが、今回はC#でパフォーマンスを稼ぐ一…

Unityでパフォーマンス稼ぐための小ネタ その1

Unity関係ないといえば無いんですが、今回はLINQのメソッドと同じ機能がArrayなりListなりに用意されている場合はそっちのほうが良いときもありますよ、という一例を。配列を後から持ってくる場合に有効なものです。 using System; using System.Linq; class…

ハマった

以下のコードをご覧ください。 string str = null; // == str.Fuga(); 僕はこのコードを「危ない」と思って以下のように書いたんですね。 if (str != null) str.Fuga(); でもなんか動かない、挙動がおかしい。 で、同僚と探りを入れていくと以下のようなコー…

C#のforeachな話

foreachについて最近よく聞かれるので。 var ary = new []{1, 2, 3}; foreach(var num in ary) Console.WriteLine(num); 配列やらリストやらを順番に処理していく。この順番にっていうのがミソで、じゃあ順番ってなんやねんってなるわけです。 var ary = new…

ここ最近のスライド2つ

Unityと.NET from AimingStudy ゲームエンジンとMVC from AimingStudy

Unity-chan Game Jam 2014

先日のUnityちゃんゲームジャム、立命館草津キャンパスのほうで参加していました。githubで管理していたのですが、まだ整理とか出来ていないので(checkoutしてUnityで開いただけでいろいろ差分が出る状態なので)、整理できたら載せようと思います。 大学で…

試しに移行してみます

試しに移行してみますcodebreakちょとガッツリ使い込んでみようと思ったのでしばらく使ってみます。https://codebreak.com/blog/ykimisaki/top/お手数おかけします。 すみませんが、よろしくです。

【メモ】C#で迷った時の決め事

C#で「どう書こうかな」って迷った時にルール統一させようと思ってメモしておきます。 以下、俺俺文法。 List.ForEachかforeachか。 基本的にforeach。 ただし、{}を使わないときはList.ForEachでも良い。 // すべてのキャラのパワーを元に戻す characters.F…

T4の話

お久しぶりです。 今日はIDEのT4の機能についてお話しようと思います。さて、C#はひとつの言語ですが、僕はC#は.NETやMonoなどの実行環境、VisualStudioやXamarinなどのIDEとセットで考えるべきだと思っています。 C#はC++などに比べてさまざまな制限があり…

ActionScript用githubを公開しました

Flashゲーム制作の中で作成したクラスをまとめ、配布しようと思います。 よろしくお願いします。yKimisaki/TonariAS3 · GitHub

静的クラスのお話

C#

C#では静的クラスというものを宣言することができます。静的クラスと静的クラス メンバ(MSDN)静的クラスには以下の特徴があります。 全てのメンバーは静的でなければなりません。 通常のクラスのようにインスタンス化はできません。 インターフェイスの実装…

Unityに自作ライブラリのDLLを参照させるお話

複数のゲームを作る場合、似たようなゲームのロジック部分などをライブラリ化し、使いまわしたい場合があります。 Unityでは以下のようにしてDLLを参照させることができます。 クラスライブラリを作成します。 プロジェクトのプロパティから、対象のフレーム…

UnityのエディタをVisualStudioに変更するお話

Untiyの標準エディタはMonoDevelopですが、これをVisualStudioに変更することができます。 今回はUnity 4とVisualStudio Express 2012 for Windows Desktopを使用します。両方の準備ができたら、Unityのプロジェクト側で以下の設定を変更します。 ここで指定…

Optionクラスを公開しました

Optionクラス(GitHub)Nullableでは以下のような演算が可能です。演算のどちらかがnullだった場合、結果もnullになります。参照型の場合、nullに対するメンバを呼び出そうとするとエラーになります。 これを回避するためにOptionクラスでオブジェクトをラッピ…

githubはじめました

個人製作のゲームで作成したクラスの中で、配布できそうなやつをまとめていこうと思います。 よろしくお願いします。yKimisaki/Tonari · GitHub

デリゲートとイベントのお話

C#

C#ではデリゲートを用いることでメソッドを変数のように扱うことができます。delegate(MSDN)また、これと似たようなキーワードにeventがあります。event(MSDN)単にメソッドを変数のように扱いたい時はデリゲート(Action/Func)を使用するのですが、クラス内に…

シーケンスの途中の要素を抜き出したい時のお話

C#

いくつかのシーケンスのうち、途中から途中までの範囲を切り出して処理をしたい時があります。 その時はSkipメソッドとTakeメソッドを使用します。Skip(MSDN) Take(MSDN)Skipはそこから何要素を飛ばすか、Takeはそこから何要素を取得するかです。 これらのメ…

Tupleのお話

Tupleとは組という意味だそうです。 ダブル、トリプルといった単語もこの言葉からきているようです。 Tupleの意味(weblio)プログラムでは、一時的に複数のオブジェクトをひとまとまりにする際に使用します。 C#では、Tupleクラスが4.0から追加されました。Tu…

ジェネリックとdefaultのお話

C#

C#には型に対しての既定値が用意されています。 ジェネリック コードの default キーワード(MDSN)既定値は、値型の場合は0、参照型の場合はnullです。 構造体では各メンバが既定値に初期化され、その値を返します。既定値を得るにはdefaultキーワードを使用…

Monoでちょっと気になったこと

昼間に軽くideoneさんで遊んでいた時に見つけた。 ListにAddしっぱなしにした時に、デストラクタの挙動が違ってたので気になった。 using System; using System.Collections.Generic; namespace ConsoleApplication1 { class Program { static void Main(str…

string.Format のお話

C#

オブジェクトを置換しながら文字列にしてくれるメソッドのお話。 Console.WriteLineメソッドと相性がいいのでよく使っています。 String.Format メソッド(MSDN) using System; public class Test { public static void Main() { // intを3ケタで表示 Consol…

AS3での列挙体のお話

AS3には列挙体(Enum)が無かったりするのですが、公式リファレンスだとクラスで代用してね、ということだそうです。 ActionScript のオブジェクト指向プログラミング これだと確かに列挙はできるのですが、C#のようなint型への変換やFlags化がしにくいのでち…

Enum.GetValues のお話

C#

定義したEnumの各要素(定数)を配列に変換してくれる便利関数のお話。 MSDN using System; public class Test { enum Hoge { Hoge0 = 0, Hoge1, Hoge100 = 100, } public static void Main() { var hogeArray = Enum.GetValues(typeof(Hoge)); foreach (var…