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

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

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.