UnityでOculus Touchを使うメモ ~ものを掴む編~
かずまです。
ようやく卒業の方が落ち着いてきたのでOculusの開発メモを残しておきたいと思います。
今回はTouchでものをつかむという部分をメモっておきます。
結構基本的なことですがSteamとはちょっと仕様が違いますので書いておこうと思います。
Touch
Oculus Touch#oculusすごい#卒論終わり次第#開発する#VR
これがOculus Touchです。
めっちゃいい。ボタンとかにもセンサーがついてて、指がどのボタンを触れているか、みたいなのを検知できます。
すごい!
ちょっと発売から遅れましたのですでにTouchの記事はいっぱいあるかも。。。
Oculus SDKを入れる
参考にしたサイトはこちら
いやーk0rinさんのブログは毎回助かる...。
Steam VRの時もお世話になりました。
ここを参考にOculus SDKをOculus Developerサイトから落としてきて入れます。
サンプルシーンを可変していく
Assets/OvrAvater/Samples/Controllers/Controller.unity
を開きます。
今回はこのシーンをいじっていきます。
ものをつかんでみる
ほんとは手の形にあわせた持ち方というのを提案したかったのですがちょっと実装不足。
Touchを表す位置は
OVRCameraRig/TrackingSpace/LeftHandAnchor
OVRCameraRig/TrackingSpace/RightHandAnchor
にあります。
ここにColliderとかスクリプトを追加していきます。
まずはRight,LeftHandAnchorの子としてhavePointを作ります。
次にSphereのColliderのisTriggerをtrueにします。
次にLeftHandAnchorにOVRHand.csというスクリプトを作って貼り付けます。
OVRInputはどこでも呼べる!
UnityのInputのようにどこでも呼べるのは便利ですね。
Steamだと少し面倒だった気がする...。
enumを使ってどっちの手かを認識させる
もっといい方法ありそうですが、
Triggerを引いたときにRightかLeftを指定しないといけません。
if (OVRInput.GetUp (OVRInput.RawButton.RHandTrigger)) { // RightControllerのトリガーを引いた }
あとはControllerのVelocityをとるときにどっちのコントローラーかを書く必要があります。
しかし、面倒なのでpublicのenumでInspectorでRightかLeftを選択できるようにします。
Awake()内でそれに合わせて(OVRInput.RawButton)RHandTriggerやLHandTriggerをセットします。
これで面倒はなくなります。
Oculus TouchのVelocity
OVRInput.GetLocalControllerVelocity(/* どっちのコントローラーかを記述 */);
これで取れます。
つかみたいオブジェクトの設定
2つ設定があります。
tagを"holdable"に設定します
Rigidbodyを付ける
これで再生すればできるはずです!
指とオブジェクトとかぶちゃってるのでほんとはつかんでる感じにしたいのですが...。
それは次回ですかね。
今回はこんな感じです。
第3回 技術的ログ Twitterから
かずまです。
今回もファボがたまったのでやります!
過去はこちら!
blog.kazumalab.com
知らない間のホロレンズブーム
Tohoku #HoloLens meetup 前半ハンズオン始まったよ!
— takesenit (@takesenit) 2017年2月11日
前本さんの赤シャツが目立ち過ぎ。#HoloLensJP #ThMCN #TMCN pic.twitter.com/6o7Slvo9bq
ホロレンズが今熱い!(持ってないけど...)
MBSでハッカソン
ハッカソンのアイスブレイクで「うろ覚えお絵かき」って面白そう♪
— TakashiJona - SKB08 (@takashijona) 2017年2月11日
知ってることを絵だけで表現って難しくても見せ合うと盛り上がれそう#mbshack #ma_2017 pic.twitter.com/TXZlnddNvJ
今週土日に本ハッカソンがあるらしい。
行きたい!!!(交通費&引っ越し!)
A-Frameの更新
A-Frame ✋v0.5.0! New core features (text, glTF), bug fixes (incl. WebVR polyfill), preview of motion capture tools. https://t.co/Mb3pobemCi pic.twitter.com/yWO47TJMqB
— A-Frame (@aframevr) 2017年2月10日
sinariovr.com
このサイトではA-Frame 0.3.0だった....もうバージョン2個上がってる。すごい。
きのこモデル
新キノコリグできました(一瞬)#Blender pic.twitter.com/ixMXTulbEW
— なん (うまい棒SDiv6) (@tarava777) 2017年2月9日
関ゲ部にはキノコさんという方がいるらしい。
前回行ったときは会えなかったので次回トライしたい。
なんかすごい2Dアクション
後輩さんが開発中の2DアクションRPGのキャラクター選択画面動画です。非常にアニメーションが生きている期待作です!日本を含めた海外パブリッシングも考えておりますので、もし興味ある方は気軽く声をかけてください!私が責任持って紹介します(^_-)-☆ pic.twitter.com/895o70Sz4y
— Kyunghun.lee(キョウウン) (@KyunghunL) 2017年2月9日
カメラワークが独特で面白い!
あと絵もきれいだし、表現力すごい。
Hololensのアプリ
HoloLensの発音力をトレーニングできるMRゲーム「ENGLISH BIRD」がWIndowsStoreで公開されました!Storeで「ENGLISH」と検索すればでてきます! #HoloLens @HoloLens pic.twitter.com/yuzvVP1YVY
— のしぷ (@noshipu) 2017年2月8日
これなら英語バッチリ!
痩せる方かと思ったら完全なる技術ログだった
docker-slimによるImageの簡単ダイエット - 技術備忘記 https://t.co/fcwnWut7XC
— キリン (@pinakun1112) 2017年2月8日
....ノーコメントで!!
unity エフェクト
【Unity道場】エフェクト実践編 // Speaker Deckhttps://t.co/LZAVW2pXij 凄い濃い内容だった。お金取れるレベルだ
— nakamura001 (@nakamura001) 2017年2月7日
UMLをテキストで書く
テキストでUML描けるの便利
— いしたー (@sonicair) 2017年2月5日
stackedit.io pic.twitter.com/wJ9IDhY9lj
意外とこういうの便利。
技術ログではないけど沖縄ギークハウスのクラウドファウンディングが181万円!
ギークハウス沖縄のクラウドファウンディング、181万1000円で終了!!!みなさまありがとうございました!!!😭😭😭 pic.twitter.com/TWZLUgGlWC
— さぼ (@saboyutaka) 2017年1月30日
すごい!!これから楽しみ!
手書き数式をLatexに...これは便利でした。
手書きの数式をLaTeXに変換してくれるサービスらしいhttps://t.co/M1exzK3490 pic.twitter.com/ema3zfw1YJ
— GOROman (@GOROman) 2017年2月2日
今回はこのような感じに!
ちょっとためすぎていっぱいになるので定期的にやろうかと。
アセットストアをまとめたサイトを更新しました。
かずまです。
けものフレンズというアニメが流行ってますね。
わーすごーい!アセットを紹介できるフレンズなんだねーということで(笑)、
Unityのアセットを探して使い方やどういったものか〜みたいなのが書かれたサイトを同時に見つけられる
Assetストアまとめサイトを前回紹介しました。
あの段階ではほんと作りたて、という感じでしたが、今回のアップデートでかなり改善しました。
少しは使いやすくなっていると思われます。
...検索を充実させたい...けど。
デザインの変更
前回のデザインも好きだったのですが、並びがどうもうまく収まらなくて止む終えなく変更しました。
今回のはOculusのサイトのような....感じのテンプレートを使用したのでかなり落ち着いています。
並びや検索などもわかりやすくなっていると思います。
機能の追加
お気に入り機能
今回は右のメニューバーが追加されています。
これはサインアップ・ログインした場合に有効になります。
いつでも簡単にアクセスできるようになりました。
合計金額も書かれています。
(削除ボタンはまだ未実装なので有効ではありません。)
コンテンツ量
前回よりは20個ぐらいアップしましたが少ないです。
しかし!現在データをかき集めている最中です。
手作業きつい!!
追記
2/12 10:30
コンテンツを頑張って200ほど増やしました!
サイト
ぜひ使ってみてください。
Unity C#でHaskellのmapっぽいものを実装したお話
かずまです。
最近、すごいHaskell楽しく学ぼう! を読み始めました。
おもしろおかしく書かれているところもあるので読み行ってしまいます。
なので、寝る前に少し読む、みたいなスタイルで。
C#でのFunctional的に書く方法
- Lambda式を使う
C#でもLambda式が使えるのでそれを利用します。
無名関数とも言いますね!
公式ドキュメントはこちら。
Lambda Expressions (C# Programming Guide)
- 引数でデリゲートを使う
Lambda式を受けるデリゲートは
Func(T, TResult) Delegate (System)
ココらへんを使えば良さそうです。
** Func
これは一つ目のTは引数の型、TResultは返り値の型をGenericで指定するようです。
なんと、この2つを使えばできるはずですね!!
クラスとメソッドの作成
とりあえず、Funcというクラスを作って、staticでList
このような感じで書いてみました。
メソッドをGenericにするのはうーん、どうなのかな。
ClassをGenericにするのもいい気がするけど今はこっちでかきました。
使い方
先程のクラスとは別にFunctorTestクラスを用意します。
以下のように記述してみました。
public class FunctorTest : MonoBehaviour { private List<int> list = new List<int>(){ 1, 2, 3, 4, 5 }; private void Start () { System.Func<int, int> f = (int arg) => { return arg * 2; }; list = Functor.map (f, list); print (list); } }
追記 2/7
Lambda式をまとめるのもありです。
public class FunctorTest : MonoBehaviour { private List<int> list = new List<int>(){ 1, 2, 3, 4, 5 }; private void Start () { list = Functor.map ((int arg) => {return arg * 2;}, list); print (list); } }
このコードではHaskellと同じように2倍するLambda式を書いて、それをmapの第一引数として渡すだけ!
簡単ですね!ただHaskellと違ってタイプする数は多いのでスマートじゃない...
これぐらいなら許容範囲!
mapはGenericだけど型を指定しなくても良さそう
mapはGenericな型を要求するので実際は
list = Functor.map<int> (f, list);
と指定するのがいいのか、と想定していました。
ところがTestクラスを書いた時にmapの後ろに型の指定を忘れていたのです。
でもコンパイルエラーも出なく、きちんと出力されていたので
自動的に型を認識するのかと感動してしまいました。
きちんとint型だと認識していますね。
公式のドキュメントにもきちんとかいてありました。
Generic Methods (C# Programming Guide)
便利だしHaskellに一歩近づいた?笑
出力結果
素晴らしい、ちゃんと出てますね!
Stringでも試してみよう!
Listのintが出来たのでstringでも同様に使えるはずです。
private List<string> slist = new List<string>() { "Hello", "World" }; private void Start () { System.Func<string, string> fs = (string arg) => { return arg + "(ΦωΦ)"; }; slist = Functor.map (fs, slist); print (slist); }
この様にHelloとWorldの後ろに(ΦωΦ)を付け足すスクリプトです。
結果
にゃーと猫がでてきましたね。
まとめ
Haskellはまだまだ初心者ですので間違ってる解説などありましたらご指摘ください。
あとこう書いたほうがいいよ〜みたいなのもぜひ!
Global Game Jam 2017に参加しました。
かずまです。
21 ~ 22日で行われた(他の会場では20日もあった)Global Game Jamに参加してきました。
参加だけでなく僕達IGDA琉球大学、琉ゲ部では沖縄会場の運営も行っておりました。
Global Game Jam(GGJ)とは
Game Jamは、ゲーム開発を行うハッカソンです。
その中でも、Global Game Jam (以下、GGJ) は、ギネス記録を持つ世界最大のGame Jamです。全世界にハッカソン会場が設けられており、全世界で同じ日に同じテーマでゲームを開発します。GGJは、2009年の初開催以降年々規模を大きくしており、2016年1月のGGJでは、世界93の国と地域で、36,000人以上が参加し、約6,800の作品が制作されました(世界の会場一覧はここから見られます)。
引用URL
Global Game Jam JAPAN | Innovation, Collaboration, Experimentation! Jan. 20~22, 2017
制作物
今回運営チームとして
彼と2人で作成しました。
もちろんゲームエンジンはUnityです。
担当はHookを飛ばす、引き寄せる部分を彼に担当してもらい、その他(剣のモデルを含める)は僕が担当しました。
タイトル
「Hook VR」
コンセプト
VRで試したことない体験したい、ということで敵にHookを引っ掛けて、近くに引き寄せて剣で切る、というもの。
プレイ動画
Hook VR #ggj17jp #ggjokinawa
— かずま (@kazumalab) 2017年1月22日
島が破壊される前に縄で敵を引っ張り剣で斬る。 pic.twitter.com/d9eHeIxrlD