C# 网络播放器bug UNITY
你好,当我启动谷歌实时服务时,我遇到了一个衍生问题,两个玩家都落后了,一个玩家被窃听进了地面对撞机。这里是动画: 以下是我从客户端发送的脚本:C# 网络播放器bug UNITY,c#,unity3d,2d,C#,Unity3d,2d,你好,当我启动谷歌实时服务时,我遇到了一个衍生问题,两个玩家都落后了,一个玩家被窃听进了地面对撞机。这里是动画: 以下是我从客户端发送的脚本: void Update() { if (player == PlayerOne) { string PlayerOneData = "PlayerOne" + ":" + player.transform.position.x + ":" + player.transform.position.y; byte[]
void Update()
{
if (player == PlayerOne) {
string PlayerOneData = "PlayerOne" + ":" + player.transform.position.x + ":" + player.transform.position.y;
byte[] PlayerOneDataArr = System.Text.ASCIIEncoding.Default.GetBytes(PlayerOneData);
PlayGamesPlatform.Instance.RealTime.SendMessageToAll(false, PlayerOneDataArr);
// Camera.main.GetComponent<CameraFollow>().setTarget(PlayerOne.transform);
textik.text = "PlayerOne upload " + PlayerOneData;
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Stationary)
{
Vector2 touchPosition = Input.GetTouch(0).position;
double halfScreen = Screen.width / 2.0;
if (touchPosition.x < halfScreen)
{
player.transform.Translate(Vector3.left * 10 * Time.deltaTime);
}
else if (touchPosition.x > halfScreen)
{
player.transform.Translate(Vector3.right * 10 * Time.deltaTime);
}
}
}
else if (player == PlayerTwo)
{
string PlayerTwoData = "PlayerTwo" + ":" + player.transform.position.x + ":" + player.transform.position.y;
byte[] PlayerTwoDataArr = System.Text.ASCIIEncoding.Default.GetBytes(PlayerTwoData);
PlayGamesPlatform.Instance.RealTime.SendMessageToAll(false, PlayerTwoDataArr);
//Camera.main.GetComponent<CameraFollow>().setTarget(PlayerTwo.transform);
textik.text = "PlayerTwo upload" + PlayerTwoData;
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Stationary)
{
Vector2 touchPosition = Input.GetTouch(0).position;
double halfScreen = Screen.width / 2.0;
//Check if it is left or right?
if (touchPosition.x < halfScreen)
{
player.transform.Translate(Vector3.left * 10 * Time.deltaTime);
}
else if (touchPosition.x > halfScreen)
{
player.transform.Translate(Vector3.right * 10 * Time.deltaTime);
}
}
}
}
我的预制件如下所示:
感谢您的任何想法或帮助您多久发送一次数据?确保您发送的邮件不太频繁。确保在传输的位置之间进行插值 我可以推荐Unity的基本网络示例:
你可以在10分钟内让它工作。不需要服务器这是“解决我的错误”问题吗?它自己的问题是什么?你想让我们为你调试吗?这是关于,不是。我每帧都发送一次,但它不能解决我的问题,因为我在同一个位置开始的地面预制,每个位置之间的空间很小。我不知道如何解决我也读了你的链接
public void OnRealTimeMessageReceived(bool IsReliable, string SenderId, byte[] data)
{
string position = System.Text.Encoding.Default.GetString(data);
string[] raw = position.Split(new string[] { ":" }, System.StringSplitOptions.RemoveEmptyEntries);
if (!IsReliable)
{
if (raw[0] == "PlayerOne")
{
PlayerOne.transform.position = new Vector2(System.Convert.ToSingle(raw[1]), System.Convert.ToSingle(raw[2]));
textik2.text = "PlayerOne PRIJAL " + position;
}
if (raw[0] == "PlayerTwo")
{
PlayerTwo.transform.position=new Vector2(System.Convert.ToSingle(raw[1]), System.Convert.ToSingle(raw[2]));
textik2.text = "PlayerTWO prijal " + position;
}
}
}