unity3d 设置变换位置在我的vr网络中不起作用(Unity)

gxwragnw  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在尝试在VR中建立一个简单的多人游戏,为此我用VR控制器和网络管理器制作了一个场景,为每个客户端生成一个化身。我这样做是为了让实际的VR钻机不必通过网络发送,而只是一个化身的表示。我在本地将虚拟角色设置为钻机的位置,然后只将绑定到钻机的每个虚拟角色的位置发送给每个客户端。由于某些原因,每个客户端都有化身生成,但移动只对主机有效。对于所有其他客户端,化身既不在本地空间也不在网络上移动。当我运行Debug.Log(),它确实打印目标的正确位置,但只是不将转换设置为该位置,而是强制它(0,0,0).有人知道为什么会这样吗?
遵循目标脚本:

public class FollowTarget : NetworkBehaviour
 {
     public Transform target;
     public Vector3 offset = new Vector3(0f, 0f, 0f);
     [SerializeField] private bool _isNetworkAvatar;
     [SerializeField] private bool _keepYPosition;
     [SerializeField] private string TagToFollow = "MainCamera";
     private void Start()
     {
         if (_isNetworkAvatar)
         {
             target = GameObject.FindGameObjectWithTag("MainCamera").transform;
             Debug.Log($"Initializing Network Avatar for: {target.gameObject.name}");
         }
     }
     private void Update()
     {
         
         if(!IsOwner) return;
         //Debug.Log($"My Position:{transform.position} should be {target.position}");
         switch (_keepYPosition)
         {
             case true:
                 transform.position = new Vector3(target.position.x, transform.position.y, target.position.z) +
                                      offset;
                 Debug.Log(new Vector3(target.position.x, transform.position.y, target.position.z) +
                           offset);
                 break;
             case false:
                 transform.position = target.position + offset;
                 break;
         }
     }
 }

虚拟形象预制件:

rxztt3cl

rxztt3cl1#

好的,所以经过多次尝试我找到了解决方案。问题是客户端没有被授权改变它自己在网络中的位置,所以我不得不在NetworkTransform脚本中添加一个额外的覆盖来给客户端授权。

protected override bool OnIsServerAuthoritative()
    {
        return false;
    }

这就解决了它。:)

相关问题