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

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

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.