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

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

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

3

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

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, VR
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.