乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

一个快速实现创意的游戏开发工具,不止适合新手

发表于 2022-09-16

前言

我最近和朋友聊天,越发觉得但凡尝试过自行开发游戏的人,对开发工具应该都有相似的感受:UE4这类引擎上限非常高,但对于编程基础薄弱的人,可能不是第一选择;RPGmaker这一类工具我也用了一段时间,非常好上手,可惜2D画面有些简单。

今天我也想分享一个不错的游戏开发工具,它比较能满足以下人群的需求,文章比较长,大家可以自行判断阅读:

  • 刚刚入门游戏开发的初学者

  • 手头上有个游戏创意,想快速实现的人

  • 希望快速验证游戏玩法和品质的人

    前两天我看到微博上介绍了一个叫罗布乐思(Roblox)的游戏引擎,据说它在全球范围内已经有1亿月活,超过400万的游戏开发者,和超过3000万的作品。

    虽然我猜测那是鹅厂做的一个推广,但还是有点好奇什么工具可以有这么高的月活量,所以试着用了三天,发现它有几个亮点。

引擎非常简单易上手

这个引擎有多容易上手呢?简单到我在没看教程的前提下,就做出了一个游玩时长不到一分钟的横版跳跃小玩法,因为这个游戏大量的预设内容以及简单的脚本语言。

罗布乐思是一个有很多预设模块的3D引擎,比如我在这里展示的城市场景模板。

6c505eea559516304660c4cee93d760d.jpg

除了场景模板,编辑器里还有大量预设好的模型和效果。预设内容大大降低了制作游戏的时间和精力成本,假设你想做一个城市障碍跑酷小游戏,那么只需要打开城市模板,加入各种汽车、楼房甚至形状部件,就可以直接跑起来了。

当然,这些预设内容也是可以修改的,以这辆车为例,右上角的资源管理器显示,你可以控制的部分具体到某个车门、车窗以及乘客座位。再复杂点,你还可以实现对这辆车的加速速度、车轮扭矩、发动机动力等各种效果的控制。

如果你想做更多更复杂的玩法如捏脸、回合制、战棋等等,通过脚本就可以实现,官网的教程里也有对RPG类等级系统、任务线、武器刷新、NPC等各种内容的设置教程,连重生点也只需要单击就可以添加。

罗布乐思这个工具,可以说是把能简化的内容都帮你简化了一遍,非常友好。只要跟着教程走,很快你的游戏想法就能让人们玩儿上了。

并且,这个引擎用的脚本语言是lua。虽然相比起主流如C#,lua比较小众,但事实上它作为一个轻量小巧又五脏俱全的语言,概念简单,学起来是比较容易的。

对这一部分的实现有兴趣,可以到罗布乐思的创作者主页感受一下,在这里泡上一段时间,简单的游戏制作应该难不倒你。(指路https://developer.roblox.com/zh-cn/learn-roblox/all-tutorials)

大量的免费美术资源

在工具箱的“商店”里,有官方提供的大量免费美术资源,涵盖各种内容和类别。如果你在搜索框里输入“hair”,那么搜出来的不止是可以覆盖在部件表面上的超多种毛发材质,还有许多直接可以使用的发型贴图——一个换装小游戏的发型选择界面十分钟内就可以完成了。

老实说,我身边有不止一个朋友表示过,想参加游戏比赛或是做游戏,却因为缺乏美术资源或队友而难以实现。当然这个商店里的美术资源主要满足的是基本需求,胜在可以帮你快速地给自己的游戏套好一个皮,不至于光秃秃的。

对于在画面风格上有所追求的人,我在罗布乐思的中文论坛也看到有人做出过很不错的画面效果。

0ebf37e707b7b2ebb2ae1986777165e5.jpg 这是开发者Joseph155用四个星期时间制作的《23号公寓》,这种画风和光影让我想到了《我的世界》和《模拟人生》。

e2018002457e89692e0244f6649e4c44.jpg

这是我在罗布乐思网站发现的游戏《ROSES》,它的光影在网站里应该算非常优秀的了。按我的理解,这种效果能够通过插件实现,同时选项卡里可以直接管理插件,如此一来美术效果上自然可以有更多的实现空间。

没有服务器成本,还能一键发布多个平台

但我认为这个工具最重要的两个优势,是没有服务器成本——也就是能够零成本做联机游戏,以及一键多平台发布。

由于这款工具的客户端和服务端是集成一体的,这使它不仅能够免费提供服务器,还能够免费负责容灾、运维等一系列网络端工作。

B站上有一位做独立游戏的Up主做了个试玩罗布乐思的视频,他只用一小时就做了个简单跑酷,发布之后,他还直接用PC和iPad登陆不同账号并联机游玩自己的游戏。

(视频指路:https://www.bilibili.com/video/av76363666)

f57037c0d13350ce437145677d844bee.jpg 也就是说,这个一小时做出来的小跑酷已经实现了联机功能,而且Up主并不需要操心服务器问题。这是非常节省人力精力的,以前我还泡在MC某著名私服的时候,运营团队有位负责网络的大神,因为熊孩子太多都被逼得退群两次,更别提搭服务器的成本了。

此外,根据我的理解和官网的说法,罗布乐思上的游戏可以只通过一个按键直接发布在PC、安卓、iOS,甚至是Xbox和VR平台的罗布乐思客户端,然后那些不同系统和设备上的玩家就可以直接玩到你的游戏。当然这应该只是海外的情况,国内如何我不是很确定。

34a991aac186784f75ed3d49b2b43739.jpg 这也体现在测试选框里的一个功能上:点击模拟器就可以看到在不同主流设备上的模拟画面,这应该就是为了便于在各种设备上发布作品而设计的。做完之后直接点击发布,你会得到一个网址,任何人在浏览器上打开这个网址,或是在任何系统与设备的罗布乐思客户端上搜索游戏名,都能玩到这个游戏。

很明显,这完全省去了中间漫长痛苦的各平台打包过程,想想只是把游戏传个Steam就需要多久,还得分成不同的操作系统,移动设备上也没办法玩到——在这里只要点击一下发布。

有了这些已经设计好的功能,剩下的就只是好好把游戏创意实现出来,钻研一个真正好玩的玩法。依赖这款游戏的超高月活,游戏创意与玩法的质量会很容易得到验证。

不过这工具虽然很实用,但在国内很少人知道,网上关于这个游戏的信息也很少。

bd9a253e5c04b243e1afe84cd4842bdc.jpg 所以我自行搜索过不少资料,发现YouTube上的个别Roblox视频能达到7000多万的播放量,社区(指路https://robloxforum.com;https://devforum.roblox.com)活跃程度也很高。

还有18岁高中生通过罗布乐思年收入上百万美元的新闻,这是17年的事儿了。

2b39017fd4866344361ddf595504bb9a.jpg

但是我估计过不了多久,罗布乐思就会在国内变得更有知名度,因为那个所有游戏都躲不过的鹅厂已经找上门来了。很明显,罗布乐思很快就要进入中国市场了。

就看最近的新闻,它们推出了一个北极星计划,准备花3000万扶持创作者,另外还有技术和流量扶持,以及优先出海的名额;最近还有一个征集作品的创意比赛。只是这部分内容比较多,我也不太记得,有兴趣可以去搜一下。

我个人认为,如果大家都认可罗布乐思在开发游戏方面的实用性,接下来鹅厂又能好好做国内落地运营,未来这可能是一个很不错的社区。毕竟鹅厂要用心还是能做点东西出来的。当然,大家有别的想法欢迎留言讨论。

本文转载自: 奶牛关

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

独立游戏开发者必备工具汇总

发表于 2022-09-16

前言

对于独立开发者而言, 使用一些免费且好用的工具相对来说会更加有利, 接下来我们围绕以下几点进行工具的汇总:

  • 开源免费: 不用考虑版权问题 解决后顾之忧
  • 跨平台: 可随时切换平台开发 这个不必多说
  • 工具得好用

工具汇总

  1. Krita

    开源免费的绘画工具, procreate的替代品, 可绘画和制作逐帧动画

    GitHub

    官网

    image-20220915162224967

    image-20220915161819097

  2. Blender

    这个大家都熟悉, 免费开源的三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案

    Github

    官网下载

    image-20211228145312330

  3. Pixelorama

    也是一款强大的像素画绘制工具, 基于Godot引擎的GDScript语言编写, 功能强大 软件跨平台, 可以说是Godot的完美搭档, 我猜想未来可能会将该工具直接集成进Godot内部

    Github

    官网

    image-20220915155142976

    有Web在线版 也可以下载到本地使用:

    image-20220915155311899

  4. Godot

    免费开源的轻量级游戏开发引擎, 麻雀虽小五脏俱全, 支持2D和3D游戏的开发, 内置Tilemap和2D骨骼, 中小型游戏完全胜任

    官网地址

    GitHub地址

    image-20220915162249596

  5. 虚幻引擎

    如果要做大型3D游戏, 那么虚幻必然是首选, 它也是开源软件, 但是并不免费, 收入超过100万美金的部分按照5%来计算交费, 这样一来 对于个人而言 和免费无异

    Github: 这个需要授权才能访问

    点击进入官网

    image-20220915163612724

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用Git同时将代码推送到多个仓库

发表于 2022-09-16

前言

随着GitHub的制裁, 我开始考虑将一些代码同步推送到国内的一些代码托管厂商, 比如gitee或者codingnet

gitee可以直接对github上的仓库进行克隆和更新, 这一点还是比较方便的, 不过手动同步代码总是麻烦一些, 而且容易遗忘, 所以我们可以考虑在push的时候将代码同时推送到多个仓库

具体实现如下:

具体实现

  1. 首先定义一个仓库地址合集, 名字自定义, 我们将其命名为all

    1
    git remote add all git@github.com:xxx/xxx.git
  2. 然后将需要同时推送的仓库地址追加进入该合集中

    1
    git remote set-url --add all git@gitee.com:xxx/xxx.git
  3. 此时我们输入git remote -v可以查看当前仓库所有地址信息, 如下:

    1
    2
    3
    $all	git@github.com:xxx/xxx.git (fetch)
    $all git@github.com:xxx/xxx.git (push)
    $all git@gitee.com:xxx/xxx.git (push)
  4. 最后推送仓库到远程

    1
    git push all master
  5. 如果你想移除某个仓库合集

    1
    git remote rm all

附加

关于仓库地址的配置我们可以直接在 .git/config 查看,git默认合集名为origin

如果你习惯了输入git push origin master来推送仓库, 那么我们可以直接打开config文件然后在origin合集下追加其他仓库的地址, 如下:

image-20220915173750105

保存后, 我们就可以使用啦

如果你担心文本输入出错, 也可以采用命令行的形式进行地址追加:

1
git remote set-url --add origin git@gitee.com:xxx/xxx.git

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用netlify部署静态博客网站

发表于 2022-09-15

前言

最近我部署在github上的一个静态网站突然不能访问了, 排查一看原来是github账户被封禁了, 我想有可能是受到了最近俄罗斯制裁的影响, 因为这个账号我当初是用大爬梯注册的, 对方可能以为我是俄罗斯人

问题找到之后 我决定暂时先不注册新Github账号了, 直接换成netlify

netlify有很多优势:

  • 单账号不限制网站数量
  • 可直接从github或者gitlab仓库中拉取代码自动部署
  • 支持HTTPS访问
  • 国内访问速度不比gitpages差

于是我直接将网站静态文件上传到了netlify, 关于部署的具体流程 详见如下:

开始使用

首先登陆netlify网站并登录, 如果你的博客源码放在了Github上, 那么可以直接使用Github账号关联登录

点击进入netlify官网

登录之后会出现以下面板, 我们点击Add new site按钮添加一个新站点:

image-20220915123216935

点击后出现多个选项:

  • import an existing project:表示从Github中的仓库中直接拉取代码
  • start from a template: 表示基于某个模板创建一个新的仓库
  • Deploy manually: 表示手动上传网站静态文件

接下来 我以hexo博客为例, 介绍第一种和第三种的用法

第一种 import an existing project

点击后进入仓库选择页面, 我们可以选择从指定的托管厂商拉取网站源码:

image-20220915121740890

由于我网站源码托管在了Github, 于是我点击Github选项, 进入到仓库选择页面:

image-20220915121922914

选择好后进入网站部署配置页面, 填入我们需要让netlify在拉取我们的仓库后进行的指令操作,hexo g生成静态文件 然后将生成的静态文件上传到netlify:

image-20220915122130743

填好后点击Deploy site, 然后netlify会自动拉取代码并部署网站

紧接着 我们来到网站设置选项卡中配置自定义域名:

image-20220915122650516

需要将自定义域名以CNAME的方式解析到xxxxx.netlify.app, 如果你的域名是阿里云注册的, 直接去阿里云控台配置即可

解析配置完毕后, netlify会自动给网站配置SSL证书实现域名https访问:

image-20220915122938054

此时 我们就可以使用域名正常访问我们的网站啦:

image-20220915123105502

第三种 Deploy manually

这个就比较简单了, 点击后会进入到如下页面:

image-20220915123323777

我们只需将public文件夹拖拽到页面 即可自动上传部署

上传完后回到netlify主页就能看到网站了, 然后进行自定义的域名配置即可正常访问

当然了 如果不用自定义域名 直接使用netlify提供的二级域名也能访问, 这个大家都明白 就不多赘述了

网站测速

以下是国内访问测速图, 总体还不错 :

image-20220915123913425

思考

经过此次账号封禁, 我开始担忧自己存放在Github上的数据安全性问题了, 万一国内开发者收到制裁 Github来个大扫除, 岂不是完蛋, 不过 这对于国内的代码托管厂商而言也许是个难得的机会

所以我接下打算 将重要数据做个多地备份处理

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

快速上手免费开源游戏引擎Godot

发表于 2022-09-10

介绍

Godot是一款免费开源的游戏引擎, 其优点如下:

  • 免费开源
  • 体积小 非常轻量 而且功能齐全
  • 跨平台开发 支持Windows Mac Linux Android甚至Web在线开发
  • 脚本语言简单 语法和python类似
  • 游戏跨平台运行
  • 内置脚本编辑器 无需额外安装第三方编辑器

当然 它也有一定的劣势:

  • 对H5的支持不太好 不适合做页游
  • 不支持小程序
  • 2D比较成熟 但3D相对Unity和UE而言弱一些

总之 中小型的游戏开发 完全可以胜任

官网地址

GitHub地址

官方中文文档

快速上手

以下介绍针对有编程语言基础的同学食用

我们知道所谓引擎 其实就是一团封装好的代码而已, 将一些常用且重复的逻辑进行抽取简化 方便开发者调用 从而提升游戏开发的效率

image-20220913144306654

在Godot中 每一个节点就是一个对象, 场景是一个节点 精灵也是一个节点 都是对象(如果你是android开发 我们可以将其看成是布局文件中的控件)

如果我们想在某个类中创建一个对象, 那么直接在该类中创建一个节点, 比如我们想在Main这个类中创建Control对象:

image-20220913144722992

既然是对象, 那么肯定有继承关系 属性和方法, 我们可以从右侧检查器面板中看到继承关系以及本类和父类们的属性 :

image-20220913144543831

而右侧节点面板中的信号列表, 其实就相当于我们平常所说的监听回调:

image-20220913145102898

如果需要查看该对象的方法以及方法说明, 我们可以直接在检查器面板中打开随时查看:

image-20220913145406023

Godot进阶

  1. 使用场景自动加载的形式创建单例

    image-20220914113325298

常用快捷键

  1. 添加节点

    1
    ctrl+A
  2. 全局搜索

    1
    ctrl+shift+F
  3. 复制物体

    1
    ctrl+D
  4. 播放动画

    1
    shift+D
  5. 停止动画

    1
    S

游戏导出

以导出Android包为例, 首先需要在编辑器设置中指定好SDK和签名路径:

image-20220914114349233

签名可以用以下指令生成:

1
keytool -keyalg RSA -genkeypair -alias 用户名 -keypass 密码 -keystore debug.keystore -storepass 密码 -dname "CN=Android Debug,O=Android,C=US" -validity 9999 -deststoretype pkcs12

紧接着进入导出界面, 选择Android, 然后提示模板缺失, 此时我们点击管理模板:

image-20220914114704962

然后点击下载模板:

image-20220914114745522

这个模板文件 包含了所有支持平台的基础框架包:

image-20220914115341762

此时 我们再次进入导出面板, 配置签名后点击导出项目就可以了:

image-20220914115952330

其他平台导出方法可参考官方文档, 当然还有贴吧小伙伴的经验贴可参考:

跨平台导出参考

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

JS读取本地json文件的方法汇总

发表于 2022-09-05

前言

对于单纯的静态网站而言, 我们有时候可能会直接将json数据放在本地, 此时涉及到json文件内容读取的问题

假设html同级目录下有一个名为data.json的文件, 读取的方式有:

第一种 使用ajax

1
2
3
4
5
6
7
8
9
$.ajax({
url: "data.json",//同文件夹下的json文件路径
type: "GET",//请求方式为get
dataType: "json", //返回数据格式为json
success: function (data) {//请求成功完成后要执行的方法
console.log(data);
}

})

第二种 getJson

1
2
3
$.getJSON("data.json", function (data) {
console.log(data)
});

第三种 使用原生XMLHttpRequest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

var url = "data.json"
// 申明一个XMLHttpRequest
var request = new XMLHttpRequest();
// 设置请求方法与路径
request.open("get", url);
// 不发送数据到服务器
request.send(null);
//XHR对象获取到返回信息后执行
request.onload = function () {
// 解析获取到的数据
var data = JSON.parse(request.responseText);
console.log(data)

}

跨域问题

我们在进行本地代码测试的时候, 如果以双击的形式打开html, 会出现跨域问题, 浏览器控台报错如下:

1
Access to XMLHttpRequest at 'file:///Users/songjian/Desktop/data.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https, isolated-app

解决方法有两种:

  1. 第一种是给网页添加一个域名, 比如localhost, 我们可以使用python或者nodejs在本地启动一个服务, 这里以python3为例:

    1
    python -m http.server 8000

    启动服务后, 浏览器输入localhost:8000, 即可正常获取到本地json数据

  2. 第二种是修改本地浏览器设置, 以Windows平台谷歌浏览器为例, 启动时添加参数--allow-file-access-from-files

    20201223114910

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

acme.sh证书自动部署教程

发表于 2022-09-02

前言

本页面介绍了 ACME.sh 结合 CertCloud 的部署流程。

在开始之前需要完成 证书ACME自动部署 页面的前两个步骤。

创建 ACME 目录 URL

  1. 登录 CertCloud 账户,点击【自动化】->【ACME】->【添加 ACME 目录 URL】 ACME URL 生成操作步骤
  2. 在弹出框中输入具有标识性的名称,选择证书来源[订单,产品],选择相应的订单或产品 组织 ,点击【添加】按钮。ACME 界面会新增一条记录。
  3. ACME 界面会新增一条记录 ,点击对应记录的 【部署】 按钮,在跳转的页面选择 acme.sh,点击复制图标复制 acme.sh 部署命令 。

当前,CertCloud ACME 仅支持 OV 和 EV TLS / SSL 证书。
如果需要查看详细的 ACME URL ,则只需要点击对应数据的“ 部署 ”按钮,就可以看到详细的 ACME URL 信息。

安装

官网:ACME.sh GitHub项目地址

1
curl  https://get.acme.sh | sh

普通用户和 root 用户都可以安装使用。

安装过程:

  1. 默认安装 acme.sh 到你的 home 目录下:
1
#cd ~/.acme.sh/

为了方便使用 acme.sh,可以创建 一个 bash 的 alias:

1
alias acme.sh=~/.acme.sh/acme.sh

颁发并安装证书

  1. 通过 SSH 连接到安装有 ACME 客户端的 Web 服务器。
  2. 在终端提示符下,使用 ACME.sh 客户端命令执行上述复制的颁发命令请求证书。ACME.sh 客户端颁发、安装以及重颁发示例:
1
2
3
4
5
6
7
8
# 获取
sudo acme.sh --issue -d DOMAIN --dns DNS_TYPE --server YOUR-ACME-URL --days DAYS

# 安装
sudo acme.sh --installcert -d DOMAIN --key-file YOUR-KEY.pem --fullchain-file YOUR-CERT.pem --reloadcmd "YOUR-SERVER-RELOAD"

# 获取并安装(以上两条命令合在一起)
sudo acme.sh --issue -d DOMAIN --dns DNS_TYPE --server YOUR-ACME-URL --days DAYS && sudo acme.sh --installcert -d DOMAIN --key-file YOUR-KEY.pem --fullchain-file YOUR-CERT.pem --reloadcmd "YOUR-SERVER-RELOAD"
  • DOMAIN 需要替换为申请时提交的域名信息,可以为多个。
  • DNS_TYPE 为需要验证的域名的 DNS 的类型,不同的类型需要配置不同的环境变量。(预审核通过的可以直接配置为 dns_dp ,不需要配置密钥信息)
  • DAYS 为申请的证书的请求周期,应比当前订单的密钥轮换周期时间小。
  • YOUR-ACME-URL 为先前创建的 ACME 目录 URL (请参阅 创建 ACME 目录 URL)。
  • YOUR-KEY.pem 表示服务配置的证书私钥的路径地址信息。
  • YOUR-CERT.pem 表示服务配置的证书文件的路径地址信息。
  • YOUR-SERVER-RELOAD 表示服务重载服务的命令。(具体的实例,可以看下方的 ACME.sh 部分常用命令)

注:可以根据自己的需要和服务器环境自定义 ACME 客户端执行命令。

ACME返回的错误和错误消息与 CertCloud API 中返回的错误和错误消息相同。有关错误代码及其含义的列表,请参见 Open API 错误。

完成后,终端将显示一条成功消息
恭喜你!ACME 证书请求已完成,并且新发行的证书已安装(保存)在 Web 服务器上。可以访问网站以确认安装成功。

常用命令

为了更方便使用,提供了部分 ACME.sh 的常用命令。

字段信息 解释
- -issue 签发请求
- -days [days] 请求签发证书的周期,配合 –issue 使用
- -server [ACME 目录 URL] 证书服务商的 ACME 目录 URL,配合 –issue 使用
- -installcert 安装证书
-d [网站域名] 配置证书的域名信息
- -webroot [网站跟文件路径] 文件验证需要的网站跟文件路径
- -dns [DNS类型] 配置验证域名的DNS信息
- -cert-file [证书保存的路径] 安装证书保存的路径
- -key-file [私钥保存的路径] 安装私钥保存的路径
- -fullchain-file [证书链保存的路径] 安装证书链保存的路径
- -reloadcmd [Web 重载命令] 安装证书完成之后Web服务的重载命令
  1. 文件验证

    1
    acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/ --server https://acme.certcloud.cn/acme/directory/XXX
  2. DNS 验证( 以 DNSPod ,阿里 DNS 为例)

    1
    2
    3
    4
    5
    6
    7
    export DP_Id="XXX"
    export DP_Key="XXX"
    acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com --server https://acme.certcloud.cn/acme/directory/XXX

    export Ali_Key="XXX"
    export Ali_Secret="XXX"
    acme.sh --issue --dns dns_ali -d example.com -d www.example.com --server https://acme.certcloud.cn/acme/directory/XXX

    更多支持的DNS类型详见 [ACME.sh 支持的 DNS 类型大全]

  3. 证书部署:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Nginx example:

    acme.sh --installcert -d example.com --server https://acme.certcloud.cn/acme/directory/XXX \
    --key-file /path/to/keyfile/in/nginx/key.pem \
    --fullchain-file /path/to/fullchain/nginx/cert.pem \
    --reloadcmd "service nginx force-reload"

    Apache example:

    acme.sh --installcert -d example.com --server https://acme.certcloud.cn/acme/directory/XXX \
    --cert-file /path/to/certfile/in/apache/cert.pem \
    --key-file /path/to/keyfile/in/apache/key.pem \
    --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
    --reloadcmd "service apache2 force-reload"
  4. 获取并部署

    1
    2
    3
    4
    5
    acme.sh --issue -d example.com -d www.example.com --dns dns_dp --server https://acme.certcloud.cn/acme/directory/XXX --days 30 
    && acme.sh --installcert -d example.com -d www.example.com \
    --key-file /etc/nginx/conf.d/example.com.key \
    --fullchain-file /etc/nginx/conf.d/example.com.cer \
    --reloadcmd "service nginx force-reload"

    days 的周期为 30 天,acme.sh 会每 30 天去请求 server 去获取新的证书,并进行安装。

本文转载自: https://docs.certcloud.cn/docs/installation/auto/acme/acmesh/

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用ACME搭配freessl网站实现免费https证书的生成和更新

发表于 2022-09-02

背景

最近在使用netlify的静态网站托管服务, 如果需要自定义域名的话 需要提供https证书, 如下图:

image-20220902113147959

SSL证书介绍

是一种配置在服务器上的数字证书, 由可信的数字证书颁发机构(CA)颁发, 类似于我们的驾驶证, 它具有服务器身份验证和数据传输加密功能。

证书实际上就是几串字符密钥 以文本的形式存放在诸如.key .cer .csr 结尾的文件中:

image-20220902121037323

文件介绍:

  • .key文件: 证书私钥
  • .cer文件: certificate的缩写,这就是数字证书
  • .csr文件:certificate signing request的缩写 证书签名请求文件,含有公钥信息

这些文件需要存放在服务器中, 当浏览器通过域名对服务器进行访问时, 可获取服务器中的证书, 证书中含有公钥

那么浏览器和服务器 一个持有私钥一个持有公钥 进行加密会话 保证数据安全

自制SSL证书

既然所谓的证书就是RSA密钥, 那我们自然可以自己生成, 比如:

在线生成SSL证书

image-20220902142026451

但是这种自己颁发的证书是不被浏览器认可的, 就好比自己给自己手写一张驾驶证, 完全没有任何法律效力

因此我们只能向CA机构申请证书, 国际知名的CA机构有GeoTrust、Comodo、DigiCert、Sectigo、Thawte、GlobalSign、Symantec、AlphaSSL等

大部分都是收费的, 那么我们要用免费的话, 可以退而求其次,freessl这个平台是个不错的选择

freessl.cn

该网站免费提供由Let's Encrypt 与 TrustAsia两家CA机构颁发的SSL证书, 我们注册后即可免费申请, 但是证书有效期只有三个月, 到期后需要重新申请

为了解决自动续期的问题 我们需要用到一个工具, 那就是acme.sh

ACME.SH

acme.sh是一个数字证书管理工具, 利用它我们可以:

  • 辅助申请SSL证书文件到本地
  • 内置定时程序 到期自动申请证书
  • 安装证书到指定目录

GitHub地址

工具使用
  1. 工具安装

    1
    2
    3
    $ git clone https://github.com/acmesh-official/acme.sh.git
    $ cd ./acme.sh
    $ ./acme.sh --install -m my@example.com
  2. 证书申请

    1
    acme.sh --issue -d 域名 -w 证书存放目录

    acme.sh 默认会从zerossl获取证书, zerossl和freessl.cn一样, 也是一个证书中介网站 ,zerossl提供由Let's Encrypt 颁发的数字证书, 每个注册账户可以申请三个免费证书

    image-20220902150909721

    但是 由于免费的数量有限 所以我们不选择从zerossl获取

    如果只是临时测试用的话 可以用一用 直接在官网申请并下载证书zip包即可:

    image-20220902151803041

    image-20220902152401511

    考虑到长期使用, 因此我们选择freessl.cn

  3. 从freessl.cn获取证书

    freessl支持acme自动化

    在网站输入域名并且进行校验后会生成一个acme地址, 这个地址相当于账号凭证, 利用这个它我们可以借助acme.sh快速获取证书:

    image-20220902152759063

    具体指令如下:

    1
    acme.sh --issue -d 域名  --dns dns_dp --server 你的acme地址

    执行后自动将证书下载到本地:

    image-20220902113332949

    最后我们将证书密钥拷贝至托管服务器中, 这里以netlify为例:

    image-20220902154250607

    填写完后点击安装, 证书成功识别

    image-20220902113754771

    此时 我们即可通过自定义域名访问netlify中的静态网站了, 在浏览器中可以查看当前获取到的证书信息:

    image-20220902141040045

关于自动更新

通常我们会将acme.sh安装至服务器中, 然后实现证书的自动更新, 由于我这边使用的是netlify, 所以三个月到期后需要手动执行一下代码

更多关于acme.sh自动化的用法, 可以参见《acme.sh证书自动部署教程》

其他可以获取免费SSL证书的网站

  • OHTTPS: https://ohttps.com/

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

使用Hugo搭建个人博客

发表于 2022-09-01

简介

Hugo和Hexo类似, 也是一个搭建静态博客的工具, Hugo由Go语言编写,相比之下 Hugo编译速度要比Hexo快很多

不过各有各的优点, 目前我两个工具都在用, 主要还是以Hexo为主

接下来介绍Hugo的使用

工具安装

  1. Mac用户

    1
    brew install hugo
  2. Windows用户

    GitHub下载安装包

    下载完后 给hugo.exe配置环境变量, 方便任意目录使用该程序

安装完后 可以在命令窗口输入hugo version 来检测是否安装成功

工具基础使用

  1. 创建博客空工程

    1
    hugo new site 项目名称

    执行完后会在当前目录下生成工程文件夹:

    image-20220901170044828

    目录介绍:

    • content目录: 用于存放博客文章
    • themes目录: 用于存放博客主题
    • static目录: 该目录下文件不会被渲染 可用于存放静态资源 比如图片js css以及CNAME等等
    • archetypes目录:里面存放文章模版文件
    • data目录:用于存放数据
    • layouts目录:用于存放布局文件
    • config.toml文件: 配置文件
  2. 新建文章

    1
    hugo new post/first.md
  3. 下载博客主题

    博客必须要有一个主题 不然渲染出来的页面是空白, 我们以hyde主题为例:

    1
    2
    3
    # 创建 themes 目录
    $ cd themes
    $ git clone https://github.com/spf13/hyde.git
  4. 生成静态文件

    需要指定以那个主题进行静态页面渲染

    1
    hugo --theme=hyde

    此时目录下会自动生成一个public目录, 里面的文件即为生成的静态文件, 可以直接部署到网站

  5. 部署到GitHub

    添加静态仓库关联:

    1
    2
    3
    $ cd public
    $ git init
    $ git remote add origin https://github.com/xxx/xxx.github.io.git

    或者使用submodule的方式:

    1
    git submodule add -f -b master https://github.com/xxx/xxx.github.io.git public

    最后将静态文件推送到仓库:

    1
    2
    3
    4

    $ git add -A
    $ git commit -m "first commit"
    $ git push -u origin master

    部署这一块 相比hexo要繁琐一些, 我们可以使用脚本或者用GitHub actions自动部署

其他命令

  1. 生成独立页面

    1
    hugo new about.md
  2. 博客本地调试

    调试时同样需要指定一个主题

    1
    hugo server --theme=hyde

    服务启动后 浏览器里打开: http://localhost:1313, 即可看到当前博客页面, 修改文章动态更新

    如果需要让草稿一并加入调试 那么可以加入-D:

    1
    hugo server --theme=hyde -D
  3. 生成静态文件时草稿也进行渲染

    1
    hugo  --theme=hyde -D

    必须是大写的D

进阶使用

  1. 每次执行指令都要指定主题太过繁琐? 没事 我们在配置文件中添加以下代码 配置默认主题即可解决烦恼

    1
    2
    # 主题名称
    theme = "hyde"

    image-20220901174231361

  2. 自定义域名无法访问?

    1. 需要在配置文件中将baseURL参数替换成你的域名
    2. 同时在static目录下新建CNAME文件, 然后输入你的域名

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

虚幻蓝图快速上手

发表于 2022-08-29

前言

蓝图 实际上也是一门编程语言 一种图形化的语言

使用蓝图 可以使开发者们省去代码的编写 即便你不会代码 也能进行游戏开发

这一点 很大程度地吸引了许许多多的游戏爱好者的加入

……

如果你有编程基础的话 那么蓝图上手会非常的快, 接下来 我们来快速入门

语言类比

我们知道 正常的编程的语言 基本上都有变量 函数的概念, 蓝图既然是一门语言, 那么它自然也有 只不过表现形式不太一样罢了

函数

  1. 蓝图中函数的表现形式

    在蓝图中 每一个蓝图节点我们可以视作一个函数

    image-20220829152437687

  2. 函数的定义

    虚幻引擎给我们封装好了许多函数 比如打印字符串的函数 给物体添加材质的函数等等

    如果我们想要自定义一个函数呢, 那么直接在左侧面板中添加一个新函数, 比如 我定义一个名为Test的函数 内部逻辑是比较传入的值是否等于3

    image-20220829180025489

    函数创建好后可以在蓝图事件表中通过鼠标右键进行名称搜索使用:

    image-20220829180313058

    image-20220829180354133

  3. 函数的调用

    节点连线可以表示函数调用和传参, 这种箭头形状的输入口 表示的就是函数调用, 左边调用右边

    image-20220829152624719

  4. 函数传参

    蓝图节点左侧下方的一系列入口 可以理解为函数参数的传递入口:

    image-20220829170225676

事件监听

现代程序的编写几乎离不开监听回调, 在设计模式的领域中也叫做观察者者模式, 我们可以在蓝图编辑面板中左侧查看当前创建事件:

image-20220919152646963

事件主要用于蓝图类之间的信息交互, 当关卡中的某一个子物体需要和所处关卡进行通信时, 我们可以在关卡蓝图中自定义一个事件, 然后子物体蓝图中调用触发:

image-20220919153104557

image-20220919153620945

事件触发命令格式为: ce 事件名

关卡蓝图是当前关卡内所有物体的父级 它可以获取到物体的实例 很容易和子物体进行数据通信, 但是物体并不持有关卡的实例, 所以信息交互需要依靠事件

变量

  1. 定义全局变量

    添加变量后 我们可以在属性细节面板中 设置变量的数据类型

    image-20220829153316870

  2. 定义局部变量

    在左侧面板中 点击鼠标右键调出菜单 可以增加局部变量的设置入口, 其操作和使用与全局变量一样 这里不再赘述

    image-20220829155333576

  3. 初始化变量的值

    通常情况下 我们在定义变量的同时 会对该变量进行值的初始化

    image-20220829153622095

  4. 获取变量值

    程序运行时 我们需要动态读取变量的值, 此时我们按住Ctrl键 然后鼠标左键将变量拖拽至事件图标中

    getvar

    此时会生成一个获取变量值的函数(蓝图节点)

  5. 设置变量的值

    同样的 我们要生成一个设置变量值的函数时, 按住Alt键 然后鼠标左键将变量拖拽至事件图标中即可

    setvar

注释

任何一门编程语言都有注释 方便我们对于程序的维护 蓝图自然也有

选中你需要进行注释的蓝图节点 然后按键盘C 则会出现一个方块将选中的节点包裹 此时可以输入注释内容

image-20220829153005361

逻辑执行

比如我们要执行一个在屏幕上打印字符串的逻辑, 那么我们可以在游戏启动的时候 调用打印字符串的函数(节点)

事件开始运行 这个函数 表示的就是游戏启动的 相当于Java中的main函数, 只执行一次

image-20220829160253326

编写好逻辑后 运行游戏 就能看到屏幕上打印的内容了

printString

对象

蓝图是一门面向对象的编程语言 在游戏中每一个物体都是一个对象

  1. 创建对象

    在世界大纲中显示的所有物体都是对象

    image-20220829161621529

    而创建对象方法很简单就是直接将素材拖拽至场景中

    2022-08-29 16-32-03.2022-08-29 16_34_17

    有些素材拖入场景后世界大纲中找不到 比如材质 说明该素材在蓝图事件表中不能直接通过右键的方式来创建对象引用

    材质比较特殊 对硬件资源消耗比较大 我们通常会在材质基础上创建材质实例 其好处是一方面减少资源消耗 另一方面可以暴露参数在游戏过程中动态修改属性

    对于材质对象的创建 我们可以选中对应材质 然后鼠标右键创建材质实例:

    image-20220829170844561

    点击创建后 素材面板会多出一个材质实例, 这个实例是材质的子类:

    image-20220829171302287

    我们可以在蓝图中创建数组变量来存放该实例:

    image-20220829173504954

  2. 获取对象实例

    我们只需在场景或者世界大纲中选中需要引用的物体对象, 然后在蓝图事件表中 右键创建对象引用节点即可

    image-20220829164655130

    动图操作如下:

    2022-08-29 16-48-00.2022-08-29 16_49_34

  3. 修改对象属性

    比如修改某个物体的位置属性, 我们可以在游戏启动时调用位置修改函数

    image-20220829165958763

关卡蓝图和蓝图类

  • 关卡蓝图: 重点在关卡 而不是蓝图 是指以蓝图语言编辑的关卡
  • 蓝图类: 重点在类 是指以蓝图语言定义和编辑的类

在游戏引擎中 关卡本质就是一个集合了众多Actor的类

虚幻引擎类继承关系

1
2
3
4
5
6
7
        |--Actor--Pawn--Character
|
Object--|--PlayerController
|
|--Info--GameModeBase
|
|--ActorComponent--SceneComponent

开发文档参考

官方文档

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…111213…48

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

479 日志
139 标签
RSS
© 2024 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%