【第14日目】UnityとPUN2とC#のPhotonNetwork.Instatiateでマナトークンを補充する

 

こんにちは、今日はマナトークンをお皿に補充してあげようと思います。

補充するタイミングについて色々と考えたのですが、

一つトークンを取ったら、すぐお皿に一つ補充されるのが一番単純で良いと思ったので、そのようにしてみようと思います。

今回もPhotonNetwork.Instatiateで行おうと思います。

UnityとPUN2のPhotonNetwork.Instatiateでマナトークンを補充する

お皿についているManaPicker.csをいじって、PhotonNetwork.Instatiateを発動してあげたいと思います。

そもそも、お皿からマナトークンを取ると、山札の上にトークンが発生するので、そのタイミングで、お皿の上にも発生させることにします。

そう考えると結構単純ですね。

 

Instantiateをする位置はお皿にスクリプトがそもそもついているので、this.transform.positionか省略してtransform.positionで良さそうです。

後はランダムで位置を多少いじってあげて、トークンが重ならないようにすればいいという事になります。

 

メソッド化して、ManaRifill();で呼んであげるようにしました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class ManaPicker : MonoBehaviour
{
    [SerializeField] Transform manaSpawnPoint;
   
    // Start is called before the first frame update
    private void OnTriggerExit(Collider other)
    {
        Debug.Log("collision");

        PhotonView PV = other.GetComponent<PhotonView>();
        
        if (other.gameObject.tag == "Mana" && PV.IsMine)
        {
            other.tag = "Cost";
                                           
            float x = manaSpawnPoint.position.x - 0.025f + Random.Range(0, 0.05f);
            float y = manaSpawnPoint.position.y + Random.Range(0, 0.05f);
            float z = manaSpawnPoint.position.z - 0.025f + Random.Range(0, 0.05f);

            int xx = Random.Range(0, 180);
            int yy = Random.Range(0, 180);
            int zz = Random.Range(0, 180);

            GameObject mana = (GameObject)PhotonNetwork.Instantiate("Mana", new Vector3(x, y, z), Quaternion.Euler(xx, yy, zz), 0);
                                
            mana.tag = "PreMana";
            Rigidbody RB = mana.GetComponent<Rigidbody>();
            RB.constraints = RigidbodyConstraints.FreezePosition;
            mana.GetComponent<BoxCollider>().enabled = false;

            ManaRefill();
        }
    }

    void ManaRefill()
    {
        float x = transform.position.x - 0.025f + Random.Range(0, 0.05f);
        float y = transform.position.y + Random.Range(0, 0.05f);
        float z = transform.position.z - 0.025f + Random.Range(0, 0.05f);

        int xx = Random.Range(0, 180);
        int yy = Random.Range(0, 180);
        int zz = Random.Range(0, 180);

        GameObject mana = (GameObject)PhotonNetwork.Instantiate("Mana", new Vector3(x, y, z), Quaternion.Euler(xx, yy, zz), 0);
    }
}

 

これで、お皿からマナトークンを一つとると、一つ補充されるようになりました。

 

おわりに

今日は実は色々ありまして、あまりプログラミングが進みませんでしたので、

少なくとも少しは前進したという事をご報告できればいいなと思いました。

 

今日はマナトークンを補充して、ゲームを円滑に進めるための準備が出来たかと思います。

 

それでは、また!

 

おすすめの記事