unity 物体/预设截图

Posted on Thu 29 July 2021 in 游戏开发

日常工作中,经常会遇到需要截图一大堆预设给美术,用于商店、物品图标等场合。

可以使用这个脚本去解决截图问题:

https://gist.github.com/mickdekkers/5c3c62539c057010d4497f9865060e20

https://gist.github.com/fy0/6f5c4ca0e478a96958d94ec9c9b1b4a5 (自己fork一份防止删除)

使用这个脚本需要下载他的 snapshot-camera-demo.zip,然后将Scripts下的

SnapshotCamera.cs、SnapshotCameraTest.cs、SnapshotCameraTestEditor.cs添加进你的项目

举例来说,比如我们要截图的场景有三个物体:

img

img

将SnapshotCameraTest作为Component添加给场景中随便一个对象

img

运行场景,拖动场景中game object到 Object to Snapshot 就可以预览截图。

img

img

img

这时候敲空格键可以保存文件截图,注意是一次一个

img

截图同时会打log

img

图默认是512x512,正交视图,透明底色,符合大部分要求,可以在脚本中定制。

img

参考SnapshotCameraTest代码稍微写一个小脚本,就可以实现批量截图了。


Cascadeur 骨骼绑定简单入门笔记

Posted on Sat 24 July 2021 in 游戏开发

Cascadeur 是一个人物动画的工具。

导入一个模型之后,首先要进行骨骼的绑定。

有两种绑定方式,一种是Rigging tool,一种是Quick rigging tool。

img

先说结论:必须使用 Quick rigging tool,因为不用的话不能使用Auto-Posing,用这软件意义就小了很多。

但是Quick rigging tool生成的绑定经常有问题(例如膝盖反了),所以建议先走一遍Rigging tool的绑定流程,这样你就能知道哪里出了问题,从而手动修复。

绑定流程的话参考这个视频:

https://www.youtube.com/watch?v=w7zO7yObD6c

因为是旧版本所以略有不同。主要一个是在于镜像(Mirror)方式变了。当前版本的镜像方式是这样的:

img

随意框选一下绑好的骨骼,随后左侧填写好参数,点击“Create mirror object”即可。

然后就是这个样子。

img

另外视频最后一部分是关于权重和物体质量的,这个了解下操作方式和代表意义即可,不用真的做一遍,因为后面 …


Continue reading

Unity 人物动画转换 - humanoid / generic 互转

Posted on Thu 22 July 2021 in 游戏开发

前言

先说说什么是humanoid,还有为什么要做转换。

首先,现在常用的人物模型,虽然人物的骨骼和命名不尽相同,但都提供了一组通用的数据来表明人形身体上某些固定的部位分别对应什么骨骼。unity可以读取这组数据来完成自动的rig绑定。

因此拥有humanoid数据的人物模型,即使所有骨骼的名字都不同,人物动作也可以共用。

其次,为什么做转换?

第一个是一些使用unity为工具链的引擎,例如laya只支持generic动画,所以要转换。

第二个是一些软件修改模型会导致humanoid数据丢失变成了generic类型,但是你又想套用一些humanoid动画上去,所以就要拿未丢失humanoid数据的模型给那些动画做一个转换。

具体操作

需要插件 Animation Converter

需要两个相同骨骼的FBX模型(可以是同一个复制两份)。

第一个FBX模型的Animation设置为Humanoid(需要从3D软件导出时带Humanoid信息)。

第二个设置为Generic。

img

打开转换器,先将这两个模型拖到最底下的Input和output,然后修改Output中的选项,并将需要转换的动作拖进Input。

img

最后点击Convert即可,转换后的动画会输出在Output Directory目录。


Blender三角化在制造棱角时的一个应用技巧

Posted on Fri 18 June 2021 in Blender建模

比如我们有一块砖,然后在砖头上环切一刀,做个缺角来增强真实感。

image-20210801180743674

例如这里

img

我们通过bevel压下这个点

img

然后ctrl+T

img

这样一个砖缝就做好了。


六月。天气渐渐热了

Posted on Mon 07 June 2021 in 杂谈

时间来到了六月,夏日。

对我来说,正是踢了被子冷,盖好被子热的时节。

这就导致我梦中无意识的掀开盖上被子,所以精神就很差。

如果不是着凉,就是上火,这也算是我转季节的保留节目罢。

最近一周在接发行给的SDK,说实话写的不是很好(比如我们这种项目结构就完全没有考虑到)。

但是能用。

我渐渐觉得“能用”可能才是一种常态,我之前理解的不对。

我发觉我可能被开源社区那些明星项目给惯坏了,那些无一不是简单易用、文档详实、考虑周到、用户众多、代码优雅、架构完善。

这就导致我对这种“能用”的代码很陌生,不会用。

但是我觉得这种东西可能能够培养一种信心,因为你要接好这个SDK真的是需要坚持的。

当你接不好的时候你就会感到怀疑,

怀疑你的代码有问题,怀疑步骤有问题,怀疑框架有问题,怀疑SDK有问题。

但是你也不知道究竟是TMD哪有问题。

所以就感到怀疑人生。

所以你就必须相信。

相信自己一定能弄好,相信有demo可以我也可以,相信那个代码质量比较一般的SDK。

谨向人类文明的拓世者们献上崇高的敬意,因为这确实不容易。

等真的弄好了,好像确实挺简单的。

然后我看着自己码的游戏,被发行的SDK贴了一堆五颜六色的小广告,也很难形容是一种什么样的感受。毕竟工作完成了吧 …


Continue reading

Wellcome Back

Posted on Sun 06 June 2021 in 杂谈

曾几何时,一个博客项目算是web入门标配。

现在已经不流行这个啦。

我也从“我要自己写一个” 变成了 “呜呜有大佬做过吗我想用” 这样子。

也确实,没有必要。

大佬们也很厉害。

以前开过博客,但是都不怎么认真写。

但我终于还是想要写点什么,所以从一堆吃灰的域名中捡了一个转到外网。

相比专栏,博客算是一种不那么严肃的形式吧,我觉得挺好的。

是时候重新出发了。


从2015到2018,WEB与时光与我

Posted on Wed 10 January 2018 in 遗迹

故事

新的一年如约而来又不期而至,在感叹又年长了一些的同时,也是时候再来一次一年一度的告别与再见的仪式了。

我是一个有些执着于“记录”的人,从开始接触编程到现在有许多年了,过去的代码却还大多能找到,但是很散乱。于是从2015年起,我有了一个新的习惯:每年按照年份创建一个文件夹,在这一年中无论是郑重开坑,还是要做点繁重些的杂务,都在这个年份文件夹里创建一个目录来存放源码。当然太简单的代码用过就不必储存,基本上都随着IEP的关闭一起消失在茫茫内存之中了。

但是这样仍有些乱糟糟的,后来为了直观看出这些项目谁先谁后,于是在文件夹前面加了序号,成了“XX.项目名”这样的格式。

每一年开年的时候,就是和上一年的大部分代码说再见的时候了。创建好新一年的文件夹之后,我会挑选一些上一年的项目。如果项目还在写的话,我就把那目录复制一份到新一年的文件夹里,旧的就永远定格在那一天,这就是我的告别与再会。我觉得时光是一个有些神秘的词汇,而这些代码文本在一定程度上描绘了属于过去某段时光的我,因此也好像也具有了些别样的意义。可能大部分人都希望回到从前,但现实是只能在时光易逝的无奈中向前走着。而在翻阅这些目录的同时,也仿佛在审视自己的过去。

2015年

我们先从有记录的最早一年开始。2015年在web领域算是一个转折点,后知后觉地,我们可以说ES6的正式发布算是一个标志性事件,从此以后前后端分离成为主流的开发方式。但是事实上整个生态链的成熟更加功不可没,今天流行的众多框架和工具都在2014年左右立项,并在2015年基本成熟,包括Webpack …


Continue reading

2017总结:送君千里,终须一别

Posted on Mon 01 January 2018 in 遗迹

开篇

年少的时候,常常见到《写给十年后的自己》这样的作文题目,不知不觉,离那时却真的已有十年了。十年前的我带着对未来的迷茫和少年的无畏开始了高中生活,而十年后的我却早已忘记当年的梦想是什么。命运的无状借由时间之手刻在每一个人的身上,我们对新年的所想也渐渐从对未来的期待到对失去的恐惧。不过,应该只是一些平凡的想法吧,我向来所求不多。

在过去的一年里,果然年计划又不负众望的没有完成。不过好像比去年稍微好了一些?这也未必啊,去年可是搞了python lite解释器这样听起来吊吊的项目(虽然也暂时鸽置了)。

下面是年终总结:

游戏

游戏方面,首先是果断的交出了 Dota2 会员年卡,还是豪华版的,而且还又肝又氪的打出了小精灵至宝。不过老实说,对于TI7的结局我还是比较失望的。

另外通关了《晶体管》,总体来说是个不错的游戏。其他通关游戏还包括《迈阿密热线》两作和育碧的《看门狗》,以及一些在steam没有挂名的小游戏。

没有通关的游戏有《8 bit armies》(只打穿了一线任务)、《observer》(实在太晕了)。

此外还参与评测了《汐 Shio》、《飞虎队 …


Continue reading

记一次艰难的老版本VS完全卸载(VS2013)

Posted on Sun 31 December 2017 in 遗迹

山雨欲来

尽管被很多人戏称为“宇宙第一IDE”,但是Visual Studio在我印象中却一直不是最佳选择,这个老朋友我觉得只能说“还不坏”,不过正在变得越来越好。其实很多人可能不知道,VS的进化也是一个循序渐进的过程,从VS2012版本奠定了新的界面形态之后,后面不知道是不是冥冥之中自有天意,解决了好几个我吐槽过的问题:比如说没有在同名头文件源文件切换的快捷键(就像是vim的A插件,现在有了,Ctrl+K, Ctrl+O连按),比如丢人的C/C++新标准支持程度(VS2013以降有很大改观),比如太慢的启动速度和太臃肿的安装包(VS2017大为改善),还有比如不像是IDEA一样有重构功能和快速修复(VS2017最近也有了重构和Alt+Enter)等等。

我对VS的使用基本上是每隔两个大版本更新一次,几年来我的主要使用经历是:VS2008、VS2012、VS2017。那大家肯定会注意到了,说我胡说,因为标题上明明写的是VS2013卸载啊!这其实就有个说法了,其实原因是我在那段时间换了电脑。我原本VS2012 express用了好几年,感觉自己萌萌哒,结果换了电脑之后重新装VS,发现微软偷偷把VS2012的页面藏起来了,也不知道是为什么。装上2013之后我明白了,这明明就是VS2012 update5嘛!估计是怕自己改版本号冒充新版本的事情被人发现 …


Continue reading

一个软件工程师的焊接入门笔记

Posted on Sat 30 December 2017 in 遗迹

前言

从小到大,我几乎从未碰过电烙铁。对那些复杂的电子元件和电路板,我向来是敬而远之的。虽然作为一个软件工程师,我清楚地知道自己写的程序就是借助电流在它们之上跑来跑去从而对现实世界造成影响,不过绝大多数情况下,我都是在屏幕之内做文章。然而凡事总有例外。那天,我买了一片GSM开发板打算用来插副卡收辣鸡短信,收到货发现是一片PCB板,带两个单独的 10 Pin 排针,这意味着我要么选择退货,要么就得自己动手焊接了。

当我犹豫了半天,最后还是决定把它搞好的时候,这样的故事就拉开了序幕。虽然也只是一点微小的工作,我完成了曾经觉得自己不太可能的做的事情。有些让人意外的是,这并不像是我曾以为的那样困难。我对PCB焊接是完全的零基础,大学时代作为计算机专业也不知为何没有上过相关课程,反而是很多其他专业的同学有过这样的经历。不管怎样,这算是一项还算比较实用的技能吧,因此我将自己的入门经验分享一下,主要就是上手、简单的焊排针和抠元件,如果有问题请大家指正。

准备工作

首先要购买电烙铁、焊锡、电烙铁架、面包板(尽量大的那种),这是基本配置。电烙铁我买的是20多块钱30w的,100g一卷焊锡丝用了10块钱,感觉这能用好久了。再来一个六块五的烙铁架,用于挂烙铁和焊锡丝。面包板则是用于固定电路板的,通常电路板上排针都会设置在边缘而且对称,这样你将排针先插在面包板上 …


Continue reading

esp8266 萌新三连:刷机(MicroPython)、亮灯、联网

Posted on Sun 12 November 2017 in 遗迹

前言

书接上回。在前一篇《入手指南》之中我们已经比较详细的列举了 esp8266 的一些信息,所以这里就……还是要简单介绍一下这枚芯片。这是一枚主频在80/160mhz双模式并集成WIFI的32位物联网芯片,比1元硬币大一点,仅售10元,使用这枚芯片的简单的开发板价格也不超过20块钱,堪称物美价廉。

我们的目标是在这片小小的板子上运行一个缩水的 python 解释器 —— MicroPython,并让它连入我们的局域网WIFI。

坦白的说,这篇文章介绍的都是一些入门问题,不存在什么高深的操作,也是对我自己探索开荒过程的回顾,若有同路者,希望能以本文免去大家一小段奔波之苦。

P.S. 本文在 Windows 环境下完成

刷机

前文的选购中我们介绍了两种开发板,其实如无意外大家买到的接近20块钱的开发板应该都是这种样式:

也就是 Nodemcu 制式的开发板。这个开发板集成了 usb-ttl 芯片,因此你弄个 microusb 线就可以完成所有操作了。

那么首先下载固件:http://micropython.org/download

选择 esp8266-20171101-v1 …


Continue reading

python3 csv/xls/json/pickle 等序列化反序列化代码速查

Posted on Sun 12 November 2017 in 遗迹

全部

# pandas 秒天秒地
# 条件有限的时候再考虑别的
import pandas as pd
import numpy as np

df = pd.read_clipboard()
df = pd.read_csv(data_or_path)
df = pd.read_html(data_or_path)
df = pd.read_json(data_or_path)
df = pd.read_msgpack(data_or_path)
df = pd.read_pickle(data_or_path)

df.to_clipboard()
df.to_csv()
df.to_csv(fn)
df.to_excel(fn)
df.to_html()
df.to_html(fn …

Continue reading

python 3.5+ 协程自我挂起及其应用

Posted on Thu 26 October 2017 in 遗迹

前言

有段时间没有写文章了。说来惭愧,没写文章的一个主要原因是这个博客还不支持传图。

近来又颇懒惰,于是就长久的没有更新了……

P.S. 此文章实际写于《esp8266 系列芯片入手指南》之前

背景

网络编程中我们经常面对双方建立连接,两边同时可以收/发消息的情况。

例如说我们连接到某服务器,最简单的状态下,我们向服务器发送一条指令,然后直接等待服务器返回并读取出数据。 也就是这种情况:

import time
import serial

s = serial.Serial('COM10')
s.write(b'AT')
time.sleep(0.5)
assert s.read_all().strip() == b'OK'

为了保证返回结果能够正确,这个过程有两个问题:

  1. 永远必须等待一条指令执行完成返回后,才能执行下一条指令
  2. 服务器基本没有机会主动向我们发送数据

实际上这是一种极大的浪费,更为流行的做法是一边发送一边接收 …


Continue reading

esp8266 系列芯片入手指南!

Posted on Mon 23 October 2017 in 遗迹

前言

esp8266 这款芯片我是久闻其名。10块上下的价格,32位架构,支持wifi,迷你便携这些特性都很有吸引力。但硬件毕竟深坑不可轻入,直到不久前才终于按捺不住,买来玩了一下。

这块芯片可以在 80/160mhz 中切换,这在单片机中已经不低了。足够的性能加上32位架构,使得可玩性大大提升。

社区的大佬们也充分释放了他们的热情,目前在这块板子上除了C语言之外可以运行 Lua (nodemcu)、JavaScript (Espruino)、Python (Micropython),可以说是非常的多种多样了。

而我的短期目标是先在上面跑起来 Micropython,然后借此学习一下硬件世界的规则,长远一点的大概也会做个“智能某某”吧。

作为 esp8266 系列(计划中,咕)的开篇,这篇文章主要是讲述一些在购买和挑选过程中遇到的问题,希望对大家有所帮助。若有问题也不吝赐教。

芯片与开发板

我是没什么硬件方面经验的,因此直接选择了现成的开发板,淘宝大概17、18块钱的样子,引出大量引脚,自带复位按键,集成USB-TTL芯片。用microusb线直接连上电脑就可以直接通过串口来交互啦 …


Continue reading

关于《模式 - 有效事件: 可取代数十种设计模式》

Posted on Wed 20 September 2017 in 遗迹

原文地址: https://msdn.microsoft.com/zh-cn/magazine/mt795187.aspx?f=255&MSPPError=-2147217396

标题起的很吓人,但我认为也许只是一种从编程语言到配置文件的回归。

解决方案总是蕴含在问题之中。自相矛盾的是,OOP 旨在解决的一些问题(全局函数和数据)反而成为 OOP 无意间引发的问题的解决方案。如果你看看有效事件这种设计模式,首先会发现的是,在某种程度上,它是回归基本的,同时使用全局函数取代方法和类。然而,由于无需在有效事件的使用者和实现之间知道并共享签名或类型,因此与使用 OOP 相比,环境更像是黑盒。这样一来,可以轻松地进行交换,例如,将 SaveToDatabase 与 InvokeWebService 或 SaveToFile 进行交换。没有接口、类型、POD 结构和类,只有一个共用签名。只有优质的普通旧数据 …


Continue reading

一个自动转换音频为 opus 格式的小工具

Posted on Tue 19 September 2017 in 遗迹

这两天发现了除 ogg vorbis 之外的另一个开源免费无专利的音频格式,即 opus。

根据观察这格式也是 ogg 封装(ogg是容器格式,vorbis才是编码,常说的ogg格式实际上指的是vorbis编码格式),各方的支持度其实相当不错。

据大佬说比较优秀,特别是码率较低的时候,ogg会出噪音,而 opus 不会,而且编码速度极快。那么在游戏开发和语音通话等方面应该有上佳表现。

于是顺手写了一个自动转换器,编码器和脚本放在同一目录执行脚本,然后向 input 目录丢 ".wav", ".aiff", ".flac", ".ogg" 这几种格式的文件,会自动转换成同名的 opus 编码文件输出在 output 目录。

https://github.com/fy0/autoconv


博客系统更新 1.0.3

Posted on Sat 16 September 2017 in 遗迹

我记得听过这样一句话,是说如果上线的产品没有能够简陋到丢人的程度,那一定是速度太慢。

作为~~一代摸鱼王、~~精益求精信条的追随者与践行者,这种论调我自然是不屑的。

所以后果就是坑迟迟填不完。

因此前段时间忽然仿佛意识到了什么的我赶紧把这个半成品博客程序翻了出来,匆匆完善了一下就直接上线了。

上线之后几天进行了大量的 BUG 修正、功能调整与优化。果然开门丢人和关门丢人还是有很大不同吧!

而就在一个多小时前,本博客使用的 https://github.com/fy0/storynote 项目发布了 1.0.3 版本。

其中最重要的功能就是文章引用,具体效果就是发表的带引用链的文章,直接点击后到引用处,而点击评论则到内部。也就是你们在外面看到的绿色标题的文章了。

这也是我初版时就策划好的功能,因此不用改 topic 表。这样一来很多文章我也懒得写两份,也能较快的给空荡荡的博客填充一些内容。

我觉得 StoryNote 大概会在一两个版本后达到稳定状态,如果有人想要用遇到什么问题的话(我觉得应该没有),鉴于评论还不好用,那么可以到github给我提issue或者找到我邮箱给我发邮件。

本文就是这样了,下次再见!


开始准备填一个社区系统的老坑

Posted on Sun 10 September 2017 in 遗迹

几年前的时候挺想做个小社区,聚集一些志同道合的人搞事情,现在想想是有些年轻了。现在虽然时过境迁,但留下的坑还在,正好我的新后端框架需要一个项目来证明自己,所以我决定把这坑填了。

项目在这里:https://github.com/fy0/Icarus

链接里头内容是空的。几天前我建立了一个新的空项目把老代码顶掉了,因为偏差太严重~~(所以并不是删库跑路)~~。

老代码是一个旧时代那种MVC的 web 项目,主要基于 tornado、mako、peewee、coffeescript、sockjs等库,而且不仅要兼容 Python 2/3,还计划只用 sql 数据库并同时支持 MySQL/PostgreSQL/SQLite……

而新项目将是一个符合现在主流节奏的前后端分离的项目。数据库使用 PostgreSQL 和 Redis,后端使用基于 aiohttp 的新辣鸡框架并仅限 Python 3.5+,前端则是 vue 全家桶 …


Continue reading

修复 marked 配合 prism 进行语法高亮时,渲染代码块的格式错误

Posted on Sun 10 September 2017 in 遗迹

当前这个博客就是使用了这个渲染代码的方案,这也是我的亲身经历。

我相信与我遇到相同问题的人还有不少,下面来说说遇到的问题是什么,如何解决。

缘起

我一直觉得有一个地方不协调,那就是markdown引用代码的时候,我这里渲染出来代码没有背景颜色。之前我以为是默认样式本来如此,结果上篇文章加了很多代码发现与正文区分不开,很难看。于是就去看了 prism.js 官网之后发现默认样式是有背景色的,而我的没有,这很明显就出了偏差。

既然出了偏差,那就是要负责的。

那我们先来观察一下 http://prismjs.com 里面代码是怎么引用的:

<pre data-src="prism.js" class=" language-javascript">
    <code class=" language-javascript">
        ...
    </code>
</pre>

看上去不错,那我们渲染出来的 html 呢?

<pre>
    <code class="lang-javascript">
        ...
    </code>
</pre>

呃,其实我也不知道为什么 …


Continue reading

goaccess 配置记录

Posted on Sat 09 September 2017 in 遗迹

本来是计划弄一个站点统计的,初步意向是百度,结果发现被 adblock 默认规则屏蔽了。

拿关键字一搜发现不仅是百度,不少人专门将各种统计都配置成全家被屏蔽的状态,这可就不得了了。于是看看自建的web统计方案,基本上就是 piwik 一家独大。然而群众又表示这货很占资源,我这小服务器就还是算了吧。

后面又试图转战 VeryNginx,好嘛,这项目我也盯了很久了。谁知此项目毫无长进,访问统计废到不能再废,也是无法解决问题。

因此最后方案是 goaccess ,实际上这不是统计而是 nginx 日志分析。对单页应用来说肯定各种不准,但也无所谓了。我就随便看看大致情况,图个乐就行。

https://goaccess.io

ubuntu系统的默认源里有这个软件,但是版本是 0.9.x,我看到最新稳定版本是 1.2,那就按官方文档添加源吧。

echo "deb http://deb.goaccess.io/ $(lsb_release -cs …

Continue reading