Unet: создание других объектов с правами клиента

Я занимаюсь созданием простой игры в крестики-нолики, используя новые функции Unet в Unity, чтобы научиться использовать функции Unet.

У меня есть мозговой код, который порождает 9 спрайтов, составляющих доску, и я работаю над тем, чтобы при нажатии на них устанавливались значения x. Я использую [synchvar] для отслеживания состояния спрайтов и хук для изменения изображения при изменении [SyncVar]. Игра отлично работает, если я управляю сервером, но ничего не делает, если я управляю клиентом. Насколько я понимаю, вы исправляете это, добавляя права локального игрока к объекту и используя [команду], но это, похоже, не решает проблему. Код ниже — это то, что прикреплено к моим спрайтам. На вопрос был дан ответ, и приведенный ниже код отражает исправление.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.Networking;


public class spacescript : NetworkBehaviour {
    public Sprite x;
    public Sprite o;
    SpriteRenderer sr;
    public int state;
    NetworkIdentity myNetId;

    void Awake ()
    {

        myNetId = GetComponent<NetworkIdentity>();

    }

    public void setstate(int newstate)
    {
        state=newstate;

        if (state == 1) 
        {
            gameObject.GetComponent<SpriteRenderer> ().sprite = x;
        }
    }

    void OnMouseDown()
    {

        GameObject whatplayer = braincode.singleton.GetComponent<braincode> ().returnplayer();
        whatplayer.GetComponent<playerscript> ().thingwasclicked (myNetId, gameObject);


    }




}

мои плитки создаются следующим кодом

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.Networking;

public class braincode : NetworkBehaviour {
    public GameObject spaceprefab;
    static public braincode singleton;

    GameObject players;
    public static GameObject brain;
    void Start ()
    {

        singleton = this;
        brain = gameObject;
    }
    public GameObject  returnplayer()
    {
        return players;
    }
    public void add_player(GameObject player)
    {

        players = player;


    }
    public override void OnStartServer()
    {

        for (int x=0; x<3; x++) {
            for (int y=0; y<3; y++) {

                GameObject  space = (GameObject)GameObject.Instantiate(spaceprefab, transform.position, Quaternion.identity);

                space.transform.position = new Vector3 (-3 + (2 * x), -3+ (2*y), 0f);
                NetworkServer.Spawn (space);
            }
        }

    }
}

и мои объекты игрока имеют следующий код

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.Networking;

public class playerscript : NetworkBehaviour {


    void Start () 
    {


        if (isLocalPlayer) 
        {

            braincode.brain.GetComponent<braincode> ().add_player (gameObject);

        }
    }

    public void thingwasclicked(NetworkIdentity tiles , GameObject whoclicked)
    {
        Cmdassignstate (tiles,whoclicked);
    }

    [Command]
    public void Cmdassignstate(NetworkIdentity tile, GameObject whoclicked)

    {

        RpcUpdateState (1,whoclicked);

    }

    [ClientRpc]
    void RpcUpdateState(int newState, GameObject tile)
    {
        tile.GetComponent<spacescript> ().setstate (1);

    }




}

person tburninator    schedule 09.11.2015    source источник
comment
StackOverflow позволяет ответить на ваш собственный вопрос, если вы так склонны.   -  person user3071284    schedule 11.11.2015
comment
еще раз спасибо за всю помощь user3071284   -  person tburninator    schedule 11.11.2015