我正在尝试在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;
}
}
}
虚拟形象预制件:
1条答案
按热度按时间rxztt3cl1#
好的,所以经过多次尝试我找到了解决方案。问题是客户端没有被授权改变它自己在网络中的位置,所以我不得不在NetworkTransform脚本中添加一个额外的覆盖来给客户端授权。
这就解决了它。:)