UNITY Sending RPC from Player 1 to Player 2, But Still Player 1 Values are Changing (The TakeDamage is being called on Shooter's PC and not on other PC where it should go))
I am Making a simple fighting game with a script that is controlling Player Movements and Sending RPC when Attacking (TakeDamage) but the problem is, TakeDamage is being called on the same instance and not on the second instance. The console is showing that RPC is sent but still why it is changing its own values??
The SCRIPT is
using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using UnityEngine; using Photon.Pun;
public class MultiController : MonoBehaviour { Animator Anim; private PhotonView PV; public int distate=0; CharacterController CController; bool CanMove; bool isBusy; bool IsAttacking; public float Health=100f; float MovementSpeed; void Awake() { PV=GetComponent(); Anim=GetComponent(); CController=GetComponent(); }
void Start()
{
if(PV.IsMine)
{
CanMove = true;
MovementSpeed=2f;
IsAttacking=false;
Invoke("CC",2f);
}
}
void CC()
{
CController.enabled=true;
}
void Update()
{
if(!PV.IsMine)
{
return;
}
CheckDeath();
if(IsAttacking==false)
{
Kick();
}
Move();
}
public void Move()
{
if (CanMove == true)
{
if (Input.GetKey(KeyCode.D))
{
Ani("Forward");
Vector3 direction = new Vector3(-1 , 0, 0);
CController.Move(direction * Time.deltaTime * MovementSpeed);
}
if (Input.GetKey(KeyCode.A))
{
Ani("Backward");
Vector3 direction = new Vector3(1 , 0, 0);
CController.Move(direction * Time.deltaTime * MovementSpeed);
}
if (Input.GetKeyUp(KeyCode.A))
{
Ani("Idle");
}
if (Input.GetKeyUp(KeyCode.D))
{
Ani("Idle");
}
}}
public void Kick()
{
if (Input.GetKeyDown(KeyCode.V))
{
Ani("Kick");
IsAttacking=true;
if(distate>0)
{
PV.RPC("TakeDamage",RpcTarget.All);
}
StartCoroutine(AttackDelay());
}
}
IEnumerator AttackDelay()
{
yield return new WaitForSeconds(0.5f);
Ani("Idle");
IsAttacking=false;
}
public void Ani(string signaling)
{
if(signaling=="Idle")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",true);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",false);
}
if(signaling=="Kick")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",true);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",false);
}
if(signaling=="Punch")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",true);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",false);
}
if(signaling=="Forward")
{
Anim.SetBool("isFor",true);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",false);
}
if(signaling=="Backward")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",true);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",false);
}
if(signaling=="Hit")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",true);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",false);
}
if(signaling=="Victory")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",true);
Anim.SetBool("isDied",false);
}
if(signaling=="Death")
{
Anim.SetBool("isFor",false);
Anim.SetBool("isIdle",false);
Anim.SetBool("isKick",false);
Anim.SetBool("isPunch",false);
Anim.SetBool("isHit",false);
Anim.SetBool("isBack",false);
Anim.SetBool("isWin",false);
Anim.SetBool("isDied",true);
}
}
[PunRPC]
void TakeDamage()
{
this.Health=this.Health-10;
}
}