C# DarkRift 游戏服务端框架教程 01 开始和安装 以及客户端场景搭建

入门指南

欢迎您,并很高兴知道您想学习DarkRift!本教程旨在成为一个全面的指南,为任何想要开始使用DarkRift的人提供帮助,无论您有多少网络经验。尽管如此,作为一个讨厌过度简化的人,我会尽力让对于有网络经验的人也感到有趣!

如果您想学习DarkRift,您需要对C#有扎实的掌握,并且对Unity有很好的了解。DarkRift还广泛使用多线程,因此,尽管我们在本教程中不会使用多线程,但要充分发挥DarkRift的优势,您需要非常了解多线程!

作为教程,我们将重新创建一个受欢迎的游戏,称为Agar.io。我们不会实现它的所有功能,但我们将开始一个基本的移动和吃东西的系统,您可以在练习后添加其他功能。

完成的Agar项目可在GitHub上的两个部分中获取:Unity项目插件

安装

在本节中,我们将介绍如何下载和安装DarkRift。

创建一个新的Unity 2D项目,然后进入Unity资产商店,搜索DarkRift并单击下载。它会询问您要导入哪些部分,现在只要导入所有内容即可。

在项目的根文件夹中,现在会有一个名为DarkRift Server的zip文件,请将其解压到Unity项目之外的某个地方(例如您的桌面)。

注意:如果您将其解压缩到Unity项目中,Unity会抛出很多错误,因为项目中会有相同名称的库文件,所以不要这样做。

如果您还没有这样做,现在是查看DarkRift中包含的演示项目并了解如何使用服务器的好时机。

Unity场景

设置DarkRift

在一个空的Unity场景中添加一个空的GameObject,将其重命名为“Network”,然后添加一个DarkRift -> Client组件。

这是DarkRift的第一个基本部分,客户端脚本将为您连接到服务器,并允许您发送和接收消息 - 而且它甚至还为您内置了一些有用的工具!让我们看一下它的Unity界面。

  • Address 是您要连接到的服务器所在的IP地址,默认情况下设置为本地主机(运行游戏的同一台计算机)用于开发。 
  • Port 是您设置的服务器监听的端口号,默认为4296。
  • IP Version 是您要使用的IP地址类型,最可能是IPv4。
  • Auto Connect 意味着当Unity调用Start方法时,客户端将尝试建立连接。如果关闭此选项,则需要从您的代码中手动调用UnityClient.Connect()。
  • Invoke From Dispatcher 意味着客户端将从Unity的主线程中引发所有事件,因此您无需担心同步和多线程。如果禁用此选项,则需要自己处理同步和调度到主线程,但您应该能够看到性能提升。请参见Dispatcher。
  • Sniff Data 意味着客户端将为了调试目的打印接收到的消息的详细信息

将所有内容保持不变。

Players

下载或制作一个带有透明背景的白色圆形,以便我们可以为不同的玩家着色,分辨率越高越好。我使用了这个大白色圆形

创建一个名为AgarObject的C#脚本,并添加以下我们稍后将使用的辅助函数:

[RequireComponent(typeof(Renderer))]
public class AgarObject : MonoBehaviour
{
    [SerializeField]
    [Tooltip("The speed that the player will move.")]
    float speed = 1f;

    [SerializeField]
    [Tooltip("Multiplier for the scaling of the player.")]
    float scale = 1f;

    Vector3 movePosition;

    void Awake()
    {
        movePosition = transform.position;
    }

    void Update()
    {
        if (speed != 0f)
            transform.position = Vector3.MoveTowards(transform.position, movePosition, speed * Time.deltaTime);
    }

    public void SetColor(Color32 color)
    {
        Renderer renderer = GetComponent<Renderer>();
        renderer.material.color = color;
    }

    public void SetRadius(float radius)
    {
        transform.localScale = new Vector3(radius * scale, radius * scale, 1);
    }

    public void SetMovePosition(Vector3 newPosition)
    {
        movePosition = newPosition;
    }
}

将此脚本添加到一个新的Sprite GameObject中,并将白色圆形精灵分配给SpriteRenderer的sprite字段。 将其设置为名为NetworkPlayer的预制件,然后创建一个名为MouseController的新C#脚本:

[RequireComponent(typeof(AgarObject))]
public class MouseController : MonoBehaviour
{
    AgarObject agarObject;

    void Awake()
    {
        agarObject = GetComponent<AgarObject>();
    }

    void Update ()
    {
        Vector3 mousePoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mousePoint.z = 0;

        agarObject.SetMovePosition(mousePoint);
	}
}

将MouseController脚本添加到NetworkPlayer GameObject中,并将其设置为单独的预制件ControllablePlayer(为了清晰起见,现在应该有两个版本:不带MouseController的NetworkPlayer和带MouseController的ControllablePlayer)。您应该能够测试您的玩家并获得适合您的正确速度值的感觉。

确保NetworkPlayer的速度应该是ControllablePlayer的1.5倍。

 ControllerPlayer

Food

下载或制作一个食物一样的白色正方形,以便我们可以给它不同的颜色。 由于它是正方形,透明背景可能不是必需的。 我使用了这个大白色正方形

创建一个只包含正方形和AgarObject脚本的新预制件,将其速度设置为0,然后确保您的场景仅包含我们的Network对象和Main Camera。

Camera

最后,在我们开始网络设置之前,创建一个包含以下内容的CameraFollow脚本:

public class CameraFollow : MonoBehaviour
{
    [SerializeField]
    public float speed = 5f;

    public Transform Target { get; set; }

    void Update ()
    {
        if (Target != null)
        {
            Vector3 targetPos = Target.GetComponent<Renderer>().bounds.center;
            transform.position = Vector3.Lerp(
                transform.position,
                new Vector3(targetPos.x, targetPos.y, transform.position.z),
                speed * Time.deltaTime
            );
        }
    }
}

将CameraFollow脚本添加到Main Camera中,以便稍后使用它,并将相机的背景颜色设置为白色。

因为我们正在制作一个2D游戏,请确保您的Scene View处于2D模式,并使相机正交。

现在是保存这个场景 这是我们现在要做的所有客户端逻辑!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值