Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

「面白法人カヤックVR分室」としても活動しています。詳細はこちら

Rayを使って壁に弾痕を残したい+α

f:id:aizu-vr:20200427225115p:plain こんにちは。学部3年の山田です。 今回はUnityで壁とかに弾痕を残すやつをいろんなサイトをコピペ参考にしながら作ったので紹介します。

今回使用したAssetとモデル紹介

使わせていただいた銃の3Dモデル  かっこいい

製作者:GHOST EMPIRE

BOOTH↓ booth.pm

アニメーション作成に使ったAsset↓

assetstore.unity.com

血のエフェクト↓

assetstore.unity.com

Rayを使う

弾痕を残すやつを作るうえでどんな実装方法にするか考えてみた結果、まず”弾が当たった場所に弾痕の画像を置く”という機能を作れば良いと思い調べたところUnityのRayという機能が引っかかり、実装している先駆者様もいました。

Rayの主な使い方は当たり判定を飛ばしてcolliderにぶつけて何かするというものです。今回は銃の先端からRayを飛ばし、壁にぶつかったらその座標を取得し、取得した座標に弾痕を置く、という実装方法になっています。

実装

早速ですが下記サイトにある記事を参考にして銃の先端からRayを飛ばし、オブジェクトと接触した座標に弾痕を表示させるものを作ります。

qiita.com

こちらで紹介されているものはカメラの中心からRayを飛ばして画像をオブジェクトの表面に表示させるものです。このままカメラオブジェクトを銃の子として銃の先端に配置するだけでもいいですが、必要なものはRayの初期位置と方向なので他のオブジェクトでも代用できます。


UnityのRayを使って壁に弾痕を残すやつテスト

デバッグ用にRayを可視化してあります。Rayとオブジェクトが接触した座標に弾痕が表示されています。

あとはボタンを押したら壁に弾痕が現れるような処理を追加するだけです。下記サイトを参考に弾痕を配置する処理を追加します。配置する座標と角度は上記サイトを参考にしました。

nopitech.com

これで銃口からRayを飛ばして、当たった場所に弾痕を配置させることができるようになりました。

あとはキャラクターに持たせるなりカメラの子にするなりすればそれっぽいものは作れます。

今回はUnityChanに持たせてみました。


UnityのRayを使って壁に弾痕を残すやつ

無事、壁に弾痕が残るのを確認できました。

おまけ 人と壁を区別できるようにする

Raycastの要素の中にRaycastHitというものがあります。これはRayが当たったオブジェクトの情報を読み取ることができ、今回もオブジェクトにRayが当たった場所などの情報を読み取っています。RaycastHitで読み取ることができる情報の中に、オブジェクトのレイヤー情報があります。これを使って人と壁を区別します。

人として扱うオブジェクトのレイヤー番号を8、壁として扱うオブジェクトのレイヤーをDefault(番号0)とします。 下記サイトを参考に、レイヤー番号が0なら弾痕を、レイヤー番号が8なら血のパーティクルを配置するようにします。

teratail.com

実装した結果↓


UnityのRayを使って弾痕を残すやつ2

人(豆腐)を撃った時には血が出ます。 終

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!