code VR

Unity×VR(117)

スポンサーリンク

//tips

//photon対応したダメージコードの修正

前回photonのRPCに対応するためダメージ判定を攻撃側からの命令ではなく受けて側のtriggerで行うことにした。

スクリプトの移行及びその際のコライダーの複数回接触によるダメージ倍増に対応する。HPScript2として大幅な改修を行う。

UIにアタッチしているDeerActionlist側とも連動して修正する。

ダメージの判定の際にwolfmode,ultimateflagの参照の必要があるが、それぞれのキャラクターのAtackManagerスクリプトを参照にしているため下記のようにキャラクター分場合わけして参照しなければいけないことになってしまう。

if (other.gameObject.tag == "Weapon")//playerの攻撃オブジェクトタブ
{
deerAtackManager = other.gameObject.GetComponent<DeerAtackManager>();

if (deerAtackManager.wolfmode)

HPScriptの参照を簡易化したいのでwolfmode,ultimateflagのコードは別のスクリプトに写して、キャラクター共有のものとして作成し直す。

CharaModeManagerスクリプトをDeerAtackManagerをアタッチしていたオブジェクトにアタッチし、変更。

public class CharaModeManager : MonoBehaviour
{
public bool wolfmode = false;

public bool ultimateflag = false;

}
二つのフラグを抜き出し、このフラグを参照していた UI側のスクリプトのWolfImageonoffメソッドの修正。

public void WolfImageonoff()
{
//deerAtackManager = myPlayer.GetComponentInChildren<DeerAtackManager>();
charaModeManager= myPlayer.GetComponentInChildren<CharaModeManager>();

charaModeManager.wolfmode = !charaModeManager.wolfmode;
Debug.Log("switchmode");

if (charaModeManager.wolfmode)
{
wolfimage.SetActive(true);
}
else
{
wolfimage.SetActive(false);
}
}

UIのボタン経由で変えるフラグは全てCharaModeManager を通すことでHPScript2で受け取りやすくする。

charaModeManager = other.GetComponent<CharaModeManager>();

こうなってくると各キャラクターのattackmanager自体が不要になってきそう。下記のような移行を行った。

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; //攻撃力

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)
{
charaModeManager = other.GetComponent<CharaModeManager>();

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

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)
{
Destroy(other.gameObject); //ゲームオブジェクトが破壊される
}
}
}

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

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

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

これで無事にダメージの方は反映できた。

DeerAtackManagerを削除して欲しいというエラーとEnvPlaymove5photonスクリプトにてDestroy(this.gameObject); に直っていなかったので攻撃側が消されてしまっていた。ここも修正。photonView.RPC(nameof(DestroyObj), RpcTarget.All);でdestroy処理もRPC同期。

ダメージ判定も時間クールダウンを設け、1ダメージずつ食らわせるようにした。

SoulPostの領域に入り、テキストのボタンが押せなかったのでcanvas sort orderを確認したところ、deer canvasのsort orderよりも小さくなっていたため押すことができなかった。sort orderの値を10まで増やすことでpanelの開閉がスムーズにできるようになった。

またGolemSoulCounterのSoulCounterminus()メソッドに0でない場合という条件を加え、dropitemがnullじゃない場合という条件も GolemSouldropスクリプトのDropgolemitem()メソッドもcountの値を参照するようにした。

Panel表示が対象以外のシーンにも表示されているため、自身のシーンのみで実行されるように変更する。

 

人気の記事

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.