//tips
//キャラクターのアクションUIの設定
前回キャラクターの攻撃モーションを実装したが、本日確認してみたところ攻撃判定が2回生じるバグは解消されていた。おそらくどこかのスクリプトのセーブ漏れが更新されて直ったのではないかと考える。
Photonの移動スクリプトにアタッチする前にテストシーンで扱いやすいスクリプトに処理を実装し、完成したものをPenvPlaymove4スクリプトに移す流れで進める。
PcharaUIBlueのhuman/wolfのキャラクター操作UIパネルの模型を作成し、完了した段階でSampleScene3に移す。
ベースとなるキャラクター操作UIを作成。丸型のimageをタップドラッグする流れで操作できるようにする。
まずは下記を一つ目のスキルとして追加し、タップしたらミニマップを使用できるようにする。
public void MiniMapOpen()
{
Minimap.SetActive(true);
}
minimapCameraのprojectionはorthographicとしsizeは20まで増やすことで2次元表示である程度の範囲まで表示できる。playerの子要素にした赤sphereのLayerにminmaplayerを付与し、minimapの表示をシンプルな形に変える。
次のスキルではプレイヤーの移動速度を増加させる。rb.position = transform.position + transform.forward * 10.0f * Time.deltaTime;に変数を一つ追加し、そちらで速さを操作できるようにする。
rb.position = transform.position + transform.forward * 10.0f * Time.deltaTime * rabbitspeedup;
として、
public void RabbitspeedIp()
{
rabbitspeedup = 1.1f;
}
をボタン操作で追加する。
時間制限付きの速度変化は下記のようにコルーチンを使用して実装した。
public void RabbitDash()
{
StartCoroutine("RabbitDashon");
}
IEnumerator RabbitDashon()
{
rabbitspeedup = 3.0f;
yield return new WaitForSeconds(2);
rabbitspeedup = 1;
}
最後に攻撃にslow効果を付与する。RabbitAtackでOnTriggerEnterが発動した際に相手の移動スクリプトが記載されたコンポーネントを取れるのでそこで相手側にアタッチされている変数rabbitspeedupにアクセスし、0.8などに設定変更させれば良い。
Rabbitの右足についているRabbitAtackManagerにスクリプトを追加する。ボタンクリックをflagの切り替えに使い、動作後にはオフに戻す仕組みにした。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RabbitAtackManager : MonoBehaviour
{
public float powerEnemy = 1; //攻撃力
HPScriptE hPScriptE;
Decoy decoy;
[SerializeField]
GameObject ParentObject;
bool rabitslowflag=false;
EnvPlaymove4 envPlaymove4;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player"&& other.gameObject != ParentObject)
{
//hPScriptE = other.gameObject.GetComponent<HPScriptE>();
decoy = other.gameObject.GetComponent<Decoy>();
decoy.hp -= powerEnemy;
Debug.Log("aaa");
if (rabitslowflag)
{
envPlaymove4 = other.gameObject.GetComponent<EnvPlaymove4>();
StartCoroutine("Rabbitslowfunc");
Debug.Log("rabitslowflagtrue");
}
//hPScriptE.hp -= powerEnemy;
//if (hPScriptE.hp <= 0)
if (decoy.hp <= 0)
{
Destroy(other.gameObject); //ゲームオブジェクトが破壊される
}
}
}
public void Rabbitslow()
{
rabitslowflag = true;
}
IEnumerator Rabbitslowfunc()
{
envPlaymove4.rabbitspeedup = 0.8f;
yield return new WaitForSeconds(2);
envPlaymove4.rabbitspeedup = 1;
rabitslowflag = false;
Debug.Log("rabitslowflagfalse");
}
}
これでPcharaUIRabbithumanのスキル関係は完了。PcharaUIRabbithumanの実装にうつる。wolfの方は任意で移動速度を人間より早く移動させたり、攻撃ダメージを人間用のものと人狼用のもので任意に切り替えさせられるようにするので、その分のボタンと変数が必要になる。
rb.position = transform.position + transform.forward * 10.0f * Time.deltaTime * rabbitspeedup;
にwolfs speed変数の追加。
UIにはwolfmodeボタンを追加し、そのボタンを押すことで速さが1.2倍、攻撃力が2倍となるように設定する。また、オンオフの切り替えが行えるようにしておく。またオンの場合のみwolfmodeの表示が出るようにしておく。
RabbitAtackスクリプトを下記のように修正。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class RabbitAtackManager : MonoBehaviour
{
public float powerEnemy = 1; //攻撃力
HPScriptE hPScriptE;
Decoy decoy;
[SerializeField]
GameObject ParentObject;
bool rabitslowflag=false;
EnvPlaymove4 envPlaymove4;
bool wolfmode = false;
[SerializeField]
GameObject wolfimage;
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player"&& other.gameObject != ParentObject)
{
//hPScriptE = other.gameObject.GetComponent<HPScriptE>();
decoy = other.gameObject.GetComponent<Decoy>();
if (wolfmode)
{
decoy.hp -= powerEnemy*2;
Debug.Log("wolfmode");
}
else
{
decoy.hp -= powerEnemy;
Debug.Log("human");
}
if (rabitslowflag)
{
envPlaymove4 = other.gameObject.GetComponent<EnvPlaymove4>();
StartCoroutine("Rabbitslowfunc");
Debug.Log("rabitslowflagtrue");
}
//hPScriptE.hp -= powerEnemy;
//if (hPScriptE.hp <= 0)
if (decoy.hp <= 0)
{
Destroy(other.gameObject); //ゲームオブジェクトが破壊される
}
}
}
public void Rabbitslow()
{
rabitslowflag = true;
}
IEnumerator Rabbitslowfunc()
{
envPlaymove4.rabbitspeedup = 0.8f;
yield return new WaitForSeconds(2);
envPlaymove4.rabbitspeedup = 1;
rabitslowflag = false;
Debug.Log("rabitslowflagfalse");
}
public void Wolfmodeonoff()
{
wolfmode = !wolfmode;
Debug.Log("switchmode");
if (wolfmode)
{
wolfimage.SetActive(true);
}
else
{
wolfimage.SetActive(false);
}
}
}
無事機能した。