//tips
//dropitemの認識とUIの設定
モンスター消滅時にアイテムをdropさせ、そのアイテムを特定の場所に収めることを人間側の勝利条件にする。人狼がアイテムを保有し、秘匿した場合、推理と戦闘が行われる。基本的にゴーレムは二人以上で対応することをベースに考え、秘匿できなさそうだが、そこはプレイスキルと騙りでごまかすことはできそう。
試合の冗長化を避けるため試合開始一定時間後に人狼を確認できるような設定を追加する。
ここではdropitemの取得とUIへの反映方法を考える。
まずdropitemアイテムの取得はCubeDTestスクリプトを参考にし、 dropitemアイテムがプレイヤーに触れたら消滅するようにし、一方で
InventoryTest inventorytest = canvas.GetComponentInChildren<InventoryTest>();
inventorytest.Add(item);
を追加しようとしたが、アイテムではなくスキル使用型にするのでインベントリーは必要なさそう。
取得のカウントをして、UIに表示させられる別の形を考えることにする。まずはdropitemにGolemSouldropスクリプトをアタッチ。下記でプレイヤーが触れたら消滅することを確認。OnTriggerEnter(Collider other)だとistriggerのチェックが必要なのでここは、OnCollisionEnterとした。
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == ("Player"))
{
Destroy(this.gameObject);
}
}
ゴーレム消失時にGolemfollowスクリプトの this.transform.position = golem.transform.position + offset;がエラーになっているので、ここも一緒に修正する。
ゴーレム消失時にflagを切り替えるようにする。Golemfollowスクリプトはシーンの空オブジェクトととして存在し、Golemfollowdropスクリプトはゴーレムそのものにアタッチされている。ゴーレム側からシーンの空オブジェクトを[SerializeField] 参照するのは問題ないはず。
[SerializeField]
Golemfollow golemfollow;
public void Dropgolemitem()
{
golemfollow.dropflag = true;
dropitem.SetActive(true);
}
これでエラーも消え、ゴーレムのドロップアイテムも消失させることができた。ただ、destroyしてしまうと、今度は取得したプレイヤーが消滅した時に再度ドロップアイテムを生成しなければならなくなるので、触ったプレイヤーの頭上に非表示で保持する形を取れないか考えてみる。
Dropitem自体に下記のスクリプトをアタッチすることでプレイヤーに取得された後の追跡処理ができるようになった。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GolemSouldrop : MonoBehaviour
{
GameObject targetobj;
public bool dropflag=false;
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == ("Player"))
{
targetobj = collision.gameObject;
this.gameObject.SetActive(false);
//Destroy(this.gameObject);
}
}
void Update()
{
Vector3 offset = new Vector3(0, 3, 0);
if (!dropflag)
{
this.transform.position = targetobj.transform.position + offset;
}
}
public void Dropgolemitem()
{
this.gameObject.SetActive(true);
}
}
ドロップアイテムを拾った数だけカウントを増減させる機能をつけたいので、GolemSoulCounterを実装する。UIに新しいcanvasとimageを作成し、そこの操作プレイヤーの保有アイテム数を反映できるようにする。
GolemSoulCounterオブジェクトの子要素のTextオブジェクトに下記のGolemSoulCounterスクリプトをアタッチ。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GolemSoulCounter : MonoBehaviour
{
int count=0;
string soultext;
void Update()
{
soultext = count.ToString();
GetComponent<Text>().text = soultext;
}
public void SoulCounterplus()
{
count++;
}
}
GolemSouldropスクリプトと連動させ、コライダーの接触時にカウントが増えるようにしておく。これでドロップアイテム取得時にカウントを増加させることができた。
GolemSoulCounterをタップすることでカウントをマイナスし、ドロップアイテムをドロップし直せるように機能を追加する。