- Home /
Changing the parent of a transform via RPC
I'm making a photon network game and I have an "OnThrown" event which is called whenever the player with the ball clicks a mousebutton.Here's my code in the ball class that fires the RPC after the Player class fires the OnThrown event
PhotonView photonView;
void Start () {
photonView = gameObject.GetComponent<PhotonView>();
Player.ballThrown += OnClick;
}
void OnClick(Vector3 dir){
this.photonView.RPC("OnThrown",PhotonTargets.All,dir);
}
[RPC]
void OnThrown(Vector3 dir){
Debug.Log(dir);
transform.parent = null;
transform.localScale = new Vector3(.8f,.8f,.8f);
rigidbody.isKinematic = false;
gameObject.collider.isTrigger = false;
gameObject.collider.enabled = true;
rigidbody.AddForce(dir * 500);
}
void OnTriggerEnter(Collider other){
other.GetComponent<Player>().setHasBall(true);
transform.parent = other.transform;
transform.position = new Vector3(other.transform.position.x,.5f,other.transform.position.z - .3f);
transform.localScale = new Vector3(.4f,.4f,.4f);
rigidbody.isKinematic = true;
switch(other.gameObject.tag){
case "Vic":
renderer.material.color = Color.magenta;
break;
case "CJ":
renderer.material.color = Color.blue;
break;
case "Abed":
renderer.material.color = Color.yellow;
break;
case "Clarence":
renderer.material.color = Color.gray;
break;
}
gameObject.collider.enabled = false;
}
Basically, the throw event is supposed to return the ball to the state it was in before being picked up by the player. The method is certainly being called on the other clients, I can tell by the console log message but basically the transforms parent is not changed, resulting in the AddForce having no effect and the player looking like he still has the ball (scale does not change either). I know I could work around this (by manually change the balls position to that of the player who is holding it) but does anyone have any idea why changing the transforms parent doesn't work in RPC?