- Home /
Using RPC's to SetActive() Objects with PUN (Photon Networking)
Hey everybody. I have come across an issue that despite the components that run the alternate scripts being disabled and the addition of checking the PlayerPrefs Key in the Input check, all of the abilities activate simultaneously. (each ability's component starts off disabled and the ability manager enables them based upon PlayerPrefs).
Now, the code works just fine using the standard blah.SetActive(); setup. The issue only arises when I switch to an RPC so that the abilities activation will show on all clients.
I've been searching around to see if I can figure out how to fix this issue, I've done some reading on RPCs and in that context it all seems fine. I feel like i'm missing a really simple but significant line of code somewhere.
using UnityEngine;
using System.Collections;
public class NavalChakraProjVomit : Photon.MonoBehaviour {
public AudioClip vomitAudio;
public float cooldownTimer = 5f;
public float cooldownTimeRemaining = 0f;
public float activationTimer = 4f;
public float activationTimeRemaining = 0f;
public GameObject vomitPrefab;
private bool activated = false;
// Use this for initialization
void Start () {
activationTimeRemaining = activationTimer;
}
// Update is called once per frame
void Update () {
cooldownTimeRemaining -= Time.deltaTime;
if (Input.GetButtonDown ("Ability1") && cooldownTimeRemaining <= 0 && activated != true && PlayerPrefs.GetInt("OffenseDrug") == 1) {
if(photonView.isMine){
UseAbility ();
}
}
if(activated == true){
activationTimeRemaining -= Time.deltaTime;
if(activationTimeRemaining <= 0f){
cooldownTimeRemaining = cooldownTimer;
photonView.RPC ("DisableObject", PhotonTargets.AllBuffered, false);
// vomitPrefab.SetActive(false); // NON-RPC VARIANT
activated = false;
}
}
}
void UseAbility(){
GetComponent<AudioSource> ().PlayOneShot (vomitAudio);
activationTimeRemaining = activationTimer;
activated = true;
if(activationTimeRemaining > 0){
photonView.RPC ("DisableObject", PhotonTargets.AllBuffered, true);
// vomitPrefab.SetActive (true); //OLD NON-RPC VARIANT
}
}
[PunRPC]
void DisableObject(bool setActive){
vomitPrefab.SetActive (setActive);
}
}
Your answer
Follow this Question
Related Questions
Photon Unity Networking (Viking Demo) Error: Argument is out of range. 1 Answer
Networking already instantiated assets 1 Answer
Update position via state syncronization results in weird movement. 0 Answers
Photon Virtual Joystick won't work after another player has joined the network...? 1 Answer
Bullet Collision in Networking Game. 0 Answers