.csv を更にスマートに読み込む

今時 Unity だと .csv とかめっちゃスマートに読み込めるのでコピペして使おう。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

class ReadCSV
{
	List<CharaData> mCharaDataList = new List<CharaData>();

	public void loadCharaData()
	{
		Dictionary< string, ECharaID> charaid_table = new Dictionary<string,ECharaID>();
		for( ECharaID e = ECharaID.Invalid; e < ECharaID.Max; e++ ) enemy_table.Add( e.ToString(), e );
		
		TextAsset alltext = Resources.Load( "GameData/CharaData" ) as TextAsset;

		List<string> alllines = alltext.text.Split('\n').ToList();
		alllines.RemoveAt( 0 );
		alllines.RemoveAt( 0 );

		int current = 0;
		foreach( string line in alllines )
		{
			List<string> elements = line.Split(',').ToList();
			if ( elements.Count < 6 ) continue;
			CharaData d		= new CharaData();
			d.Value0		= charaid_table[elements[0]];	// <- string to enum
			d.Value1		= SmartParse( elements[1] );	// <- string to int
			d.Value2		= SmartParse( elements[2] );
			d.Value3		= SmartParse( elements[3] );
			d.Value4		= elements[4];			// <- string to string
			d.Value5		= elements[5];

			mCharaDataList.Add( d );
		}
	}
	
	static public int SmartParse( string str )
	{
		int result;
		if ( int.TryParse( str, out result ) ) return result;
		else return 0;
	}
};

解説

とりあえずリストのために generic、パースのために lynq を読み込む。
最初の行で Dictionary に登録しているのは Enum (列挙型)の一覧。。これにより、CSVEnum の文字列をそのまま書き込んでも認識されるようになるので便利。

改行でパースしたものを二行飛ばし(コメントなど用のスペース。無くても可)、更に各行を','でパースする。更に各項目の中に複数の値を入れたいなら「|」や「@」などで区切るとよし。
string 型から int 型へのパースはどうにも使い勝手が悪いので、エラーを吐かない Parse を用意してやる。処理速度にはほぼ影響なし。

これだけ。C# は便利。ご賞味あれ。

飲み会ぼっちから脱出するための、密かな8つのTIPS

クリエイター系の懇親会や勉強会や飲み会や芋煮会なんかに参加すると、よっぽど意図的に無作為なメンバー集めをしない限り、参加者の中にはある程度コミュニティが形成されているものである。
一応初めての人でもざっくばらんに分け隔てなくという建前はあるものの、やっぱりどうしても普段から喋り慣れている人と一緒に話したくなるもので、時間が経つにつれて数人のグループが複数、誰も知り合いのいない人たちが微妙な距離感を保ちながらぽつぽつと一人で酒と料理を口にする、なんて状況が往々にして発生する。

誰しも最初は後者なのだが、そこから一歩踏み出すには大きな勇気がいるものだ。ってか無理だ。よっぽどコミュニケーション能力に長けた人でないと、何のコネクションもない状態からズカズカとアウェイのコミュニティの真っただ中に入っていくなんて芸当はできない。無理無理

とはいえ。無理だといって永遠に尻込みしているわけにもいかないし、志を同じくする人たちと酒を酌み交わすことはきっと楽しいはずだ。誰だってあの凄いゲームを作った、素晴らしい絵を描いた、名立たる楽曲を書いたあの人と話したいのだ。

じゃあ、どうするか。ぼくもコミュニケーション能力がそこまである人間ではなかったけれど、だからこそ何か助けになるものがあるかもしれないので、わずかばかりの TIPS を書き起こしてみることにする。

続きを読む

「パクリ」って言葉に思うこと。


この考えは、以前から抱いていたものではなく、ほんと最近になってふと思うようになったもの。
きっかけは明確だ。故・今敏監督の「パクリの語法」という記事を読んでからである。
http://konstone.s-kon.net/modules/notebook/archives/530


2000年代から加速し始めたパクリ叩きの流れは2010年代に入って熾烈を極め、今やネットの世界では殺人者とほぼ同等の扱いを受ける始末。まあ、パクリという行為は時にパクラレ作品を強盗殺人するようなケースもあるので、あながち間違いとも言えない。


自分もクリエイターの端くれなもので、自分の作品を隅から隅まで丸ごとパクったような作品が現れれば気のすむまで棍棒で殴りつけたくなるし、事実そういう風に大手企業に作品をパクられながらも、個人という弱者ゆえに泣き寝入りせざるを得なかった人がたくさんいたはずだ。インターネットはこういう弱者の声を拾い上げ、強者の立場を濫用して極悪非道な行為を繰り返す悪人どもを名もなき裁判で断罪し続けた。
これによって救われた人は少なくないだろうし、私刑という響きに抵抗を感じながらも、必要悪として内心認めざるを得ない面は確かにある。文化的な自浄作用という肯定的な見方もできるし、インターネット時代の自由な創作環境を築くのに一役買っているのは間違いない。


ただ、最近はちょっと雲行きが怪しくなってきた。個人クリエイターがとても強い力を持ち始めたのだ。すると、名もなき彼らは個人を強者として認識し始める。抗いようのない強大な力に立ち向かうためだった銀の矢は、単純にパクリという行為そのものに向けられるようになった。
こうなるともう、正義がどうとかパクリの悪質さがどうとかそういう物差しじゃなくて、ムカつく奴かそうでないかで炎上度合いが変わったりする。私刑ですらない、私怨だ。


というところで、じゃあ、パクリという言葉について一度考えてみようか、というのがこの記事の趣旨である。

続きを読む

リソースの場合分けとビット演算

例えば自動生成のマップチップのようなものを想像しよう。上下左右に道があって、道のパターンによって使うマップチップが変わる。上に道があればこれ、左と右に道があればこれ、右と下ならこれ……。よくあるシチュエーションだ。
マップチップじゃなくてもいい。入力のパターンに複数の組み合わせがあって、出力が多種多様に変化するもの。入力がただの Enum(列挙型)一つなら Switch 文で事足りるんだけど……というケース。

泥臭く if 文で書くことはできるけど、汚いし、実は C# とかで 128*128 のマップを全部走査したりすると、結構な時間がかかったりする。じゃあ、どうやって書くのがスマートか。*1

というわけでたまには真面目なプログラミングの TIPS でも。しかし、あんまりこういう TIPS ってないよね。多分みんなスーパープログラマーだから必要ないんだろうね。

*1:先に言うとビット演算とテーブルなので、これだけで意味が分かった人は読む必要なし。

続きを読む

あなたが情報のるつぼで生き残るためのたった一つの方法。

物事の「本質」や「真理」について考えたことがあるだろうか。
目に見えないものを考えようとすると、宗教や哲学の話になりがちだが、実はもっと日常生活と近い所に、こういった概念は潜んでいる。
今日は、少し難しいけれど、そういう本質や真理を見抜いて、インターネットに溢れる数多の情報の波を乗り切っていく術のおはなし。

続きを読む

なぜ Miitomo は衰退したのか

なんて扇情的なタイトルにすると色々ありそう。

※個々のゲームに関してのレビューと考察増えてきたので「ゲーム寸感」というカテゴリを新設しました。

概要

Miitomoは去る 3/17、とうとう鳴物入りで登場した任天堂初のスマホアプリである。
自分の半身である Mii から投げられるあらゆる質問に答えていき、その Mii たちがフレンド同士で交流するのを眺めながら、他の人が答えた回答にイイネ!やコメントを付けたり、溜まったコインで自分の Mii を着替えさせたりという、新たな機軸のコミュニケーションアプリに仕上がっている。
端的に言えば ask.fm をアバターシステムに落とし込んで質問を固定にしたカンジ。

続きを読む

情報開示とコンテンツ更新

https://www.youtube.com/watch?v=-ZE9YTsbaBA
ハースストーンのゲームデザイナーがこんな動画を上げていたのを見て、最近思う所も色々あったので今日はこんな話題。大体言いたいことは言われていたりするんだけども。

まず大前提

全ての情報は、適切なタイミングで明かされる必要がある。
我々が作っているのは娯楽で、娯楽の価値はいかに人を楽しませたかで決まる。初めてそれに触れた人をどれだけ「良い意味で驚かせられるか」は、極めて重要な要素だ。


もし、ゲームの全ての情報、あらすじやラスボス、最強の必殺技までを発売前に開示してしまえば、例えそのゲームが体験に重きを置くアクションゲームだったとしても、プレイヤーが感じるカタルシスはほぼ皆無になるだろう。
だから、本当は何もかも隠しておきたいのだが、そうも行かない。存在しない情報に興味を惹かれる人はいないからだ。このゲームが面白そうだ、これをプレイしたい、グラフィックが綺麗、そういう話題を引き出して、盛り上げなければ、数多のゲーム・プールの中で自分のゲームをわざわざ選んでくれる人は皆無だろう*1


情報を出して広告するという行為は、ゲームそのものの面白さを少しだけ削り、それを大衆の興味に変換する、捨て身の作戦である。だから、それはもっとも効果的な方法とタイミングで行われるべきであり、ゲームデザイナーは(個人開発なら特に)常にそれに気を配らなければならないのである。

*1:そう、偶然話題になった「良い物」より、話題にもならず消えて行った「良い物」のほうがずっと多いのだ。

続きを読む