C# Unet:生成具有客户端权限的其他对象
我正在制作一个简单的tic-tac-tac-toe游戏,在Unity中使用新的Unet功能来学习如何使用Unet功能 我有一个大脑代码,生成了9个精灵来组成棋盘,我正在努力将它们设置为x的时候点击。我使用[synchvar]跟踪精灵的状态,并使用钩子在C# Unet:生成具有客户端权限的其他对象,c#,unity3d,unity5,unity-networking,C#,Unity3d,Unity5,Unity Networking,我正在制作一个简单的tic-tac-tac-toe游戏,在Unity中使用新的Unet功能来学习如何使用Unet功能 我有一个大脑代码,生成了9个精灵来组成棋盘,我正在努力将它们设置为x的时候点击。我使用[synchvar]跟踪精灵的状态,并使用钩子在[SyncVar]更改时更改图像。如果我控制服务器,游戏就可以完美运行,但是如果我控制客户端,游戏就什么都不做。据我所知,您可以通过向对象添加本地玩家权限并使用[command]来纠正此问题,但这似乎并不能纠正此问题。下面的代码是附加到我的精灵的代
[SyncVar]
更改时更改图像。如果我控制服务器,游戏就可以完美运行,但是如果我控制客户端,游戏就什么都不做。据我所知,您可以通过向对象添加本地玩家权限并使用[command]来纠正此问题,但这似乎并不能纠正此问题。下面的代码是附加到我的精灵的代码。问题已得到回答,下面的代码反映了更正
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);
}
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine.UI;
使用UnityEngine。联网;
公共类spacescript:网络行为{
公共精灵x;
公共精神o;
斯皮特林德勒;
公共国家;
网络身份myNetId;
无效唤醒()
{
myNetId=GetComponent();
}
公共无效设置状态(int newstate)
{
状态=新闻状态;
如果(状态==1)
{
gameObject.GetComponent().sprite=x;
}
}
void OnMouseDown()
{
GameObject whatplayer=braincode.singleton.GetComponent().returnplayer();
whatplayer.GetComponent().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);
}
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine.UI;
使用UnityEngine。联网;
公共类大脑代码:网络行为{
公共游戏对象空间预制;
静态公共脑码单例;
游戏对象玩家;
公共静态游戏对象大脑;
无效开始()
{
单例=这个;
大脑=游戏对象;
}
公共游戏对象returnplayer()
{
返回球员;
}
公共无效添加玩家(游戏对象玩家)
{
玩家=玩家;
}
公共覆盖无效OnStartServer()
{
for(int x=0;xStackOverflow)允许回答您自己的问题,如果您愿意的话。再次感谢用户3071284提供的所有帮助