Unity勇者の冒険の書

Unityで学んだことや便利なものなど作ったら紹介します

【Unity勇者の奮闘記】HtcVIVEでフェードする方法

今回のUnityのバージョン:5.4.3f1

こんにちは!

お久しぶりです。

最近VRで開発することが多いので、VIVEの開発に関する事を
ちょこちょこ書いていきたいと思います。

まずはHtcVIVEで画面をフェードする方法について書きます。
まず、前提としてプロジェクトに「SteamVR Plugin」
を使っていることが条件です。

・SteamVR Plugin
https://www.assetstore.unity3d.com/jp/#!/content/32647

この中にあるスクリプト「SteamVR_Fade」
[CameraRig]Camera(head)Camera(eye)にアタッチします。

f:id:LightGive:20170411124544p:plain

f:id:LightGive:20170411124547p:plain

フェードさせるときはGetComponentなどせずに、
Staticの関数を呼ぶだけで大丈夫です。

[SerializeField]
private Color fadeColor = Color.black;
[SerializeField]
private Color fadeTime = 1.0f;

void Start()
{
    SteamVR_Fade.Start(fadeColor, fadeTime);
}

こんな感じで超簡単に実装できるので、ぜひ試してみてください。

応用でこんなこともできます。

qiita.com


ちなみに、フェードするシーン遷移に関しては「SteamVR_LoadLevel」というスクリプトが用意されています。

使い方はこんな感じです。

void Start()
{
    SteamVR_LoadLevel.Begin("シーン名");
}


あら便利。

こんな感じでHtcVIVEの開発ではいろいろな機能が
「SteamVR Plugin」で既に作られていたり、
「VRTK」「NewtonVR」という便利なAssetがあったりするので、
意外とVRの開発は簡単だったりします。


物を持って投げるだけならVRTKを使えば数秒で出来ます!
学生の方なら学校に機材があったりすると思うので、
是非開発を試してみてはどうでしょうか?


アセットのリンク貼っておきますね。

・VRTK
https://www.assetstore.unity3d.com/jp/#!/content/64131

・NewtonVR
https://www.assetstore.unity3d.com/jp/#!/content/75712

では!

【Unity勇者の奮闘記】Unityで物理の勉強1(最高点に達するまでの時間を求める)

こんにちは!

最近物理の勉強をしているのでメモ用に。

空気抵抗の計算はしていないので、各自でお願いします。

まずは最高点に達したときの座標を求めたいと思います。

まず、上空に投げ上げたときの最高点は、

下にかかる力がちょうど0になったときですね!

まずは公式を思い出しましょう!

v = v0-gt
速度 = 初速 - (重力加速度 * 時間)

なので、v = 0を代入して、計算すると、

t = v0 /g
時間 = 初速 / 重力加速度

になりますね!

では、Unityで確認してみましょう

public class Test : MonoBehaviour {

	public Vector3 vec;
	private Rigidbody rigid;

	void Start ()
	{
		rigid = GetComponent<Rigidbody>();
	}
	
	void Update ()
	{
		if (Input.GetKeyDown(KeyCode.Space))
		{
			rigid.velocity = vec;
			var topTime = vec.y / (-Physics.gravity.y);
			StartCoroutine(WaitBreak(topTime));

			Debug.Log(topTime.ToString("F2") + "秒後に最高点に達します");
		}
	}

	private IEnumerator WaitBreak(float _waitTime)
	{
		yield return new WaitForSeconds(_waitTime);
		Debug.Break();
	}
}

スペースキーで初速Vecに飛ばして、指定の時間に止めるようにしました。

f:id:LightGive:20161109123236g:plain

無事、最高地点で止まりましたね!

こんな感じで高校等で習った物理はUnityでも使うことができます!

ぜひいろいろ試してください。

次は、最高点の座標を求めてみましょう

では(^^)/

【Unity勇者の奮闘記】Unityで動画再生してみた

お久しぶりです|д゚)

最近投稿休んでましたね

これから昼休みとかに書こうと思います



まず、動画形式がmp4は流石に行けるだろうとやってみたところ、

無理っぽかったので少し調べてみました。

公式を見てみると

動画ファイルは Apple 社の QuickTime を介してインポートされます。サポートされるファイルの種類はインストールされた QuickTime のがサポートするものと一致します(通常は .mov、.mpg、.mpeg、.mp4、.avi、.asf ) Windows 上でムービーがインポートされるためには QuickTime がインストールされていることが必要です


とのことだったので、QuickTimeWindows版をインストールしてみて

再度挑戦・・・。

Movie importing requires Quicktime to be installed.
f:id:LightGive:20161103121715p:plain

ダメみたいっすね

WindowsQuickTimeはセキュリティの問題があるので使えないらしいので、

Unityで直接対応してるのを調べてみると、ogv形式が対応してるみたいだったので

mp4を変換することにしました!

使ったフリーソフトはこれ

jpn.moo0.com

ドラッグアンドドロップで使いやすくて自分好みだったのでおすすめです!

これでmp4をogvに変換してやったら

無事Unity側で動画ファイルとして読み込みました。

f:id:LightGive:20161103123148p:plain

あとはマテリアルを作成して、テクスチャの部分に

さっきの動画ファイルを入れてやって…

f:id:LightGive:20161103123350p:plain

↓ここ

f:id:LightGive:20161103123407p:plain

このマテリアルのQuadとかに張り付けて、スクリプトで制御します。

Unityで動画を再生するには、MovieTextureを使います。

	public MovieTexture move;

	void Start ()
	{
		move.Play();
	}


こんな感じでMovieTextureにインスペクターでさっきのムービーを

設定してやって…再生出来ました!



これでゲーム上で、テレビに動画を流す表現等ができますね笑

あ、ちなみにAndroidではMovieTextureは使えないので、

他の方法を使わないとダメみたいですね

あれ、たくさん置くと重い……。

重さに関しては何か対策が必要そうです。


では(^^)/




参考にした記事

Unityでムービー再生 - げぇむぐる〜ぶ
MovieTexture による動画の再生(GUI) 凛(kagring)のUE4とUnityとQt勉強中ブログ
Unity - マニュアル: ムービーテクスチャ
MovieTextureの具体的な使い方 - Qiita

【Unity勇者の奮闘記】ブログのこれから

お久しぶりです


無事、就職できて最近ブログの更新が滞ってましたが、
安定してきましてまた更新してみました('ω')
これからブログの更新が今まで以上に不定期になりますが
これからもよろしくお願いします(^^)/


今回は近況報告だけ。



では('ω')ノ

【Unity勇者の奮闘記】エディタでYoutube見れるようにした

どん!

f:id:LightGive:20160310121730p:plain

こんな感じです

エディタでウェブ見れたらいいなぁっていうのを聞いたら
すげーやりたくなりましたw

調べたら何人かちらほらやってる人がいたのでそちらを参考にしながら
やってみることにしました!
qiita.com
qiita.com

こんな感じでウェブ翻訳を置いて変数名調べたり、
f:id:LightGive:20160310121743p:plain


作業用BGMを流しながら作業したりと色々出来ますね!
f:id:LightGive:20160310121713p:plain


使い方は、メニューから、開くだけ。
f:id:LightGive:20160310122838p:plain


CustomPageは指定のページを開くことができます!
f:id:LightGive:20160310122907p:plain


追記:
プログラム公開しときます('ω')
5.0以降じゃないと動かないです。
あと、戻るボタンが無いのでページを移動する系はあまり使わないようにしたほうがいいと思います。

後々置けたらと思います!


github.com



で、最後に思ったことが一つ。
エディタでやるメリットがあんまりないっていう(´・ω・`)

では

【Unity勇者の奮闘記】TransitionManagerを作った

どうも、最近エディタ拡張にはまってます

いままでシーンの遷移にFadeManager(以下参照)

naichilab.blogspot.jp

を使ってましたが、テラシュールさんの記事を見て、


tsubakit1.hateblo.jp



シーン切り替えに使ってみたらいい感じでしたが、ルール画像が

必要だったので、ルール画像を使わない方法でのシーン遷移を

できないかと、他のシーン遷移を色々試してみたいと最近思って、

ちょっと試しに作ってみした

シングルトンに関してはこちらを使用してます。

naichilab.blogspot.jp




使い方は、まず、TransitionManagerを空のGameobjectにアタッチして、

シーン上に置いておきます。

設定項目がいくつかあるのでそれを設定します。

f:id:LightGive:20160220144625p:plain

TransitionTimeは、シーン遷移する時間です。

TransitionColorは、シーン遷移の時の色です。

TransitionTypeには種類ごとにシーン遷移の種類が変わります。

f:id:LightGive:20160220144631p:plain


こんな感じのシーン遷移になります。

UnityのUIのFillMethodを使用してます。

f:id:LightGive:20160220145220g:plain

f:id:LightGive:20160220145225g:plain

f:id:LightGive:20160220145227g:plain

f:id:LightGive:20160220145217g:plain

もちろんフェードもあります。

まだまだ試作段階なので、使いにくい点や、パフォーマンス的に

ダメなところがあれば、コメントやツイッターで指摘していただいたり、

プルリクエストなど送ってもらえるとありがたいです。


ソースコードはこちらに公開してます。

github.com


では('ω')

【Unity勇者の奮闘記】Debugクラス関係について

最近すごいエディタ拡張作ってます!

で、Debug.L...くらいでいつもはLogって出てたんですが

いつの間にかloggerに変わってて毎回のようにloggerって間違えて、

むしゃくしゃしたのでDebug関係を色々調べてみることにしました。

Debug.Log

みんな大好きDebug.Logです

UnityのConsoleタブのところにメッセージを表示させる事が出来ます。

また、以前紹介した記事のように、リッチテキスト等を使うことで文字を大きくさせたり色を付けたりすることもできます。

lightgive.hatenadiary.jp

使いすぎてどれか分からなくならないようにしないといけないですね('ω')

Debug.Log("Debug.Log");

f:id:LightGive:20160211141927p:plain



Debug.LogWarning

Debug.LogのようにConsole部分にメッセージを表示させる事が出来ます。

こちらは警告文をメッセージに表示させることができます

Debug.LogWarning("Debug.LogWarning");

f:id:LightGive:20160211142648p:plain



Debug.LogError

同じく、Debug.LogのようにConsole部分にメッセージを表示させる事が出来ます。

こちらはエラー文をメッセージに表示させることができます

Debug.LogError("Debug.LogError");

f:id:LightGive:20160211144829p:plain



Debug.Break

これは、エディターを一時停止させます。

Consoleには特に何も表示はされません

似たようなDebug.DebugBreakってのがあったので使ってみたんですが

何も起きませんでした。これって何だろうか…(*_*

Debug.Break();

f:id:LightGive:20160211144651g:plain


一応Debug.DebugBreakの方も

Debug.DebugBreak();

f:id:LightGive:20160211145838g:plain



Debug.logger

さて、問題のDebug.loggerの方ですが、いろいろ出来そうではあります。

まだいろいろ知識不足のところがあるんでまた勉強します。

タグつけたり、フィルターをかけれたり、出力のON・OFFを切り替えれたり…などなどいろいろあるみたいですね

試しにON・OFF切り替えをやってみたらこんな感じでした

//出力ON
Debug.logger.logEnabled = true;

//出力OFF
Debug.logger.logEnabled = false;

f:id:LightGive:20160211211041g:plain


こうやっていざ記事を書こうと思うと自分の知識不足がよく分かりますね…

Debug.loggerについてはこちらの記事を参考にしていただくといいと思いますね

baba-s.hatenablog.com


では('ω')