Мультиплеер - PullRequest
       4

Мультиплеер

0 голосов
/ 05 апреля 2020

Я создаю многопользовательскую игру, использующую фотон, и я не знаю, как объединить свои сценарии, чтобы мой игрок мог видеть, сколько игроков он убил и сколько раз он умер. Я сделал этот скрипт для подсчета смертей, но он не работает, и я не знаю, как добавить его в свой скрипт персонажа.

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




public class DeathsCount : MonoBehaviourPunCallbacks
{

    public Text countText;
    public int deathcount;



     void Start()
    {
        if (photonView.IsMine)
        {
            deathcount = 0;
            CmdDeathsCount();
        }
        else
        {

        }
    }
    void CmdDeathsCount()
    {
        if(photonView.IsMine)
        {
            return;
           
        }
        else
        {

        }
        countText.text = "Death: " + deathcount.ToString();
    }
    [PunRPC]
    void RpcRespawn()
    {
        if (photonView.IsMine)
        {

            deathcount = deathcount + 1;
            CmdDeathsCount();
        }
    }
}

и это сценарий моего персонажа

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
using Photon.Pun;
using Photon.Realtime;
using Photon;
using UnityEngine.UI;


public class Character : MonoBehaviourPun,IPunObservable
{

    Rigidbody2D rb;
    float dirX;
    
    [SerializeField]
    float moveSpeed = 5f, jumpForce = 400f, bulletSpeed = 500f;

    [SerializeField] private float health = 100;
    [SerializeField] private Slider slider;
    [SerializeField] private Gradient gradient;
    [SerializeField] private Image fill;
    public Rigidbody2D bulletPrefabs;
    Vector3 localScale;
   
    public Transform barrel;
    public Rigidbody2D bullet;
   
    // Use this for initialization
    void Start()
    {
        localScale = transform.localScale;
        rb = GetComponent<Rigidbody2D>();
        if (photonView.IsMine)
        {
            
            
        }
        else
        {

        }
    }
    

    public float Health
    {
        get { return health; }
        set
        {
            health = value;
            slider.value = health;
           // fill.color = gradient.Evaluate(slider.normalizedValue);
        }
    }

    private void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.CompareTag("Hurt"))
        {
            if (photonView.IsMine)
            {
                photonView.RPC("Damage", RpcTarget.All);
            }
        }
        if (col.gameObject.tag == "PowerUp")
        {
            if (photonView.IsMine)
            {
                var powerup = col.GetComponent<PowerUp>();
                powerup.Pickup(this);
            }
            else
            {

            }

        }
        if (col.gameObject.CompareTag("Bullet"))
        {
            if (photonView.IsMine)
            {
                bullet = bulletPrefabs;
            }
        }
        else
        {

        }
    }

    [PunRPC]
    void Damage()
    {
        Health -= 20;
    }
    // Update is called once per frame
    void Update()
    {
        if (photonView.IsMine)
        {
            dirX = CrossPlatformInputManager.GetAxis("Horizontal");
            if (dirX != 0)
            {
                barrel.up = Vector3.right * Mathf.Sign(dirX);
            }

            if (CrossPlatformInputManager.GetButtonDown("Jump"))
                Jump();

            if (CrossPlatformInputManager.GetButtonDown("Fire1"))
                Fire();
            
        }
        else
        {

        }
    }

    void FixedUpdate()
    {
        if (photonView.IsMine)
        {
            rb.velocity = new Vector2(dirX * moveSpeed, rb.velocity.y);
        }
    }




    void Jump()
    {
        if (photonView.IsMine)
        {
            if (rb.velocity.y == 0)
                rb.AddForce(Vector2.up * jumpForce);
        }
    }

    void Fire()
    {
        if (photonView.IsMine)
        {
            var firedBullet = Instantiate(bullet, barrel.position, barrel.rotation);
            firedBullet.AddForce(barrel.up * bulletSpeed);
        }
    }

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            stream.SendNext(Health);
        }
        else if (stream.IsReading)
        {
            Health = (float)stream.ReceiveNext();
        }
    }
    public void SetMaxHealth(int value)
    {
        if (photonView.IsMine)
        {
            slider.maxValue = value;
            // The property handles the rest anyway
            Health = value;
        }

    }
}

Есть идеи, что я делаю неправильно? или как мне комбинировать скрипты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...