Hello,
I’m trying to build game with new Unet. I have player with NIdentity, NTtransform etc.
In my script is var dirIndex for direction of player sprite (up, down, right, left). When is dirIndex changed it will be change sprite of SpriteRenderer. When is dirIndex changed on Host, changes will be conducted on Client, conversely, when Client change his dirIndex, server not register that.
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class Control : NetworkBehaviour {
[SyncVar(hook="OnDirIndex")]
public int dirIndex;
// Update is called once per frame
void Update () {
if (!isLocalPlayer) {
Debug.Log(dirIndex.ToString());
return;
}
position = rb.position;
if (Input.GetKey(KeyCode.W)) {
newPosition = position + Vector2.up * speed * Time.deltaTime;
sr.sprite = playerSprites[0];
dir = Direction.Up;
dirIndex = 0;
}
if (Input.GetKey(KeyCode.S)) {
newPosition = position - Vector2.up * speed * Time.deltaTime;
sr.sprite = playerSprites[2];
dir = Direction.Down;
dirIndex = 2;
}
if (Input.GetKey(KeyCode.D)) {
newPosition = position + Vector2.right * speed * Time.deltaTime;
sr.sprite = playerSprites[1];
dir = Direction.Right;
dirIndex = 1;
}
if (Input.GetKey(KeyCode.A)) {
newPosition = position - Vector2.right * speed * Time.deltaTime;
sr.sprite = playerSprites[3];
dir = Direction.Left;
dirIndex = 3;
}
rb.MovePosition(newPosition);
//handle shooting
if (Input.GetKeyDown(KeyCode.Space)) {
combat.CmdFire (GetDirection());
}
// center camera.. only if this is MY player!
Vector3 pos = transform.position;
pos.z = -50;
Camera.main.transform.position = pos;
}
//will be called on clients when var changed on server
private void OnDirIndex (int i) {
dirIndex = i;
switch (dirIndex) {
case 0:
sr.sprite = playerSprites[0];
break;
case 2:
sr.sprite = playerSprites[2];
break;
case 1:
sr.sprite = playerSprites[1];
break;
case 3:
sr.sprite = playerSprites[3];
break;
default:
break;
}
}
}
Why client not changed hi dirIndex on server?