ActionScript 3.0 , AIR , FLEXからCocoa, OpenGL
24 Dec
このエントリはOpenNI Advent Calendar 2011 : ATNDの12月24日分です!!

最近話題になっている、ゲームの開発環境のUnity3Dというものがあり、OpenNIのサイトからUnity3Dで使うためのUnityWrapperをダウンロードできます。

Unity3D ( http://unity3d.com/unity/ ) とはゲーム開発ツールであり、WindowsとMacのどちらでも開発する事が可能です。
IDEがあるのでステージの画面を見ながら次々とオブジェクトを配置するだけでゲームの世界を簡単に作る事ができます。
プログラムはJavascriptとC#(mono)で書く事ができるのでweb開発者や.NETの開発者にも取っ付きやすいのではないでしょうか。
MacでもC#で記述する事ができます。
また、一人でグラフィックやサウンドやモデリング、プログラムを行うのは大変ですが、Unity3DではAsset Storeというものが用意されており、これを利用する事で必要な素材を入手する事ができるので気軽にゲーム開発を進める事ができます。
無料版と有料版があり、無料版では制限はいくつかありますが、WindowsとMacで実行できますし、有料版にアップグレードする事でAndroidやiOSに対応させる事も可能です。
詳しいライセンスなどはUnity3Dのサイト( http://unity3d.com/unity/licenses )か、「強火で進め」さまのサイトが詳しいです。( http://d.hatena.ne.jp/nakamura001/20110710/1310292561 )
それでは、Unityをダウンロードしましょう。
http://unity3d.com/unity/download/より、Unityをダウンロードし、流れに沿ってインストールしてください。
インストール後、先ほどOpenNIのサイトからダウンロードしたファイル(Unity OpenNI toolkit 0.9.7.1.unitypackage )をダブルクリックしImport Packageより一式をunityにインポートします。
importが完了すると、Projectタブにこのようなファイル群が表示されます。

OpenNI/Sample Scenes以下にすぐに試せるようなサンプルシーンが入っていますのでダブルクリックしてシーンを開き、三角の再生ボタンを押して次々と試してみるとUnity3D+OpenNIの可能性を試せると思います。

私はライブなどで使ったりしていますが、骨格をちゃんと映していれば問題なく現場でも使えます。今のUnityWrapperだと全身映す前提のコードになっているので、上半身だけ認識などに変更する事でより柔軟なアプリケーションが開発できます。
ではそれぞれのサンプルのキャプチャやサンプル動画をのせておきます。
せっかくなのでスケルトンをサンタにかえてみましたよ。サンタ気分で小さく踊ってみました。
あ、サンタのデータはAsset Storeで購入可能ですよ!
※この記事は、下記の環境で確認しました。
| OpenNI | 1.5.2.7 |
| NITE | 1.5.2.7 |
| Unity3D | 3.4.2f3 |
11 Aug
なんと今回はC#あるいはWPFについてです。
自分があまりにも物事を忘れやすいことを反省して、忘れないようにするためのタスク管理アプリを作りました。
その時にListBoxで困ったのでメモ。
やりたい事は、ListBoxのItemsSourceに自分で作成したクラスのプロパティのコレクションを適用させる、ということ。
Window1.xamlの一部
ListBoxの定義:
<ListBox x:Name="dataList" ItemTemplate="{StaticResource listTemplate}"/>
DataTemplateの定義(TodoEntityというのが自分で定義したエンティティクラスです。):
<DataTemplate x:Key="listTemplate" DataType="{x:Type local:TodoEntity}">
<Grid ToolTip="{Binding Path=DescriptionValue}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Column="0">
<TextBlock Text="件名:"/>
<TextBlock x:Name="subject_tb" Text="{Binding Path=SubjectValue}" />
</StackPanel>
<StackPanel Margin="10,0,0,0" Orientation="Horizontal" Grid.Column="1">
<TextBlock Text="概要:"/>
<TextBlock Text="{Binding Path=DescriptionValue}"/>
</StackPanel>
</Grid>
</DataTemplate>
で、これがエンティティクラスのTodoEntity
/// <summary>
/// 終了しているか。
/// 1: 終了
/// 0: 未
/// </summary>
public int isFinished;
/// <summary>
/// 件名
/// </summary>
public string subject;
/// <summary>
/// 詳細
/// </summary>
public string description;
/// <summary>
/// 登録時間
/// </summary>
public DateTime registerDateTime;
#region アクセサ。なぜかこうしないとデータバインドしなかった.
public string SubjectValue
{
get
{
return subject;
}
set
{
subject = value;
}
}
public string DescriptionValue
{
get
{
return description;
}
set
{
description = value;
}
}
#endregion
DataTemplateにTodoEntityのsubjectプロパティを表示させたかったのですが、なぜか表示できなくて困ってたのですが、#regionに書いているようにアクセサ(SubjectValue, DescriptionValue)を作ってそれにバインドさせてやると、無事にデータが表示されました。
これなんでだろう。。。
あ、コードの書き方が統一されてなくてすみません。。。
アプリは見栄えがもう少しまともにできたらアップしますね。