- Home /
SetActive for objects on a local server
Well i have searched everything on anything about this. i have Unity4 because i cannot afford to buy the next version(not sure if that changes anything)
Am i supposed to use RPCs or SyncVar? My code is for my player i have a gameobject for each animation(i know that is not traditional) so for running there is a gameobject with an animation for running that is set active during a particular event only problem is other players can't see this change. if someone could point me in the right direction. Thanks in advance.
I'm gonna show you guys my code but don't make fun #pragma strict
var Speed : float;
var NEGSpeed : float;
var Speedx10 : float;
var JumpDis : float;
var JumpDis2 : float;
var Run : GameObject;
var nRun : GameObject;
var JP : boolean;
var CanAnim : boolean;
//@SyncVar
//public var AnimationLists : int;
var StabAnimation : GameObject;
var ShootAnimation : GameObject;
var IdleHands : GameObject;
var ShieldAnimation : GameObject;
var Switch : int;
var bow : boolean;
var melee : boolean;
var shield : boolean;
var build : boolean;
var Ammo : GameObject;
var Cube : GameObject;
var AmmoAmount : int;
var CubeQAmount : int;
var FirePoint : GameObject;
function Start () {
}
function OnTriggerEnter(col : Collider)
{
if (networkView.isMine)
{
if (col.tag=="Mooshroom")
{
Jumping2();
}
if (col.tag=="Ammo")
{
AmmoAmount += 10;
}
}
}
@RPC
function Update () {
NetworkView.RPC(
OnSerializeNetworkView
if (networkView.isMine)
{
if (Input.GetKey ("w"))
{
transform.Translate(Vector3.forward * Speed);
Run.SetActive(true);
}
if (Input.GetKey ("w") && Input.GetKey (KeyCode.LeftShift))
{
Run.SetActive(true);
transform.Translate(Vector3.forward * Speedx10);
}
if (Input.GetKeyDown ("space") && JP)
{
Jumping();
JP = false;
}
if (!Run)
{
Run.SetActive(false);
}
if (Input.GetKey("w") || Input.GetKey("a") || Input.GetKey("s") || Input.GetKey("d"))
{
Run.SetActive(true);
nRun.SetActive(false);
}else{
nRun.SetActive(true);
Run.SetActive(false);
}
if (Input.GetKey ("a"))
{
transform.Translate(Vector3.right * NEGSpeed);
}
if (Input.GetKey ("s"))
{
transform.Translate(Vector3.forward * NEGSpeed);
}
if (Input.GetKey ("d"))
{
transform.Translate(Vector3.right * Speed);
}
if(Input.GetKeyDown(KeyCode.Tab))
{
CycleWeapons();
}
if(Input.GetKeyDown(KeyCode.LeftControl) && shield)
{
shielding();
}
if (CanAnim)
{
IdleHands.SetActive(true);
}else{
IdleHands.SetActive(false);
}
if (Input.GetButtonDown("Fire1") && bow && AmmoAmount > 0)
{
Network.Instantiate(Ammo, FirePoint.transform.position, FirePoint.transform.rotation,0);
shooting();
}
if (Input.GetButtonDown("Fire1") && build && CubeQAmount > 0)
{
Network.Instantiate(Cube, FirePoint.transform.position, FirePoint.transform.rotation,0);
shooting();
}
if (Input.GetButtonDown("Fire1") && melee && CanAnim)
{
stabbing();
}
}
}
function CycleWeapons ()
{
if (networkView.isMine)
{
Switch-=1;
if (Switch <=0)
{
Switch =4;
}
if (Switch==1)
{
bow = true;
melee = false;
build = false;
shield = false;
}
if (Switch==2)
{
bow = false;
melee = true;
build = false;
shield = false;
}
if (Switch==3)
{
bow = false;
melee = false;
build = true;
shield = false;
}
if (Switch==4)
{
bow = false;
melee = false;
build = false;
shield = true;
}
}
}
function shooting ()
{
if (networkView.isMine)
{
CanAnim=false;
ShootAnimation.SetActive(true);
yield WaitForSeconds(0.25);
ShootAnimation.SetActive(false);
CanAnim=true;
}
}
function stabbing ()
{
if (networkView.isMine)
{
CanAnim=false;
StabAnimation.SetActive(true);
yield WaitForSeconds(0.30);
StabAnimation.SetActive(false);
CanAnim=true;
}
}
function shielding ()
{
if (networkView.isMine)
{
CanAnim=false;
ShieldAnimation.SetActive(true);
yield WaitForSeconds(5);
ShieldAnimation.SetActive(false);
CanAnim=true;
}
}
function Jumping()
{
if (networkView.isMine)
{
rigidbody.AddForce(transform.up * JumpDis);
yield WaitForSeconds(1);
JP = true;
}
}
function Jumping2()
{
if (networkView.isMine)
{
rigidbody.AddForce(transform.up * JumpDis2);
}
}
Answer by RisingDead_xTR · Nov 05, 2017 at 04:16 PM
You can upgrade to Unity 2017.2 for FREE. It seems like u r using PUN (which i dnt use, i use UNet) . So I can't gv u an exact code but the concept. Here is a code to do it in UNet(jst in case).
void Start()
{
GameObject Object;
CmdDisableObject (Object);
}
[Command] //Command functions are sent to the server from client to run it there
void CmdDisableObject (GameObject obj)
{
RpcDisableObject(obj); //Telling the server to tell all clients(including me) to disable the 'obj'.
}
[ClientRpc] //ClientRpc funtions are sent to all clients from server to run it there
void RpcDisableObject(GameObject obj)
{
obj.SetActive (false); //Server tells all clients to disable this 'obj'.
}
Concept: I (client) am telling the server to tell all clients to disable the 'obj'. Hope it helps. Edit: I just read tht u need to enable objects. However i think u cn do it from the concept.
So for JavaScript could I do var idle : Boolean; var run : Boolean; var fight : Boolean; var FightState : GameObject; var WalkState : GameObject; var IdleState : GameObject; function start() { //TESTIING Idle.enabled=true fight.enabled=true run.enabled=true } @ClientRpc function PlayerState () { If (run) { WalkState.SetActive(true); FightState.SetActive(false); IdleState.SetActive(false); } If (idle) { WalkState.SetActive(false); FightState.SetActive(false); IdleState.SetActive(true); } If (fight) { WalkState.SetActive(false); FightState.SetActive(true); IdleState.SetActive(false); } }
So i was trying this on my script and its spitting out an error when i checked their manual it shows this public class Example extends NetworkBehaviour {
, do i need to add it to my code somehow too?
Answer by J-R-Wood · Nov 06, 2017 at 04:40 AM
I have now got it working if anybody was wondering. the new code looks like this...
#pragma strict
var Speed : float;
var NEGSpeed : float;
var Speedx10 : float;
var JumpDis : float;
var JumpDis2 : float;
var Run : GameObject;
var nRun : GameObject;
var JP : boolean;
var CanAnim : boolean;
var StabAnimation : GameObject;
var ShootAnimation : GameObject;
var IdleHands : GameObject;
var ShieldAnimation : GameObject;
var Switch : int;
var bow : boolean;
var melee : boolean;
var shield : boolean;
var build : boolean;
var Ammo : GameObject;
var Cube : GameObject;
var AmmoAmount : int;
var CubeQAmount : int;
var FirePoint : GameObject;
public var NetAnimState : int;
function Start () {
}
function OnTriggerEnter(col : Collider)
{
if (networkView.isMine)
{
if (col.tag=="Mooshroom")
{
Jumping2();
}
if (col.tag=="Ammo")
{
AmmoAmount += 10;
}
}
}
function Update () {
if (networkView.isMine)
{
if (Input.GetKey ("w"))
{
transform.Translate(Vector3.forward * Speed);
networkView.RPC("MyStateOnNetwork", RPCMode.Others,1);
Run.SetActive(true);
}
if (Input.GetKey ("w") && Input.GetKey (KeyCode.LeftShift))
{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,1);
Run.SetActive(true);
transform.Translate(Vector3.forward * Speedx10);
}
if (Input.GetKeyDown ("space") && JP)
{
Jumping();
JP = false;
}
if (!Run)
{
Run.SetActive(false);
}
if (Input.GetKey("w") || Input.GetKey("a") || Input.GetKey("s") || Input.GetKey("d"))
{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,1);
Run.SetActive(true);
nRun.SetActive(false);
}else{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,2);
nRun.SetActive(true);
Run.SetActive(false);
}
if (Input.GetKey ("a"))
{
// transform.position = Vector3.Lerp(transform.position, realPosition, 0.1f);
transform.Translate(Vector3.right * NEGSpeed);
}
if (Input.GetKey ("s"))
{
transform.Translate(Vector3.forward * NEGSpeed);
}
if (Input.GetKey ("d"))
{
transform.Translate(Vector3.right * Speed);
}
if(Input.GetKeyDown(KeyCode.Tab))
{
CycleWeapons();
}
if(Input.GetKeyDown(KeyCode.LeftControl) && shield)
{
shielding();
}
if (CanAnim)
{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,6);
}
if (Input.GetButtonDown("Fire1") && bow && AmmoAmount > 0)
{
Network.Instantiate(Ammo, FirePoint.transform.position, FirePoint.transform.rotation,0);
shooting();
}
if (Input.GetButtonDown("Fire1") && build && CubeQAmount > 0)
{
Network.Instantiate(Cube, FirePoint.transform.position, FirePoint.transform.rotation,0);
shooting();
}
if (Input.GetButtonDown("Fire1") && melee && CanAnim)
{
stabbing();
}
}
}
function CycleWeapons ()
{
if (networkView.isMine)
{
Switch-=1;
if (Switch <=0)
{
Switch =4;
}
if (Switch==1)
{
bow = true;
melee = false;
build = false;
shield = false;
}
if (Switch==2)
{
bow = false;
melee = true;
build = false;
shield = false;
}
if (Switch==3)
{
bow = false;
melee = false;
build = true;
shield = false;
}
if (Switch==4)
{
bow = false;
melee = false;
build = false;
shield = true;
}
}
}
function shooting ()
{
if (networkView.isMine)
{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,4);
}
}
function stabbing ()
{
if (networkView.isMine)
{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,3);
}
}
function shielding ()
{
if (networkView.isMine)
{
networkView.RPC("MyStateOnNetwork", RPCMode.Others,5);
}
}
function Jumping()
{
if (networkView.isMine)
{
rigidbody.AddForce(transform.up * JumpDis);
yield WaitForSeconds(1);
JP = true;
}
}
function Jumping2()
{
if (networkView.isMine)
{
rigidbody.AddForce(transform.up * JumpDis2);
}
}
@RPC
function MyStateOnNetwork(NetAnimState : int)
{
if (NetAnimState==1)
{
nRun.SetActive(false);
Run.SetActive(true);
}
if (NetAnimState==2)
{
nRun.SetActive(true);
Run.SetActive(false);
}
if (NetAnimState==3)
{
CanAnim=false;
StabAnimation.SetActive(true);
yield WaitForSeconds(0.30);
StabAnimation.SetActive(false);
CanAnim=true;
}
if (NetAnimState==4)
{
CanAnim=false;
ShootAnimation.SetActive(true);
yield WaitForSeconds(0.25);
ShootAnimation.SetActive(false);
CanAnim=true;
}
if (NetAnimState==5)
{
CanAnim=false;
ShieldAnimation.SetActive(true);
yield WaitForSeconds(5);
ShieldAnimation.SetActive(false);
CanAnim=true;
}
if (CanAnim && NetAnimState==6)
{
IdleHands.SetActive(true);
}else{
IdleHands.SetActive(false);
}
}