code VR

Unity×VR(136)

スポンサーリンク

//tips

//各キャラクターphoton対応継続

Rabbitでのhuman役UIとの連携はできたのでwolf役UIへの反映に移る。

まずは短距離週間移動の実装を行う。これはUIボタンのドラッグ位置を感知するReceiveEventスクリプトとその位置座標を3dに変換しキャラクターに伝達するPlayerFlashスクリプトで表現していたが、prefab生成にし、photonにも対応させるため、receiveEvent.directionfixの値とreceiveEvent.onflash = false;をDeerActionlistスクリプト経由にした後にキャラクターにアタッチしたPlayerFlashスクリプトを実行させるように変更していく。

まずはPlayerFlashスクリプトをrabbitにアタッチ。

ReceiveEventスクリプトのpublic bool onflash = false;をDeerActionlistへ移す。

ReceiveEventスクリプトには[SerializeField]DeerActionlist DeerActionlist;を追加し、参照できるようにする。

DeerActionlist.directionfix = new Vector3(direction.x,0,direction.y);も同様。

public bool onflash = false;の方をキャラクターにアタッチしているPlayerFlashにおき、DeerActionlistから操作した方がよりシンプルなのでそちらは変更。

DeerActionlistはUIにアタッチされているが、自身の操作しているオブジェクトも取得する機能を実装しているのでこのようなことができる。
<UI側>
public void Dragsimulate()
{
heading = movepos - originpos;
var distance = heading.magnitude;
direction = heading / distance;
Debug.Log(direction);

deerActionlist.directionfix = new Vector3(direction.x,0,direction.y);//2dから3dへ変換
Debug.Log(deerActionlist.directionfix);

}

<中継>

public void RabbitWskill1()
{
playerFlash = myPlayer.GetComponent<PlayerFlash>();
playerFlash.direction = directionfix;

playerFlash.onflash = true;
}

<キャラクター側>

void FixedUpdate()
{
if (onflash)
{
transform.rotation = Quaternion.LookRotation(direction);

//rigd.velocity = transform.forward * speed;
rigd.position = transform.position + transform.forward * 3.0f;

onflash = false;
}
}

というように実装し直した。座標同期なのでphotonviewtransformの方で処理してくれる。

きちんと同期シーンのキャラクターも瞬間移動できている。

次に全てのキャラクターに埋め込んでいるparticleを発動させるスクリプトを確認していく。rabbitにParticlePlayarrayスクリプトをアタッチ。FindGameObjectsWithTag("Particles”);でシーン上のキャラクター全てが持つparticleを発動させる。

ただ、こちらは同期先に処理を伝える必要があるので下記のように編集した。

<UI側DeerActionlist>
public void RabbitWskill3()
{
ParticlePlayarray particlePlayarray = myPlayer.GetComponent<ParticlePlayarray>();
particlePlayarray.PreParticleOn();

}
<キャラクター側ParticlePlayarray>
public void PreParticleOn()
{
photonView.RPC(nameof(ParticleOn), RpcTarget.All);
}

[PunRPC]
void ParticleOn()
{
StartCoroutine("PartcleStop");
}

particleが変な位置から発生したバグは子要素の座標位置を修正し、先に入室したシーンで双方にparticle表示させるためにオブジェクトの取得をstartではなく実行メソッド内で行わせることにした。

[PunRPC]
void ParticleOn()
{
particleobjs = GameObject.FindGameObjectsWithTag("Particles");

foreach (GameObject obs in particleobjs)
{
ParticleSystem particle = obs.GetComponent<ParticleSystem>();
particle.Stop();
}

StartCoroutine("PartcleStop");
}

これで無事に全シーンでのparticle実行ができるようになった。

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.