パッカーン

disney heroes多め

【VRChat】銃で遊べるようにしよう 1

銃で遊べるようにしよう

開発記録として何か残したいので、ブログにします。
VRChatの開発に関しては調べても情報がかなり少ない印象なので、情報量を充実させる目的も少しあります。
ブログに書いた内容に関して聞きたいことがあったら、@foxqoo3969までお願いします。
対面は怖いので、いきなりVRChat内で聞かないでください。 今回は音が出るまでを記録します。

銃のインポート

G26という銃のモデルを使わせてもらうことにしました。無料、ありがとう。
早速ヒエラルキーに配置。

持てるようにする

持てるようにするには、VRC_Pickupコンポーネントを付与する必要がある。
VRC_Pickupを使うには、ColliderとRigidbodyコンポーネントも必要らしいのでこれらも付与する。
参考:vrcprog.hatenablog.jp

RigidbodyとCollider

Colliderは箱型にして、銃の大きさくらいになるように調整した。
VRC Pickup

Exact Gunを銃自身に(画像だと修正後なので違う、後述)、
OrientationをGunに、
AutoHoldをYesにする。
早速持ってみる
失敗した

VRC PickupのOrientationでGunを選択すると、持った時にz軸が上になるようになるのだが(さっきの参考サイトに書いてある)、インポートした状態の銃のz軸は左側を向いていたようで、手に持ったら横向きになってしまった。
解決するために、銃の子としてEmptyを配置し、z軸を上向き、x軸を奥にする。
VRC PickupのOrientationをこのEmptyにした。(Gripにリネームしている)
ヒエラルキーの状態

Emptyの軸

持ってみる
成功したけど小さかった

銃のサイズは後で大きくする。
あとマガジンが表示されていてグリップが大きく見えるので、マガジンは後で非表示にすると思う。

音を出す

持った状態で使用したら音が出るようにする。
音は各自適当なものを探してくる。
ここで参考にしたのはこのサイト:www.sejuku.net

Audio Sourceコンポーネントを銃に付与する。
AudioClipに用意した銃声を入れる。

Audio Sourceコンポーネント

次はコードを書く

using UdonSharp;
using UnityEngine;
using UnityEngine.UI;
using VRC.SDKBase;
using VRC.Udon;
using VRC.Udon.Common.Interfaces;

public class g26 : UdonSharpBehaviour
{
    public AudioClip ac_sound_gunshot;
    AudioSource as_sound_gunshot;

    void Start()
    {
        as_sound_gunshot = GetComponent<AudioSource>();
    }

    public override void OnPickupUseUp(){
        as_sound_gunshot.PlayOneShot(ac_sound_gunshot);
    }
}

最初、「これOnPickupUseUp()なんかねえよって怒られるんじゃ」って思いながらビルドテストしたらUnityが落ちた。
別でインポートしてたスナイパーライフルのスクリプトにあったusingをそのままコピペしてみたらビルドテスト通るようになった。原因は調べてないけどまぁいいか...
銃にUdon Behaviourコンポーネントを付与する。

Udon Behaviourコンポーネント

撃ってみる。

動画の最後で、投げ捨てた銃が床を貫通した原因はわかんないっす。
とりあえず音が出せるとこまで行けたので満足した。