//tips
//キャラクターUI整備継続
Foxキャラクターにテレポート機能を実装する。以前作成したwarpControllerスクリプトをFoxにアタッチ。さらに子要素にワープポータルとなるオブジェクトを作成し、setwarpスクリプトを付与する。setwarpスクリプトの方のみcube_pos = GetComponent<Transform>().position;をupdateメソッド以下にも追加したので下記に記載する。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Setwarp : MonoBehaviour
{
public Vector3 cube_pos;
[SerializeField]
warpController warpcontroller;
[SerializeField]
GameObject warpplayer;
void Start()
{
cube_pos = GetComponent<Transform>().position;
}
void FixedUpdate()
{
cube_pos = GetComponent<Transform>().position;
if (warpcontroller.onwarp == true)
{
if (this.transform.parent != null)
{
this.transform.parent = null;
}
}
}
}
これでワープ機能は実装できた。次に霧を発生させる機能を作成する。UIのpanelに色の濃淡を時間経過でつけることで疑似的な霧や暗闇状態を作成することができるが、Unityの既存の設定の中でfogを操作できるものがあることを知ったのでそちらの使い勝手を調べていく。Unityのwindowからrendering/lighting settingsに移りfogのチェックボックスをオンにし、数値を調整。
これで地平線にモヤがかかったようになった。さらにここからカメラで写した映像にエフェクトをつける処理PostProcessingという機能を使用し、モヤの領域を広げていく。Window/Packege Manager/Post Processingからインストール。
インストールするとカメラのコンポーネント検索にPost Process Layerが表示されるようになっているのでそちらをアタッチ。layerにはPostProcessingを設定しておく。空オブジェクトにPost Process Volumeコンポーネントをアタッチし、設定を行った。
対象領域に対して明度などの調整ができるようになった。だが、姿を眩ませるレベルまで明度を上げると目がチカチカするので採用はしないことにした。
Standardassetのdaststorprefabを利用する方法が下記で紹介されていたのでそちらもやってみることにする。
Duststormprefabのインスペクター項目を修正していく。
Duration:15
Prewarm:on
Startlifetime:till 50
Stardsped:0
Startclolor:white
Maxparticles:6000
これによりかなり霧らしいものが生成できた。
これをprefab化してfoxの子要素にする。新たにstormparticleplayスクリプトをアタッチする。ParticlePlayのyield return new WaitForSeconds(3);の秒数を変更しただけの変更にしたところ最初から霧が発生してしまう。Start()のストップアクション前に実行されてしまっているのが問題である。
ここはset activeでの非表示対応にした。新たにfogManagerスクリプトを作成し、foxにアタッチ。子要素のままだとfoxに動きに合わせてfogが動いてしまったので、this.transform.parent = null;で切り離しも行った。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StormParticlePlay : MonoBehaviour
{
private ParticleSystem particle;
void Start()
{
particle = GetComponent<ParticleSystem>();
//particle.Stop();
particle.Play();
StartCoroutine("PartcleStop");
if (this.transform.parent != null)
{
this.transform.parent = null;
}
}
/*
public void ParticleOn()
{
particle.Play();
StartCoroutine("PartcleStop");
}
*/
private IEnumerator PartcleStop()
{
yield return new WaitForSeconds(1);
particle.Stop();
}
}
次にfoxの攻撃を受けたら、攻撃を受けた相手が暗闇状態になる機能を実装する。photon導入後にコードを修正する必要があるが、ベースとなるスクリプトとUI自体は配置しておく。
攻撃判定を行うFoxAttackManagerをまだ作成していなかったのでFoxの右足にスクリプトをアタッチする。
クリックした場合にtrueになるfoxdarkflagを使用し、otherオブジェクトにGameObject FindWithTagでパネル操作を行わせ用としたがインスタンス参照ではFindWithTag("DarkPanel”);ができないようなので別方法をとる。
envPlaymove4.DarkPanelon();とし、envPlaymove4スクリプトの方にパネルをアタッチし、操作できるようにしておいた。
public void DarkPanelon()
{
Darkpanel.SetActive(true);
}