【发布时间】:2017-02-19 11:54:07
【问题描述】:
我正在尝试了解 Unet,但我无法掌握它的窍门,尽管遵循了一些教程。
我正在制作一个 2d 游戏,而我目前的困扰是更新我的角色精灵的转动方式(向左或向右)。
我的玩家预制件有:Sprite 渲染器、rigidbody2D、网络身份(设置为本地玩家权限)和网络转换。
这是附加到每个播放器的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class CharController : NetworkBehaviour {
public float maxSpeed = 1f;
[SyncVar]
bool facingRight = true;
Animator anim;
// Use this for initialization
void Start () {
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
}
void Moving()
{
float move = Input.GetAxis("Horizontal");
GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
if(move > 0 && !facingRight)
{
RpcFlip();
}
else if(move < 0 && facingRight)
{
RpcFlip();
}
anim.SetFloat("MovingSpeed", Mathf.Abs(move));
}
private void FixedUpdate()
{
if (!isLocalPlayer)
{
return;
}
// handle input here...
Moving();
}
[ClientRpc]
void RpcFlip()
{
if (isLocalPlayer)
{
//facingRight = !facingRight;
//currentSprite.flipX = !currentSprite.flipX;
}
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
我知道这很可能是我做错了一些超级简单的事情,这只会增加询问这个问题的痛苦,但非常感谢任何帮助!谢谢
编辑:我的游戏设置方式,其中一个玩家既是主机又是客户端,我不知道这是否会使其变得更难,但这正是 unity 在本地玩时的方式。
【问题讨论】:
-
一个很好的建议是将您的客户端和服务器代码放入完全不同的文件。您经常会看到示例代码被硬塞在同一个文件中。如果你只使用两个单独的文件,对于初学者来说实际上更容易也更合乎逻辑。
-
谢谢,但尝试回答我的问题会更有帮助;)
-
fross - 很公平,但我就是懒得理会。我知道你会想出来的:)
标签: c# unity3d multiplayer unity3d-2dtools unity3d-unet