Game制作

Unityなどを用いたGame制作

矢上祭とSwitch

チョコです.

矢上祭,お疲れさまでした.

今年もぴょんぴょん(+)人気だったな,,,,思った以上に「面白い」,「ハマる」って感想いただけてすごくうれしかったです.

 

さて,ぴょんぴょんですが,去年のゲームジャムで3日で作ったにして結構人気があったシューティングゲーム.今年用に二人プレイできるようにしたのと,かわいいかわいいKCSちゃんモードを入れました.

3

図1:ぴょんぴょん+の宣伝図(宣伝してない)

このゲームを毎年プロジェクターを使って大画面でやるのが恒例なのですが,KCSは Oculusを買う金はあるのに 同じコントローラーを二つも持っていません.ではここで,「試しにNintendo SwitchさまのJoyconを使ってはどう」という発想に至ったわけです.

さっそくSwitchを借りて,やってみよう!と思ったわけですが,ここでとても重要な2ポイントがあります.

1.PCにはBluetoothで通信できる

2.UnityはJoyconをコントローラーとして認識できる

まさに神.2秒で移植できるじゃん.(1日かかりました)

(1ですが,Joyconの上にある小さいボタンを長押ししながらpairingをしないと認識できません.)

とりあえず,ボタンを軸登録することですね.なお,キーボードででも同じ操作ができるように,以下のような入力ラッパーを書きました.

public static bool jbt(int i, int j) {
    return Input.GetKey("joystick " + i.ToString() + " button " + j.ToString());
}
public static bool jump(int i) {
    return Input.GetKey("space") || jbt(i, 4);
}

リスト1:InputManager.csの一部

ボタンのIDはこんな感じですね.

httrhgtrh

図2:JoyconのボタンID

Bluetoothの登録順でjoystick 1, joystick 2, …で決まりますね.つまり,複数台Switch持ってれば(ry

 

最後に,Input.GetButtonDown(“Jump”)を全部InputManager.jumpに変えるだけですね.

 

あ,そう.あとは一人プレイ用に書いたガバスクリプトを二人プレイにしたときに発生したバグの塊を解消する作業ですね...

 

来年も出したいな,,,(卒業しなくていいの?)

完.

UnityでのDeferred Celシェーディング

どうも,チョコです.院試おつ↓かれ↑ーい.

いつものUnityでのCelシェーディングをやっていました.しかし,シェーダを全部Cel式に変えるのはめんどい.そしてunlit shaderで照明を扱うのはどうも釈然としない.そこで,Deferredでなんとかならない?と思ったわけです.

UnityではDeferredの内部シェーダを変えられるようになっています.このように.

(Edit->Project Settings->Graphics)

Screenshot (13)

ここに自分のシェーダを突っ込めば,カメラの出力を制御できるというわけですね.

さて,これをやるにはまずbuiltin_shadersアセットをダウンロードしないといけない(ダウンロードページにあります).そして,Internal-DeferredShading.shaderを見つけます.

シェーダを中を見ると,おっと,この部分は画面に色を吐いているなと,読めばわかると思います.

half4 CalculateLight (unity_v2f_deferred i)
{
    ...
    half4 res = UNITY_BRDF_PBS (data.diffuseColor, data.specularColor, oneMinusReflectivity, data.smoothness, data.normalWorld, -eyeVec, light, ind);
    return res;
}

なるほど.つまり,ここの戻り値を変えればいいと.さて,Celシェーディングでやりたいことを確認しましょう.

deftoon

図の通り,まずは白の材質に対しての照明を得て(1),そしてCel風のカーブにし(2),最後にDiffuseを適用(3)すればいいです.上のコードを書き換えましょう.

uniform float _deferred_cutoff;
uniform float _deferred_shade;
uniform float _deferred_saturate;
half4 CalculateLight (unity_v2f_deferred i)
{
    ...
    half4 inten = UNITY_BRDF_PBS (half3(1,1,1), half3(0, 0, 0), 1, 0.5, data.normalWorld, -eyeVec, light, ind);
    float brg = clamp(ceil(inten.r - _deferred_cutoff), 0, 1);
    float shd = 1-((1-_deferred_shade) * (1-data.smoothness));
    return half4(saturate(data.diffuseColor * (brg * (1-shd) + shd), 1 + _deferred_saturate - (_deferred_saturate) * brg), 1);
}

(デフォルトシェーダの仕組みはどこにも書いていないので,関数の意味などはCGIncludesの中身を自分で読まないといけませんね)

はい.ここで,UNITY_BRDF_PBS は(1)なので,それを(2)にしたのがbrgとなって,最後にdata.diffuseColorを適用しました(3).

最後に,Inspectorでデフォルトのシェーダを変えよう.そしたら(エラーがなければ)オブジェクトのマテリアルを一切触っていないのにカメラの出力が変わります.

Screenshot (12)

これで1つのシェーダでアニメ風にできますね.スタイル変換捗りー.

(実はこの方法は,照明ごとに行われるので,光が重なるととても明るくなります.解決したらパーツ2の記事にします)

では.

unityで外部テキストをC#コードとして読み込む

こんにちは。mo-takusanです。

今まではほとんど記事を書いてこなかったのですが、さすがにそろそろ投稿していこうと思います。

unityで外部コードを読み込むには…

最近とある事情でコンパイル後に外部ソースコードを読み込みたい、という場面がありました。

「あああ、Python書くかぁ」

となっていたのですが、念のため調べると、C#はコンパイル言語ですが、ランタイムでコンパイルができるようです。C#神!!やっぱり.NET最強!!!

ただし、untiyとの相性が悪いものが多く、四苦八苦してしたので、紆余曲折の様子を記事にしていきます。

なお、本記事で使用したunityのバージョンは2017.1.1f1です。

まずはできた方法を、、

まあ、とにかく知りたいのは実際にうまくいったやり方でしょう(需要があれば)から、その方法から話していきます。

なんだかんだとググっていくうちに以下のGitHubにたどり着きました。

https://github.com/aeroson/mcs-ICodeCompiler

このサイトを見たとき、ついに来た!最終コミットもそれなりに新しいしこれはいけるやろ!と思ったのですが、ここからが長かった…(unityのバージョンを合わせればよかったとかそういうツッコミはなしでお願いします、、、)

2018-02-07_23h38_41

早速クローンしてサンプルプロジェクトを開いてみると…

2018-02-07_23h42_07

地獄絵図…。unityはICodeCompilerやCompilerResultsが存在していないと主張してくるのですが、

https://msdn.microsoft.com/ja-jp/library/system.codedom.compiler.icodecompiler(v=vs.110).aspx

https://msdn.microsoft.com/ja-jp/library/system.codedom.compiler.compilerresults(v=vs.110).aspx

のように、System.CodeDom.Compiler名前空間には確かに存在しています。実際コードの方でもusingされており問題はなさそうです。やけくそで丁寧に書き直してみても全然ダメ…

2018-02-07_23h45_47

うーーーん。

これについては解決方法が全く分かりませんでした。ので、ダメもとで一緒にクローンしてきた「non Unity3D usage」のコードを新規プロジェクトに入れてみました。dllはPluginsに入れることを忘れずに…

2018-02-08_00h03_29

おや?エラーが出ない!
やった…やったよ、、おれ、ついにやってのけたよ…
そうするとデモが動かなかった理由がいよいよ謎ですね。

それはともかくとして、あとは適切にファイルを読み込むコードを書いて、、、

 private static Assembly Compile(IEnumerable&lt;FileInfo&gt; files)<br />
 {<br />
     var domain = AppDomain.CurrentDomain;<br />
     var references = domain.GetAssemblies().Select(a =&gt; a.Location).ToArray();<br />
     var options = new CompilerParameters<br />
     {<br />
         GenerateExecutable = false,<br />
         GenerateInMemory = true,<br />
     };<br />
     options.ReferencedAssemblies.AddRange(references);<br />
     var compiler = new CodeCompiler();<br />
     var result = compiler.CompileAssemblyFromFileBatch(options, files.Select(f =&gt; f.FullName).ToArray());<br />
     return result.Errors.Count &gt; 0 ? null : result.CompiledAssembly;<br />
 }

完成しました!!!
なお、こちらのプロジェクトは諸事情で公開していないのであしからず。

ここからはできなかったことを書くぞ!

と言いましたが、疲れたので失敗の様子はダイジェストでどうぞ

System.CodeDom.Compilerを素で使う

なぜかコンパイルすると動かない(unityではよくある泣)

AssetStoreからダウンロード

https://assetstore.unity.com/packages/tools/cs-script-for-unity-23510

このページにいい感じのアセットがあったのでダウンロード。が、だめ。(古かった)

Roslynを使う

unityが.NET4.6に対応したことを利用して、次のサイトを参考にして組んでみよう!

https://www.gaprot.jp/pickup/tips/roslyn

unityが反応してくれない!おい!!nugetからdll落としてPluginsに入れてもダメでした。(むしろそれ以外を知りませんが)

脱出ゲーム(新歓バージョン)近日公開予定!(追記あり)

(2017/4/2追記) 以下にて公開開始しました!(PCブラウザのみ対応) https://kcs1959.jp/dassyutsu2017

こんにちは、GMAです。

近日以下のゲームを公開予定です。

KCS新歓用
※画像は開発中の画面です

なんとなく見覚えのある方は鋭いですね。このゲームは2015年度の三田祭の為に作られた3D脱出ゲームです。昨年UnityがWebGL書き出しに対応し、そろそろホームページにもゲームをアップしたいなと考えていたので、新歓期に合わせてこのゲームを公開することとなりました。

ただ、折角の新歓ですので、オリジナル版にあった通常モードに加えて、今回新たな新歓特別モードを追加しました!このモードは、

  • KCSにちなんだ完全新作の謎解きが楽しめる!
  • KCSや慶應大学に関する様々な豆知識が学べる!
  • 遊ぶときっとKCSに入りたくなる!

という新歓期にとてもぴったりなモードです!

新モードの追加以外にもグラフィックのリファインや操作の改良など、2015年版から様々な箇所に手を加えていますので、遊んだことがある方も無い方も是非挑戦してみてくださいね!なお、このゲームはこのページやトップページに公開予定です。

それでは。

ホラーゲーム作ります:テクスチャ・演出・D言語くん

バイオ7出ました。素晴らしくて泣いた。決して怖くて泣いたのではありません。

せっかくなので試しにホラーゲーム作ってみたい。ホラーゲームも一人称ゲームも作ったことないし。

早速モデル作りました。こんな感じです(Blender内です)
asdfasdf

これどっかで見たような。。って思ったあなた、友達になってください。
(がっこうぐらしですねはい)

でもこれテクスチャがないとあまり怖くないですね。SubstancePainterに移りましょう。(ここから宣伝)

まず古い校舎感を出すために、「Coarse cement」のレイヤーに「Fine cement」をかけて、マスクで削る壁を演出した。さらにその上にほこりを載せる。

Screenshot (683)

おお、いい感じ。(これにはあらかじめ分割したモデルをベースにノーマルなどをベークした(例の椅子のヤツです))

では、ちょっと血を入れます。物理エンジン(?!)が使えるので、HeavyLeakingやBurn効果(Diffuse色やSpecular, Glossinessをいじったもの)を使ってみよう。

血はDiffuse #770000 Specular #ff6666 Glossiness 0.3かな(だいたい)。旧い血痕はSpecular低めで。

particles

グロ。でも好き。

さて、これをUnityにエクスポートしよう。Export Textures押すとUnityのStandard Materialがすぐ使えるDiffuse, Specular, Normal, Height, Occlusionマップが生成される。これを適用してみよう。

普通の照明じゃ面白くないので、カメラについているSpotlightで照らそう。

Screenshot (727)

怖い怖いちょっと待ていい雰囲気じゃねぇか。ほんとのホラーゲームっぽいぞ。(ホラーゲームです)

 

他のアセット:

1.KCSxUnity本

Screenshot (693)

2.D言語くん Screenshot (719)

↑Sketchfabはいいぞ。

この感じでアセットを作ると超便利で速い!

 

(ネタばれしたら実際のプレイも怖くなくなるので、他のシーンのものは見せられません。お楽しみに。)

では。

Virtuleap WebVR Hackathonに出た話

こんにちは.Kishiです.

2017年になりましたね.昨年はVR元年と言われていましたが,今年のVRは果たしてどうなるのでしょう.

自分は,これからのVRでは他者とのインタラクションという部分も発展していくと考えています.FacebookがSocial VRというものを推し進めていますが,これがもっと自然な形になれば普及する可能性はあると思います.

ここで,現在発展途上のVRの分野にWebVRというものがあります.これを使えば,上に述べたようなVRができるのではないかと思い,2月1日まで開催されているVirtuleap主催のWebVR Hackathonに参加しました.

現在VRの開発環境としてはUnityやUnreal Engineが有名ですが,どちらも今のところWebVRには対応していません.ですから,今回はThree.jsとWebVR Boilerplateを使ってWebVRを実現しました.また,A-Frameも有名ですが,今回は使いませんでした.

自分は他者とともに同じ空間でVRをやりたかったので,マルチプレイ機能を実装することになりました.このためにNode.jsでSocket.IOを使いました.

こうしてできたのが, SphereBlast です.手軽にプレイできるように,Cardboardがあれば誰でもアクセスするだけでできるようになっています.具体的な内容としては,各プレイヤーは球状の乗り物に乗っており,迷宮,山,城を散策できるというものです.山には拾って渡すことのできる星が落ちていたり,城には逃げる鳥がいたりします.

ハッカソンの結果としては,ダメでした.やはり同時にプレイする人のいるほどにぎわっておらず,それに今回のハッカソンではHTC Viveなどの最新機器を持っていることが前提のような作品が多く,趣旨もそのようでした.とはいっても,Node.jsを使ったのも今回が初めてでしたし,いろいろ良い経験になったと思います.そういうことにします.

thumbnail_sphereblast

Unityを拡張しよう!#2: 表面分割アルゴリズムの実装(Part 1)

どうも、チョコです。あけましておめでとうございます。

さて、今年初の記事です。わーい。
(もともと去年に完成させたいものですが、バグが出てきてそのまま年越えましたorz)

さて、今回は”Catmull-Clark 表面分割をUnityで使いたい!”と思ったので作ってみました。はいストップ。Catmull-Clarkは何ぞや。説明します。
Catmull-Clark Subdivision Surfaceとは、とあるメッシュを分割し、比較的に滑らかな四角ポリゴンからできたメッシュにするアルゴリズムです。

ニホンゴデハナシテ。

見ていただいた方が早いので、↓の通りピラミッド、キューブとn角はてなメッシュを表面分割させました。

screenshot-426

あらきれい。滑らかになってますね。
ちなみにBlenderではこのようにModifierを追加することで表面分割させられます。

screenshot-428

Catmull-Clark出てきましたね。

では、これをUnityに入れたいと思います。ちょっとまて。なんで入れるのかな。Blenderではもうこの機能ついてるのに??

答え:>>>アニメーションのためです!ボーンを付けてアニメーションさせたところ、Modifierは全部消されてしまいますボーンModifierの前に適用されます。じゃあそもそもボーンの後に表面分割する必要ある?って思ったあなたへ、下の図をご覧ください。

screenshot-434

足ですね。曲がるところに頂点がないことを確認してください。
でもちょっと頂点数少ないので、表面分割しましょう。

screenshot-422

円滑になりました。でも左の方はなんか不自然ですね。これは分割してからボーンを付けたせいですね。曲がるところに頂点が入ってしまいますので、これを2本のボーンだけでは数学的には右のような形にはできません。説明略。
右のほうを見ると頂点は全く同じで、ただボーンと分割の順番を逆にしただけできれいになります!!

疲れた。まだ本文に入っていない。まだちょっとありますので我慢してください。

では、このアルゴリズムをUnityに入れ(たいと思い)ます。Catmull-ClarkのWikipediaページをご覧いただくと、頂点の関係式は中学レベル以下ですね。記事書く必要ある??って思うかもしれません。こんなの3秒で書いてやる!とか、思いましたか?私か思いました。orz

さて問題:よく読むと、このアルゴリズムはN角形に対応しています。そこでUnityは、なんと、三角形(時には四角形)しかできないのです!!!

それだけではありません。メッシュを分割させるために、ボーンに変形された頂点位置が欲しいが、これも、なんと、シェーダー側でしか手に入れられないのです!!!(実はBakeMesh()関数もありますが、indexなどがめちゃくちゃかつ遅いのでやめました。)

ち。面倒なことになってきましたね。そもそも面のデータが取れないのに、どうやって実装するんだ。

あれあれ、この前も記事書きましたよ?この記事#2ですから、#1はどういう内容かな。
それはなんと、Unityにimportされないデータを読み取れるエディタースクリプトでした!!!!!パチパチパチ。
リンク張っておきます。

(ここからが実装の本文になりますが、正直いちいち説明するのがめんどいので手順だけ紹介します。詳しく知りたい人はGithubページへ)

まず、1で作ったスクリプトをEditorで呼ぶことにしました。.netでBlenderのexeを見つけて、それにアセットを入れて、同じフォルダーにデータを出力させました。こんな感じです。(.blend)の隣のn++ファイルが出力ファイル。

screenshot-429

これで面のデータが取れますので、これを表面分割アルゴリズムに突っ込みます。中学レベルの数学なので省略。
*ここでは、頂点を生成するアルゴリズムを実行しました。この関数はStart時点に一回だけ実行したいので、頂点関係をあらかじめバッファーに入れました。データ構造以下のようです。

screenshot-430

次に、変形された頂点の位置を読み込み、関係式に突っ込みたい。あれ、データが入手できない。ち。

シェーダーを使うしかないですね。では、どうやってシェーダーから頂点データを出力すればいいんだ?

やり方は2通りあります。テクスチャに書き込むか、ComputeBufferを使います。

テクスチャ使ったら、まあそれは簡単になりますし、一般のパソコンでも動くでしょうけど、分割したいメッシュ1体につき、カメラが一個増えます!!
仕方ない。ComputeBufferを使います。

待てよ、ComputeBufferつうのは、シェーダー語のRWStructuredBufferなので、行列のindexはどうするんだ??
indexは頂点のindexと同じなので、シェーダーが今レンダ―している頂点のindexを分かればよいのです!。。。どう渡すんだ?

答え:>>>UVマップを使います!!そもそも最終的にオリジナルメッシュは見えないので、UVを使っても問題ない!!

というわけでシェーダーはこんな風になります。

screenshot-431

さすがに長すぎますので、Part 2に続きます!戻ってくるぜ。

DragonDusk コミケに出すVRゲーム

こんにちは.Kishiです.

KCSは木曜日 西地区“み”ブロック-34a に配置されました.

そのため,最近はコミケ向けの活動が多くなっています.周りを見ると,新刊本「KCS Tips!」の執筆が着々と進んでいて,みんな頑張っているなぁ…と思っておりました.ここで改めてKCSの出品する内容を見てみると,なんとソフトウェア「KCS-SOFTWARE!」も出すんですね.そういえば,自分も何かVR出すよ,と言っていたような…(˘ω˘)

はい.早急に取り掛かりました.まるでゲームジャムをやっているようでしたが,完成しましたので下に動画を載せておきます.

VR空間内では移動や攻撃が難しい課題です.最近はコントローラのあるVRも増えてきましたが,Cardboardの場合はなかなか厳しいです.そこで,それならば移動も攻撃も他人任せにしてしまおうということで,すべてドラゴンに任せました.自分のすることは,ドラゴンの攻撃対象を目線で指示してあげるだけです.3Dモデルはすべて昨年のVSGで使われた,サークル内で制作されたものです.(音楽はKCS音楽班のものではなく,VSGと同様にこちらを使わせていただきました)このゲームはAndroid専用でかつCardboardが必要ですのでご注意ください.

2016/12/27追記・・・Oculus Rift DK2用のものも用意しました.Unity 5.5からDK2向けビルドのできる5.3に下げるのが大変でした.

「KCS-SOFTWARE!」にはこの他にも,

・研究映像

・イラスト(原画,制作の流れ付き)

・暗〇ゲーム(PC向け)

・Conway’s Game of Life(ブラウザで動作)

・3Dモデル(4体)

が含まれておりますので,KCSのブースに来ていただきましたらぜひご購入ください.

新刊本「KCS Tips!」もよろしくお願いします.

 

Unityを拡張しよう!#1: .Blendファイルを使いこなそう!

どうも、チョコです。

Unityで「これやりたい!」って思ったとき、機能不足でできないこと多いよね。拡張(エディタースクリプト)を書けばいいんだけど、そもそもアセットで使えるデータが限られているからできない。。。なんて思ったことあるかな。

今回はBlenderファイルをUnityで開いて、普通じゃ手に入れられない情報を抽出してみよう!

**この文書を読むにはUnity、C#、Pythonと英語(?)の前提知識が必要です。

Blenderを背景で開く

Blendファイルを読み取るためには、ユーザーが(当然ながら)Blenderを持っていないとできないので、まずBlenderの居場所を確認する。Windowsの場合は、RegistryEditorのSOFTWAREMicrosoftWindowsCurrentVersionUninstallキーにあります。

**注意:RegistryEditorをいじる時に注意してください。変なものいじったりしまうとOSが動かなくなる場合があります。

このキーの中にはすべてインストールされたプログラムが入っているので、Blenderのキーの存在を確認します。

screenshot-246

あった。ではここからBlender.exeの場所を出そう。

<br />
using (RegistryKey key = Registry.LocalMachine.OpenSubKey (registry_key)) {<br />
    foreach (string s in key.GetSubKeyNames()) {<br />
        using (RegistryKey key2 = key.OpenSubKey(s)) {<br />
            if ((string)key2.GetValue(&quot;DisplayName&quot;, &quot;&quot;) == &quot;Blender&quot;)<br />
                location = (string)key2.GetValue(&quot;InstallLocation&quot;, &quot;&quot;) + &quot;Blender.exe&quot;;<br />
         //なんかする<br />
        }<br />
    }<br />
}<br />

**細かい説明は省略させていただきます。(レポートまだ書いてないorz

BlenderでPythonスクリプトを実行

Blenderは、アッドオンやTextEditorでPythonスクリプトを実行し、シーン内のデータを編集したりできます。これを活かしてみよう。具体的には、Pythonを実行し、Unityのアセットフォルダになんか書き込もう。

まず、「System.Diagnostics.ProcessでBlenderを起動し、Pythonを実行して、自動で閉じる」のを背景でやってもらおう。Blender APIに書いてある通り–backgroundコマンドを送ります。
fileはアセットの中の.Blendのパス(例えば、F:/MyProject/Assets/Hoge.blend)。
**以下のコードはエディタースクリプトに入れます。やり方省略

<br />
Process.Start (location, file + &quot; &#8211;background&quot;);<br />

これでBlenderは背景起動された。コマンドみたいなものが起動されますね。

では、Pythonスクリプトを実行しよう。まずはこのスクリプトを実行してみよう。

<br />
Process.Start (location, file + &quot; &#8211;background &#8211;python &quot; + Application.dataPath + &quot;/Editor/hoge.py&quot;);<br />

そして、エディターフォルダに以下のhoge.pyを入れよう。

<br />
import bpy<br />
import sys<br />
class Hoge():<br />
 def execute(self):<br />
   print (&quot;hi&quot;)</p>
<p>if __name__ == &quot;__main__&quot;:<br />
 Hoge().execute()<br />

コマンドにhiが表示されたら勝ち。

次に、pythonスクリプトにパラメータを送ろう。 — のつぎに来るものがコマンドとしてパースされないので、pythonに使えばいいね。例えば、今のアセットフォルダの位置を渡してみよう。

<br />
Process.Start (location, file + &quot; &#8211;background &#8211;python &quot; + Application.dataPath + &quot;/Editor/ExportSS.py&quot; + &quot; &#8212; &quot; + new DirectoryInfo(file).Parent.FullName);<br />

**Python側では、sys.argv[sys.argv.index(“–“) + 1:]でパラメータ行列を取れます。

さて意味のあるものができるようになった。できることはさまざまあるが、例としてシーン内の「メッシュではないオブジェクト」の名前を出力してみよう。自明のコードは省略。

<br />
args = sys.argv[sys.argv.index(&quot;&#8211;&quot;) + 1:] #パラメータを取る<br />
scene = bpy.context.scene<br />
obj = bpy.context.active_object<br />
dir = args[0]<br />
name = args[1]</p>
<p>def execute(self):<br />
    if os.access(self.path, os.W_OK) is False:<br />
        print(&quot;permission denied : &quot; + self.dir)<br />
    return False<br />
    self.path = os.path.join(self.dir, self.name + &quot;.txt&quot;)<br />
    print (&quot;writing to: &quot; + self.path)</p>
<p>    with open(self.path, &quot;wb&quot;) as file:<br />
    for obj in self.scene.objects:<br />
        if obj.type != &#8216;MESH&#8217;:<br />
            self.write(file, obj.name + &quot;rn&quot;)<br />
    sys.exit() #自殺</p>
<p>def write (self, file, _str):<br />
    file.write(_str.encode())<br />

すると、.Blendファイルと同じ名前の.txtファイルができます。

以上、拡張機能でした。なんかやりたいときに使えるとうれしい。
では。

Oculus Rift DK2で使えるコントローラを作ってVR音ゲー作り

お久しぶりです.Kishiです.

一切誰も記事内で触れていませんが,KCSは三田祭に出展します.それに向けたチーム制作も複数動いています.やはり,記事にしないと外部に伝わらないので,それぞれのチームに記事を書いてもらおうかな….

さて,KCSはVR,Virtual Realityにも力を入れています.昨年はOculus Rift DK2を購入してこれを三田祭でのゲーム制作に利用したところ,非常に好評でした.(→VSG

最近の世の中を見ると,HTC ViveやOculus Rift CV1,PlayStation VRが出てきてVR業界は非常に盛り上がっています.KCSは昨年DK2を買ったばかりなので今年の三田祭には昨年同様DK2を用いることになりましたが,ここであることに気づきます.

コントローラがない…!

ナウいVRには皆,VR空間に直接干渉できるコントローラがあります.しかし,DK2にはありません.

そこで,一切のお金を掛けずにコントローラを作ってみました.正確には,昨年サークルで購入したWebカメラと色のついた紙とマスキングテープと労力で作りました.

dk2-controller2

dk2-controller4

簡単に説明すると,色認識をしてコントローラの位置を把握し,これとVR空間内の物体をリンクさせています.(簡単に説明も何もそもそも簡単な原理だった.)

これを使って音ゲーを作りました.音楽はKCSの音楽班が提供してくれました.ありがとうございます.

今年は他にも多くのVRゲームが展示されます.もちろん,VRでないゲームや,KCSの技術力の詰まった(自分には全く理解できない)展示もあります.ぜひお越しください!