code VR

Unity×VR(123)

スポンサーリンク

//tips

//AIEnemyダメージ同期

ゴーレムをprefabから生成し、各シーンに同期させたのでダメージ判定も調整する。現状はすべてのシーンで攻撃判定およびダメージ判定が生じているので、複数回のダメージ判定が生じている。

1シーンのみにダメージ判定を統一し、その判定を各シーンに飛ばす方法を模索する。

攻撃判定は判定を持つコライダーの有効化をPhotonviewismineで限定する。ダメージを受ける際は、キャラクターの生成シーンのみキャラクターの攻撃判定を持たせ、ゴーレムにダメージが入った際にはすべてのシーンのゴーレムにそのダメージが同期されるようになっておけば良い。

HPscript2で接触対象のcharaModeManagerを取得し、そのモードから自身が受けるダメージ量を特定することができているのでダメージ判定にはHPscript2を使用し、各キャラクターの攻撃スクリプトの方に修正を入れれば良い。

現在ゴーレムの右手にあたるオブジェクトにアタッチされているGolemAttackManagerスクリプトを外し、受け手側にダメージを感知させるためのweapontagをつける。

HPScript2にはゴーレムダメージ用のOnTriggerEnterを追加する必要があるので、参照されるcharaModeManagerスクリプトをアタッチする。すべてのboolはfalseなので自動的に1ダメージを与える形式となる。

下記にスクリプトを記載する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;

public class HPScript2 : MonoBehaviourPunCallbacks
{
[SerializeField]
private float maxHp = 3; //体力

[SerializeField]
public float hp;

// HP表示用UI
[SerializeField]
private GameObject HPUI;

HPScript hPScript;

// HP表示用スライダー
private Slider hpSlider;

LoadingScript loadingScript;

GameObject[] playerobjs;

HPScript playerhp;

DeerAtackManager deerAtackManager;

CharaModeManager charaModeManager;

public float powerEnemy = 1; //攻撃力

bool DuringAttack=false;

void Start()
{
hpSlider = HPUI.transform.Find("HPBar").GetComponent<Slider>();
hpSlider.value = 1f;

}

void Update()
{
hpSlider.value = hp / maxHp;

if (hp <= 0)
{
// HP表示用UIを非表示にする
HideStatusUI();
}

}
//HPUIを非表示にする
public void HideStatusUI()
{
HPUI.SetActive(false);
}

private void OnTriggerEnter(Collider other)
{
if (photonView.IsMine)
{

charaModeManager = other.GetComponent<CharaModeManager>();

if (other.gameObject.tag == "Weapon" && DuringAttack == false)//playerの攻撃オブジェクトタブ
{
DuringAttack = true;

if (charaModeManager.wolfmode)
{
photonView.RPC(nameof(AttackDamage2), RpcTarget.All);
//hPScript.hp -= powerEnemy * 2;
Debug.Log("wolfmode");

if (charaModeManager.ultimateflag)
{
photonView.RPC(nameof(AttackDamage100), RpcTarget.All);
//hPScript.hp -= powerEnemy * 100;
charaModeManager.ultimateflag = false;
Debug.Log("ultimateultimate");

}

}
else
{
if (!charaModeManager.deerpowerflag)
{
photonView.RPC(nameof(AttackDamage), RpcTarget.All);
//hPScript.hp -= powerEnemy;
Debug.Log("human");
}
else
{
photonView.RPC(nameof(AttackDamage2), RpcTarget.All);
//hPScript.hp -= powerEnemy * 2;
Debug.Log("human");
charaModeManager.deerpowerflag = false;
}

}

if (hp <= 0)
{
photonView.RPC(nameof(DestroyObj), RpcTarget.All);
//Destroy(this.gameObject); //ゲームオブジェクトが破壊される
}
}
}
}

[PunRPC]
void AttackDamage()
{
hp -= 1;
Debug.Log("AttackDamage");

StartCoroutine("CooltimeAnimation");
}

[PunRPC]
void AttackDamage2()
{
hp -= 2;
Debug.Log("AttackDamage");

StartCoroutine("CooltimeAnimation");

}

[PunRPC]
void AttackDamage100()
{
hp -= 100;
Debug.Log("AttackDamage");

StartCoroutine("CooltimeAnimation");

}

[PunRPC]
void DestroyObj()
{
Destroy(this.gameObject);
}

IEnumerator CooltimeAnimation()
{
yield return new WaitForSeconds(1f);
DuringAttack = false;
}

public void powerRecover()
{
hp += 1;
}

public void powerRecoverall()
{
hp += 3;
}

public void Damageallplayer()
{
playerobjs = GameObject.FindGameObjectsWithTag("Player");

foreach (GameObject obs in playerobjs)
{
playerhp = obs.GetComponent<HPScript>();
playerhp.hp -= 1;
}
}
}

ゴーレムによるダメージ判定は有効でキャラクターを同期対象もまとめて消滅させることができている。

ただ、キャラクターの攻撃をゴーレムにうまく与えられていない。スクリプトを見ていると、ゴーレムを生成したシーンのみで(photonView.IsMine)によるダメージ判定が生じるようになっているのでキャラクターのアクション時に彼らのコライダーがどのシーンでもオンになっているかを確認する。

キャラクターの動作を決めるEnvPlaymove5photon スクリプトを確認すると、Attackmotion()、WaitAnimationfin()にRPCは組み込んでいないのでこの部分を調整していく。

キャラクターのシーンでは攻撃が発生しているが、ゴーレム生成シーンにはその情報が伝わっていない。(photonView.IsMine)で制限されているOnTriggerEnterで接触感知対象から弾かれている形になる。

なので、ゴーレム生成シーンで接触感知をさせるために、キャラクターの攻撃モーションをRPCで他のシーンに伝達する必要がある。

人気の記事

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.