Unity
未读有限状态机实现方式不止一种,这里标题为第三版,不是说前面几版不好,而是又提供了一种新的有限状态机写法。我之前对有限状态机的想法是,用来做敌人AI,现在再次开阔视野,可以用代码的形式来替代Animator窗口复杂的连线(之前也有人推荐我用Animancer插件,等我学到了我再学),简洁清晰地转换状态。这个思路主要借鉴自Joker老师的RPG进阶教程,有能力的话大家可以去支持一下Joker老师。
思路分析
再开始写代码前,我们需要先分析自己的需求:
首先是状态机,大概分为敌人状态机、玩家状态机,那么就声明个基类状态机最好。状态机怎么写?首先我们需要一个字典容器来存储所有的状态,然后我们需要一个转换状态的方法,然后我们还需要存储下当前状态,就写一个GetState的方法。
状态怎么写?首先我们有个状态基类StateBase,记录所有状态都要有的方法;再分别写PlayerStateBase和EnemyStateBase继承StateBase,最后我们具体的状态再次分门别类的继承,这样就很有条理了。
实践过程
在设计有限状态机前,我们先设置好我们的状态基类StateBase,记录下我们所有要执 ...
本文是前端之CSS进阶知识点总结,因为前端学习2写的太长了、也算比较全面,于是再写一个进阶篇。
HTML5新特性
HTML5语义化标签
只使用IE9以上的。IE9需要转化为block
<header>头部标签;<nav导航标签;<article>内容标签;<section>定义文档某个区域;<aside>侧边栏目标签;<footer>尾部标签;
视频标签
1<video src = "" controls = "controls" autoplay = "autoplay" muted = "muted" loop = "loop"></video>
音频标签
1<audio src="" controls="controls" loop="loop" autoplay="autoplay" >< ...
前言:由于css内容实在是太多,我发现仅凭我一个人根本写不完,于是我会在本文档引用一些外部链接,可以跳转去看其他人的文档。我现在还在思考怎么去写这个css笔记,它和html不一样,html好总结,所以我会陆续进行修改更新。等我完全完成了这些任务,会发到github上。
接下来我们将要学习css,如果要讲完所有css知识点,对我来说是不可能的,因为css太多了。曾经有本砖头厚的书、记录的全是css,所以我只能总结常用的。css是个博大的学问,具体要实现什么需求时、再具体去学习。不过我会在其他文章记录一些比较流行的css特效。
我建议读者在学习时,自己建个html文件,把我写的css粘贴到里边看效果(博客展示不方便,容易乱,因为我文章用html写的)
css知识点
基础语法
css规则由两个主要部分:选择器和声明,一个生命有一条属性和一个值,属性间用分号隔开。
123456<style>.hljs { background: #f5f5f5;}</style>.hljs是选择器,background是属性、#f5f5f5是值
css的引入 ...
在研究很长时间后,我发现一个奇妙的存储方案。真正意义上实现零成本、无限容量存储,安全性一般先来介绍一下我们的方案,原理是利用telegram做我们的资源存储、利用serv00搭建的网站来上传、下载我们的资源,风险的话是滥用可能会被telegram封号。但根据调查滥用的人还是比较少的,只要不往死里作、滥用也不会封号。
如何部署?
前置准备:申请一台serv00虚拟主机,网上有很多教程,可以参考。现在申请一般都是挂代理,用siteproxy反代网站——实在不行找人代申请。
为什么用serv00呢,原因是它不限制流量,但是不要玩太过火了、滥用serv00也可能被封号。
首先项目来自于tgDrive,我们打开它,从右边Releases下载最新的jar文件,我这里是0.0.8,于是拿着个举例子。
之后打开登录到我们的serv00虚拟主机,之后在port resservation申请一个端口,这里我申请的是60062;再之后我们在WWW website添加反代,type选择proxy,绑定我们申请的端口。接着在File Manager上传我们的jar文件,用任何一款ssh软件连接到我们的serv0 ...
galgame
未读在此之前,已经为猫猫社作品《すみれ》里的筱原明里写过很多文章,但我总觉得不太满意,原因是总是有所顾虑。比如,我不太了解片冈智的生平经历,我也不敢保证我对作品的理解正确,但我还是想,就筱原明里这个角色写下我自己的看法。或许可能是我的胡乱猜测和臆想,但我还是想大胆地写下来自己的想法。所以这篇文章是不严谨的,仅代表我自己对片冈智、对筱原明里的理解。
片冈智的缩影
在《水仙:堇》开头,片冈智就说过,关于筱原明里的故事可能很难理解,但他还是想强行加到游戏里;后来猫猫社发布的几个后续游戏里,总能看到有关于筱原明里的新的故事内容。
为什么片冈智对这个人物很执着?不惜破坏《水仙:堇》的体验、在后续作品屡次为这个角色补充新的情节?我觉得,因为筱原明里正是片冈智的一部分缩影,因为这个角色是以片冈自己为原型创作了、融入自己最真实的感受,所以片冈才对这个角色如此执着。
我之所以会这么觉得,有很多依据吧。第一是当看到《すみれ》里细致的心理描写时,我就觉得,如果不是有亲身体验、经历过孤独、自卑、逃避心理的人,是不会写出这样的文字的,因为他无法体会、更无法写出这样的文字。第二便是来自于片冈智创作的名为“1993” ...
最近做ARPG小项目,新写了一套连招逻辑,感觉要比较好用些。优点是不需要再考虑索引值什么东西了,代码很好理解,于是分享一下。
思路分享我的思路是这样的,做一个连招表,连招表上最重要的新功能有两个:一个是nextCombo,即按下鼠标左键做的招式;另一个是branchCombo,即按下鼠标右键做的招式,对于伤害处理,考虑到一个动画可能会触发多段伤害,我们是用List数据结构+动画事件来配置。这个List里配置好受伤动画名称、伤害值等数据。首先我们写连招表:
123456789101112131415161718192021222324252627282930313233343536using System.Collections.Generic;using UnityEngine;[CreateAssetMenu(fileName = "ComboData", menuName = "Scriptable Objects/ComboData")]public class ComboData : ScriptableObject{ [ ...
两个月前,当我在做Unity音效池时,遇到神奇的bug。我手写的一个字典poolDic,刚开始好好的、包含一个名为“ATK”的key,结果呢当我调用动画事件时直接这个key消失了,我也没在外部去修改,困扰我整整两个月。后来经过排查,发现是单例模式基类的问题,不够安全。我记得当时这个单例模式是跟唐老狮学的,老师说除了一些个别情况、这个单例模式非常安全,结果我遇到了这种“个别情况”,于是优化一下代码,把问题解决了。可以在我的“单例模式”那篇文章看到改进。
Unity
未读在游戏开发中,音效是开发者需要仔细考虑的问题。一个大型的动作游戏,一个音效可能会出现成百上千遍。试想如果让我们的系统去实例化出1000个音效,无疑会给我们电脑带来很大的负担、这就是很容易崩溃的。那么我们需要用到缓存池技术(之前的文章有记载,点我跳转)。接下来我将结合缓存池技术,搭建一个简易好用的音效系统框架。
搭建思路首先我们需要思考如何去搭建呢?首先我们创建个空物体GamePool挂载上我们写的对象池脚本吧。然后我们去想,需要做一个音效配置表,上面可以选择我们音频文件的类型和具体的音频文件,这一步写代码时就会想到要写一个enum和List的子类了。之后我们去想,需要制作预制体文件,创造个ATK预制体,挂载上我们要写的Mono脚本。那么Mono脚本里需要什么呢?第一点,我们Mono脚本需要给外部留出可编辑的部分,一个是音效类型、一个是挂载ScriptsObject文件;之后我们需要写几行代码,根据我们在外部编辑界面传入的音效类型、去调用该类型下的音频文件,这一步我们直接放入音效配置表里写代码。最后是具体音效的播放,我们通过在动画事件里传入一个string值,从而触发GamePoolM ...
今天打开电脑,发现C盘剩100GB。记得去年我的C盘还有148GB,看来需要清理一下了。最终我清理了50GB,C盘变成150GB了。
一、基础清理(50GB)
最基础的清理,一般不经常清理电脑的人,清理过后电脑可能多出50GB:
首先打开回收站,把里边东西全清理了。其次win+R调出运行,输入%temp%,Ctrl+A全选,shift+delete全部删除。
效果:我一只用电脑不清理的朋友在此操作后多出50GB空间。
二、C盘清理软件(35GB)
市面上大多C盘清理软件都挺流氓的,清理不出来什么东西、还要VIP。这里我推荐Dism++,一款开源软件,大小只有3.33MB。打开后在“空间清理”里进行选择就好。
值得一提的是,其中有个选项叫“系统还原点”,这个东西是为了防止你电脑系统损坏,相当于备份,一般不建议删除(实际删除一般也没什么事,空间不够直接删),我勾选后清理掉30GB。
三、大型软件清理(80+30+10+5GB)
把软件装到除C盘以外的盘,这点很重要。但又一些软件我们总是不可避免地装到了C盘。而它们就是罪魁祸首。
1.Adobe全家桶,电脑上装有PS、PR、AE等等软件的人 ...
在进行Unity开发时,有时我们希望能有一些便捷的函数帮助我们处理,然而Unity官方并未提供这类方法,需要我们自己写。于是本文记录一些我自己封装的方法:
123456789101112131415161718192021222324252627using UnityEngine;public static class ExpandClass{ public static bool AnimationAtTag(this Animator animator, string tagName, int indexLayer = 0) { return animator.GetCurrentAnimatorStateInfo(indexLayer).IsTag(tagName); } public static float GetTransformDistance(Transform player,Transform enemy) { return (enemy.transform.positi ...