Как сделать так, чтобы клиент встал на сторону в единстве? - PullRequest
0 голосов
/ 16 октября 2019

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

Редактировать: Сделал вопрос менее запутанным.

public class EnemyTrigger : MonoBehaviour
{
    private PlayerStats player;
    private CharacterController2D controller;

    public int Damage;
    public float horizontal;
    public float vertical;

    private void Start()
    {

    }

    private void OnTriggerStay2D(Collider2D collider)
    {
        if (collider.tag == "Player" && collider.GetComponent<PlayerStats>().DamageTimer <= 0 && collider.GetComponent<PlayerStats>().isDashing == false)
        {
            player = collider.GetComponent<PlayerStats>();
            controller = player.GetComponent<CharacterController2D>();

            player.TakeDamage(Damage);

            if (this.transform.position.x - player.transform.position.x > 0)
            {
                controller.KnockBackRight(horizontal);
            }
            else
            {
                controller.KnockBackLeft(horizontal);
            }

            controller.KnockBackDown(vertical);
        }

    }
}
public class PlayerStats : NetworkBehaviour {

    [SyncVar] public int Health;

    public GameObject BloodEffect;
    public Transform HealthBar;

    public float DefDamageTimer;
    public float DamageTimer;

    public bool isDashing;
    public int facingDirection;

    private Rigidbody2D m_Rigidbody2D;
    private CharacterController2D controller;
    public AnimationPlayer anim;

    private void Awake()
    {
        m_Rigidbody2D = GetComponent<Rigidbody2D>();
        controller = GetComponent<CharacterController2D>();
    }

    private void Update()
    {
        HealthBar.localScale = new Vector3(Health / 10f, 1f);
        if (DamageTimer > 0)
        {
            DamageTimer -= Time.deltaTime;
        }
        CmdSendDashing(isDashing);
    }

    public void TakeDamage(int Damage)
    {
        Health -= Damage;
        Instantiate(BloodEffect, transform.position, Quaternion.identity);
        anim.Damaged();
        Debug.Log("Player Has Taken " + Damage + " Damage");
        DamageTimer = DefDamageTimer;
        if (Health <= 0)
        {
            Destroy(gameObject);
        }
        CmdSendHealth(Health);
    }


    void CmdSendHealth(int health)
    {
        Health = health;
    }

    void CmdSendDashing(bool isdashing)
    {
        isDashing = isdashing;
    }

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