笨木头  2021-12-28 08:58         阅读(2183)     评论(0)
转载请注明,原文地址: http://www.benmutou.com/archives/2926
文章来源:笨木头与游戏开发

我这个系列的文章会有点奇怪,因为这是一个特别小众的需求——基于Blazor、但不使用Canvas来开发游戏。

 

1. 废话环节(可以不看)

其实我们公司不是游戏游戏,但确实有一块功能需要用类似游戏的表现形式,但都是一些比较简单的游戏,类似黑魂、血源、只狼啊什么的,不是!其实就是一些小游戏,像抢答题、拼接树形结构的数据之类的。

 

原本我们是用Unity3D来做的,毕竟公司里就我一个会写游戏,只能按照我的技术栈走了。

确实我也开发好了,游戏也能玩玩了,但毕竟我们是做管理系统的,始终绕不开Web这玩意。在推产品的过程中,客户自然会问:你们这玩意,可以在手机上运行吗?

 

开玩笑,当然可以,只不过,人家要的是在浏览器上运行,当初UnityWebGL版本体验也不太行,很多手机浏览器都跑不起来。至于后来的Tiny Project,我刚开始是很期待的,然后我期待了1个月、半年、1年、2年,啊,正式版仍然遥遥无期。

而我,作为公司里的万金油,并不能经常去写游戏的功能,慢慢的,我对Unity3D也越来越生疏了。

是的,我放弃了,我等不来Tiny Project,我也没精力去研究它。

 

于是,我给老板提议,游戏这块要做Web版的话,就用Blazor吧,未来我们的管理系统也全部移植到Blazor吧。这样的话,我们就能把所有的技术都统一为C#了,我也不会花那么多的精力去跟进React这些前端技术,我只需要掌握C#的技术栈就够了。

 

老板同意了,那是半年多以前的事情了,一直到现在,我们都没时间去移植Blazor版本的管理系统。

但,游戏这块是必定要用Blazor来写的,于是,在空余时间,我就先研究一下怎么用Blazor来写游戏。

 

2.为什么要拒绝用Canvas?(还是废话,可以不看)

Blazor开发游戏,其实已经不是什么奇怪的事情了,大家网上都能搜到很多开源的小游戏例子。

但,大部分用Blazor开发游戏,都绕不开Canvas,毕竟渲染游戏对象,确实用Canvas比较舒服。

我原本也想用Canvas的,我也参考了这个项目:mizrael/BlazorCanvas: Simple 2D gamedev examples using Blazor and .NET 5 (github.com)

Canvas确实应该是首选,正经写游戏的话,还是得用它。

 

但我们公司不一样,我们穷,开发团队都是同时兼顾多种领域的开发工作,所以,我的策略很简单——尽量用现成的东西。

Canvas绘制游戏对象什么的,会更符合游戏开发者的习惯,涉及到坐标、碰撞这些功能,实现起来会更加轻松。然而,它有个很大的缺点——很难和Html元素混合在一起。

 

举个例子,比如一个战斗角色,要在头顶渲染一个血量条,用Canvas的话,这个血量条只能自己再封装一个组件。但如果能用Html元素,那就直接用AntDesignBlazor这个库的Progress组件。

更多的,游戏的UI界面,如果UI里要展示一些由Canvas绘制的内容,那又得做一些特殊的处理才能实现。

总而言之,Canvas本身和Html元素是隔离开的,要混合在一起,必定要做特殊处理。

 

而我们的游戏,逻辑本身不复杂,但必须要有一些UI实现游戏玩法,如果不能方便地使用现成的UI库,对我们来说是致命的,我们没有精力去重新封装这些UI

 

所以,我只能做出这个奇怪的决定——不使用Canvas

 

3.关于本系列文章

经过一段时间的研究,我成功地用Html元素(利用现成的Blazor UI库)来展示游戏角色、处理游戏角色逻辑,将角色的渲染和UI方便地融合。

 

一方面我参考了Unity3DTransformComponentGameObject等实现方式(只是粗略参考,我并没有研究透Unity3D),另一方面也参考了上面提到的使用Canvas的项目:mizrael/BlazorCanvas: Simple 2D gamedev examples using Blazor and .NET 5 (github.com),主要是参考它对于游戏逻辑的控制。

 

如果凑巧你也希望不使用Canvas来开发Blazor的游戏,那,希望这个Demo和文章能帮上一点忙吧。

 

Github

mutouzdl/BlazorGameWithoutCanvas: 基于Blazor开发游戏,并且不使用Canvas。一个简单的Demo (github.com)

 

文章目录索引:

[BlazorGameWithoutCanvas]0.前言:基于Blazor开发游戏,并且不使用Canvas

[BlazorGameWithoutCanvas]1. 游戏循环

[BlazorGameWithoutCanvas]2.游戏对象和组件渲染

[BlazorGameWithoutCanvas]3. 解决坐标系的问题

 

0 条评论
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发