Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# unity网络:在服务器上的客户端之外看不到预置_C#_Unity5_Unity Networking - Fatal编程技术网

C# unity网络:在服务器上的客户端之外看不到预置

C# unity网络:在服务器上的客户端之外看不到预置,c#,unity5,unity-networking,C#,Unity5,Unity Networking,我试图让玩家创建shurikens,但它们只出现在制作它们的客户机上。我已将网络标识添加到shuriken预置,并将shuriken预置添加到network manager中已注册的可繁殖预置。以下是播放器脚本中用于创建shuriken预制件的以下命令: void CmdThrowShuriken(){ //creates knife shurikenCount -= 1; myAnimator.SetTrigger("throw"); if (shuri

我试图让玩家创建shurikens,但它们只出现在制作它们的客户机上。我已将网络标识添加到shuriken预置,并将shuriken预置添加到network manager中已注册的可繁殖预置。以下是播放器脚本中用于创建shuriken预制件的以下命令:

    void CmdThrowShuriken(){
    //creates knife
    shurikenCount -= 1;
    myAnimator.SetTrigger("throw");
    if (shurikenCount != 0) {
        if (facingRight) {
            GameObject tmp = (GameObject)Instantiate (knifePrefab, transform.position, Quaternion.identity);
            NetworkServer.Spawn(tmp);
            tmp.GetComponent<Shuriken> ().Initialize (Vector2.left);
        } else {
            GameObject tmp = (GameObject)Instantiate (knifePrefab, transform.position, Quaternion.identity);
            NetworkServer.Spawn(tmp);
            tmp.GetComponent<Shuriken> ().Initialize (Vector2.right);
        }
    }
}
void CmdThrowShuriken(){
//制造刀
shurikenCount-=1;
myAnimator.SetTrigger(“抛出”);
如果(shurikenCount!=0){
如果(朝向右侧){
GameObject tmp=(GameObject)实例化(刀子预置、transform.position、Quaternion.identity);
NetworkServer.Spawn(tmp);
tmp.GetComponent().Initialize(Vector2.left);
}否则{
GameObject tmp=(GameObject)实例化(刀子预置、transform.position、Quaternion.identity);
NetworkServer.Spawn(tmp);
tmp.GetComponent().Initialize(Vector2.right);
}
}
}
和shuriken脚本:

    using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Shuriken_net : NetworkBehaviour {

// Use this for initialization
private float speed = 10;

private Rigidbody2D myRigidbody;

private Vector2 direction;

void Start () {
    myRigidbody = GetComponent<Rigidbody2D> ();
}

// Update is called once per frame
void FixedUpdate(){

}
void RotateRight () {
    transform.Rotate (Vector3.forward * 45);
}
public void Initialize(Vector2 direction){
    this.direction = direction;
}
[ServerCallback]
void Update () {
    myRigidbody.velocity = direction * speed;
    RotateRight ();
}
void OnCollisionEneter(Collision other){
    if (PlayerNet.Instance.health != 0) {
        PlayerNet.Instance.health -= 5;
    }
    if (!isServer) {
        return;
    }
    if (other.gameObject.tag != "Ninja") {
        return;
    }
    if (PlayerNet.Instance.health != null) {
        PlayerNet.Instance.TakeDamage(5);
    }
}
void OnBecameInvisible(){
    NetworkServer.Destroy (gameObject);
}
使用UnityEngine;
使用系统集合;
使用UnityEngine。联网;
公共类Shuriken_net:网络行为{
//用于初始化
私人浮动速度=10;
私人刚体;
专用矢量2方向;
无效开始(){
myRigidbody=GetComponent();
}
//每帧调用一次更新
void FixedUpdate(){
}
void RotateRight(){
变换。旋转(矢量3.forward*45);
}
公共无效初始化(矢量2方向){
这个方向=方向;
}
[服务器回调]
无效更新(){
速度=方向*速度;
RotateRight();
}
void OnCollisionEneter(碰撞其他){
如果(PlayerNet.Instance.health!=0){
PlayerNet.Instance.health-=5;
}
如果(!isServer){
返回;
}
如果(other.gameObject.tag!=“忍者”){
返回;
}
if(PlayerNet.Instance.health!=null){
PlayerNet.实例.承受伤害(5);
}
}
void onbecame隐身(){
NetworkServer.Destroy(游戏对象);
}

}

我对这个API很生疏,但是这个对象有NetworkIdentity组件吗?预制是否已在两个客户端上注册?此外,像您这样在客户端上手动设置变量有点不可靠,除非您使用客户端权限(告诉服务器一个客户端将控制该对象)。通常,数据由服务器命令设置。如果您在没有权限的客户端中设置它,它可能无法同步。是的,我已将NetworkIdentity添加到shuriken中,很抱歉没有提供详细信息,并且播放器预置位于网络管理器中,我确实将shuriken预置添加为注册的可生成预置,我假设这赋予了播放器生成shuriken的权限,然而,你提出了一个很好的观点,我将不得不尝试用客户端权限繁殖玩家。感谢您的回复,我的意思是将shuriken授予客户权限。但你不需要这么做。我发现Unity多人游戏教程在理解这些东西时非常有用,因为它们的代码几乎可以演示所有内容。这是与您相关的页面:在该示例中,他们显然在服务器函数中调用Instantiate()和Spawn()。我认为这可能是您的问题的核心——您正在作为客户机进行实例化和生成。这很有效-谢谢!本教程看起来很棒,非常感谢链接:)