首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Player Child上获取本地Player权限

在Player Child上获取本地Player权限
EN

Stack Overflow用户
提问于 2018-10-18 09:03:35
回答 1查看 1.1K关注 0票数 2

我有我的手预制连接到播放器预制作为一个孩子。我想在我的手预制(球员的孩子)产卵枪预制。这样我就可以从手的高度做这个了吗?

目前我正在从手中产生枪,但它只在单人身上起作用。当我和两个玩家一起玩的时候,在产生一把枪的时刻。客户端的游戏崩溃。这是我得到的错误:

代码语言:javascript
复制
NullReferenceException: Object reference not set to an instance of an object
UnityEngine.Networking.NetworkServer.SpawnWithClientAuthority (UnityEngine.GameObject obj, UnityEngine.Networking.NetworkConnection conn) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:1565)
HandHolder.CmdGetGun () (at Assets/Scripts/HandHolder.cs:27)
HandHolder.Update () (at Assets/Scripts/HandHolder.cs:19)

这就是我的手工代码:

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class HandHolder : NetworkBehaviour {

    [SerializeField] GameObject gun;
    private GameObject playerGun;
    // Update is called once per frame
    void Update () {
        if(GetComponentInParent<NetworkIdentity>().isLocalPlayer)
        {
            if (playerGun)
            {
                playerGun.transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z - 1);
                playerGun.transform.rotation = transform.rotation;
            }
            else if (Input.GetKeyDown(KeyCode.I))
            {enter code here
                CmdGetGun();
            }
        }
    }

  // [Command]
    public void CmdGetGun()
    {
        playerGun = Instantiate(gun, transform.position, transform.rotation) as GameObject;
        NetworkServer.SpawnWithClientAuthority(playerGun, GetComponentInParent<NetworkIdentity>().connectionToClient);
    }
}

当我在CmdGetGun()方法之前添加命令时,在产生枪的瞬间我得到了这个错误:

代码语言:javascript
复制
There is no NetworkIdentity on this object. Please add one.
UnityEngine.Networking.NetworkBehaviour:get_isServer()
HandHolder:CallCmdGetGun()
HandHolder:Update() (at Assets/Scripts/HandHolder.cs:19)

但是当我将NetworkIdentity添加到我的孩子手预置中时,它告诉我hasAuthority,isLocalPlayer对于手和玩家都是假的。

我不知道我怎么才能在手中预制的枪。

以下是组件和树:

EN

回答 1

Stack Overflow用户

发布于 2018-10-18 09:23:18

你的网络对象是你的播放器,所以你需要通过你的播放器路由你的网络功能。

在player类中调用CmdGetGun()*,然后从那里调用它。

*CmdGetGun()不应为命令

或者,您可以将CmdGetGun作为命令调用,但这样您就不需要网络实例化,而只需要本地实例化(该命令将称为所有客户端,因此所有客户端都将在本地创建枪)。

编辑

CmdGetGun将在所有客户机上创建该对象,但它不会像您期望的那样将其设置为父对象。您可能应该尝试我提到的第二种方法(将其作为命令调用,但在本地实例化)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52865527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档