我目前正在尝试制作一个小型绘图游戏,两个玩家可以通过网络同时绘图。
我正在使用GameObject
aTrailRenderer
来绘制线条。
现在只有主机玩家的图纸在两台机器上显示。
如果客户端玩家单击并尝试绘制,我可以看到生成了一个新对象,但变换没有更新。生成的预制件有一个NetworkIdentity
(检查了本地玩家权限)NetworkTransform
并附加到它上面。以下脚本由两个玩家生成,并且还有一个NetworkIdentity
(检查了本地玩家权限)。
我认为我实际上做错了什么CmdTrailUpdate
以及如何处理它,但我真的不知道是什么。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class TrailDrawer : NetworkBehaviour {
private Plane objPlane;
private GameObject currentTrail;
private Vector3 startPos;
public GameObject trail;
public void Start()
{
objPlane = new Plane(Camera.main.transform.forward * -1, this.transform.position);
}
// Update is called once per frame
void FixedUpdate() {
if (isLocalPlayer) {
if (Input.GetMouseButtonDown(0)) {
CmdSpawn();
} else if (Input.GetMouseButton(0)) {
CmdTrailUpdate();
}
}
}
[Command]
private void CmdTrailUpdate() {
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
float rayDistance;
if (objPlane.Raycast(mRay, out rayDistance)) {
currentTrail.transform.position = mRay.GetPoint(rayDistance);
}
}
[Command]
private void CmdSpawn(){
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
float rayDistance;
if (objPlane.Raycast(mRay, out rayDistance)) {
startPos = mRay.GetPoint(rayDistance);
currentTrail = (GameObject)Instantiate(trail, startPos, Quaternion.identity);
NetworkServer.Spawn(currentTrail);
}
}
}