はらけんログ

unity触ったりバイクに乗ったり

【Unity】OculusでVRコスプレしたくない?

 

f:id:HarakeN:20170112174329p:plain

最近、アバター使ってなんかできねぇかなと模索中。。。

FaceRigもいいんだけど、やっぱり自由度あった方がいいなと思って、Oculusで自作してみた。

 

まだテスト段階なので完全ではないけど、それっぽくなってきたと思うので、いったんまとめる。

作成にあったって、話題のVRコスプレイヤー、青木そらすさんのご協力をいただきました

・青木そらす さん https://twitter.com/open_sorasu

 

 

んで、今のところこんな感じ

 

 微調整したい部分はたくさんあるけど、何となくコスプレしてる感はあっていい感じ。

 

そこそこできたら作り方も改めて書くよ。

 

以上。

【Arduino】Arduinoのセットアップ

はい。

先日、余ってたArduinoをある人にプレゼントしたんだけど

いきなり「はいどーぞ」って渡して、すぐ使える代物ではないので、簡単なセットアップ方法を書いておこうと思う。

 

Arduinoの開発ツール「Arduino IDE」は下記の公式サイトからダウンロードできる。

Arduino - Software

 

 

1, Arduino IDEをダウンロード

f:id:HarakeN:20170111114427p:plain

アクセスすると上の画像のような画面が表示される。画面の右側に表示されている「Windows」「Mac OS X」「Linux」のいずれかから、自分の使用する端末に対応したものをクリックしよう。

 

 

f:id:HarakeN:20170111115547p:plain

すると次のようなページが表示される。寄付をしない人は赤丸の「JUST DOWNLOAD」をクリックすればダウンロードが始まる。

 

 

 

2, インストールとIDEの起動

f:id:HarakeN:20170111120443p:plain

ダウンロードが完了したらファイルを解凍しよう。解凍したらArduino IDEをアプリケーションの中へ移動させておこう。 こうして、わかりやすい位置に置いておけば毎回起動時にIDEを探さずに済む。

 

 

 

f:id:HarakeN:20170111121049p:plain

移動が完了したら、早速起動してみよう。画像のようなスケッチが現れたら成功だ。

 

 

3, Arduinoと接続

f:id:HarakeN:20170111122025p:plain

ツール>シリアルポートと進むと接続可能なポートの一覧が表示される。上の画像は何も接続されていない状態(各々のPCによって表示が違う可能性がある)

ArduinoIDEを一旦終了して、ArduinoをUSBで接続してから、もう一度IDEを起動してシリアルポートを見てみよう。

 

 

f:id:HarakeN:20170111122046p:plain

すると新たに二つのポートが出現する。いずれかを選択すればArduinoとPCが接続される。

 

 

 

f:id:HarakeN:20170111122830p:plain

次に、使用するArduinoの種類を設定しよう。Arduinoには様々な種類があって、IDEからArduinoへ書き込む際に、間違った種類のArduinoを設定してあるとエラーを吐かれるので、あらかじめ設定しておこう。

ツール>マイコンボードで使用したいArduinoを選択しよう。(僕があげたのはUnoなので一番上かな)

 

 

これで準備完了だ。

回路を間違えると簡単にArduinoが壊れてしまうので、回路と接続するときは間違えないように気をつけよう。

 

まずは簡単なLEDチカチカ回路からチャレンジしてみるといいかも。

11 ブレッドボードに載せたLEDを点滅させる

 

 

 

以上。

OculusTouchが届いたよ

はい。

なんとかお仕事が落ち着いたので(再度これから年末にかけてバカ忙しくなる)久しぶりに更新しますよーっと。

 

ってことで

会社に届いたOculusTouchのレビューでも書いときます。

 

f:id:HarakeN:20161219135722j:plain

 

 

 

 

見た目はこんなかんじ。

べたべた触って汚くなってるのは勘弁してね。

f:id:HarakeN:20161219135852j:plain

 

 

viveと違ってかなり手にフィットする。操作に慣れないうちは違和感があるけど、慣れると自分の手と間違えるくらい持っているということを忘れる。(少し大げさだけど)

f:id:HarakeN:20161219140312j:plain

 

 

で、早速体験したかったので、無料のOculusアプリをインストール。

いくつかある中で面白かったのは、エピックゲームスの「Bullet Train」

f:id:HarakeN:20161219140839p:plain

 

テレポートのやり方と銃の射ち方だけレクチャーしてもらって、あとは好き勝手に射ちまくるゲーム。

敵が撃った弾はつかんで投げ返せるので、VRマトリックスってな感じ。

 

 

 

Touchつかって面白いことしたい!!

って思ったけどHoloLensもすすめたいんだよなぁ・・・

自分がもう一人ほしい。

【Unity】RenderTextureとプロジェクターについて

 

前回の記事で書いたように「Textureを変えずに文字をマテリアルに映す」方法で、TextMeshを使わないバージョンも書いときます。

haraken.hatenablog.com

 

 

 

今回使うのはunityのRenderTextureとプロジェクターです。

 

今回のやり方は、TextMeshを使う方法より綺麗に映せます。

っていうのも、TextMeshはMeshが平らなので、曲がった面に張り付けようとすると変な感じになってしまいます。

 

f:id:HarakeN:20161130200612p:plain

 

 

しかし、プロジェクタなら曲がった面にしっかり張り付きます。

 

f:id:HarakeN:20161130200628p:plain

 

 

ただ、プロジェクターはLightingに左右されるので、調整する箇所がいくつかあって、めんどい。はっきり見せたい場合、しっかり作りこむ必要がありますが、今回はそこまでやりません。

 

 

 

では、プロジェクタの使用方法です。

 

 

まず、StandardAssetをインポートしてくださいな。

これがプロジェクタのプレハブなので、これをドラッグアンドドロップなどで生成してね。

f:id:HarakeN:20161130201655p:plain

 

 

インスペクターのMaterialsの部分がプロジェクタが映すマテリアルになる。

 

f:id:HarakeN:20161130202020p:plain

 

 

 

どうやってScene内の映像を映すのさ!?

 

 

簡単です。

登場、「Render Texture

 

 

Render Textureはカメラで見た映像をTextureにしてくれるものです。(本当は違う用途にもできます)

 

プロジェクトからRender Textureを作って、ヒエラルキーから新しく作ったカメラにアタッチしてください。

f:id:HarakeN:20161130202555p:plain

f:id:HarakeN:20161130202600p:plain

 

 

これで自分が投影したい映像をカメラに見せることで、それがTextureになります。

f:id:HarakeN:20161130204255p:plain

 

 

んで、新しいマテリアルを作成し、シェーダーをプロジェクターに設定して、さっきのRender Textureをアタッチ。

f:id:HarakeN:20161130204715p:plain

 

 

これをプロジェクターのMaterialsに突っ込めば終了。

 

 

 

シェーダーの部分をProjector/Multiplyを利用するとプロジェクタでもはっきり見えるようになるが、やり方は書くのめんどいので察してくれ。

【Unity】TextMeshでオブジェクトを透過させない方法

 

unityのメモ帳的なブログにしようと思ってたのに、脱線した話ばかり記事にしてたので今回は、まじめに書きましょーね。

 

はい。

今回はTextMeshを使用する際の話。

 

TextMeshは空のGameObjectとかにAddして、表示したいテキストを入力して表示できる。

例えば、3Dモデルにスクリプトから生成した文字を、3Dモデルの表面に突っ込みたい!ってときには便利。文字が変わる場合、テクスチャをいじるのはかなり面倒だしね。

 

f:id:HarakeN:20161129161337p:plain

 

 

 

で、ここから困ったことに

TextMeshはモデルを貫通して見える。

 

f:id:HarakeN:20161129161356p:plain

 

 

 

は!?っざけんな!

ってなりますが、これの原因はUnityのビルドインシェーダーのせい。

 

 

でも、同じような実装するにはプロジェクターを使う方法ぐらいしかない。(これも違う記事で書く)この方法は個人的に気持ち悪い。

 

 

ってことで、シェーダー書きましょうね~

 

 

といっても、unityのシェーダーを丸パクリするので簡単簡単。

 

では早速、unityのダウンロードページから、使用してるunityのバージョン見つけてください。(僕は5.3.4)ダウンロードするのはビルドインシェーダー。

 

f:id:HarakeN:20161129161443p:plain

 

 

ダウンロードしたら、解凍して「Font.shader」ってのをmonoDevelopとかで開いてください。

開いたら、1行目と最終行以外をコピーしてね。(必要なのは中身だけなので)

 

 

で、unityのプロジェクトで新しいシェーダーとマテリアルを作ってください。

 

f:id:HarakeN:20161129161454p:plain

 

作ったら、新しいシェーダーをmonoで開いて、さっきのコピーしたやつをペーストしてちょ。

 

こんな感じになると思う

Shader "Unlit/TestFont" //作ったシェーダーの名前
{
  Properties {
    _MainTex ("Font Texture", 2D) = "white" {}
    _Color ("Text Color", Color) = (1,1,1,1)
  }

  SubShader {

  Tags {
    "Queue"="Transparent"
    "IgnoreProjector"="True"
    "RenderType"="Transparent"
    "PreviewType"="Plane"
  }
  Lighting Off
  Cull Off
  ZTest Always
  ZWrite Off
  Blend SrcAlpha OneMinusSrcAlpha

  Pass {
    CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag

    #include "UnityCG.cginc"

  struct appdata_t {
    float4 vertex : POSITION;
    fixed4 color : COLOR;
    float2 texcoord : TEXCOORD0;
  };

  struct v2f {
    float4 vertex : SV_POSITION;
    fixed4 color : COLOR;
    float2 texcoord : TEXCOORD0;
  };

  sampler2D _MainTex;
  uniform float4 _MainTex_ST;
  uniform fixed4 _Color;

  v2f vert (appdata_t v)
  {
    v2f o;
    o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
    o.color = v.color * _Color;
    o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
    return o;
  }

    fixed4 frag (v2f i) : SV_Target
  {
    fixed4 col = i.color;
    col.a *= tex2D(_MainTex, i.texcoord).a;
    return col;
  }
  ENDCG
  }
  }
}

 

 

 

んで、今回悪さしてるのは赤文字の部分

  Cull Off
  ZTest Always
  ZWrite Off 

 

ここを次のように変更

Cull Back
ZTest LEqual
ZWrite On 

 

変更したらセーブしてね。

 

 

次に、さっき作ったマテリアルにシェーダーをつける。

 

f:id:HarakeN:20161129161946p:plain

 

 

 

このマテリアルをTextMeshオブジェクトのMeshRendererのMaterialsへ

 

f:id:HarakeN:20161129162334p:plain

 

 

あとは、作ったシェーダーのTextureの部分に表示したいフォントのfontTextureをいれるだけ。

f:id:HarakeN:20161129162607p:plain

 

 

すると、見えなくなる。

 

 

シェーダーの中身はunityC#と少し違うテイストなので、読み解くのがつらい。

 

ただ、いじり始めると楽しいかも。