Top Down Engine简介
文档什么的是没有的,官方貌似也不打算给,就是一个API官方网站
感觉像是国人做的,例子不少,就是不说明怎么用,反正源码都有了,自个看去
俯视角游戏有点过时,特别是地牢游戏,不过王者荣耀何尝不是俯视角游戏
融合了不少官方的插件,你懂的:“”就只是不是给程序员用的“”
Gameplay
镜头处理
Cinemachine 入门
不懂的可以看看链接,Unity Cinemachine插件全功能详解-CSDN博客
,具体就不多说了,下面说说实际使用中碰到的问题:
不得不用Anim选项,也要选择LookAt Target
有个黄色提示,建议如果不想,也可选择None,然后就就会发现nothing + 轨道会旋转到你怀疑人生,所以唯一的解决方法和最简单的实践就是选择“朝向目标”
如果想做自由镜头,个人觉得很多其他的Curvy插件或者是更好的选择
还有就是要控制摄像头,必须调整摄像头在轨道上的position, 默认是轨道Unit【0,1】,你可以真试试选这个,所以你又不得不选择Distince(世界单位)
后面又看了几个博客,清一色是朝向做动作的人物的,也可以说unity的需求摸得准,就不是给程序员用的
平移推轨如何实现
很多人都说通过position控制位置,实际上镜头就是会乱转,单个选项控制肯定不够的(但多个控制违反人性,1般人不能同时操作左右手,程序员写出的程序自然如此),实践后发现上下,或者左右的推轨就还是可以通过position(相对于轨道)控制,斜边,或者螺旋轨道就有问题(或者我这个非美术理解不了,或者美术并没有斜的推轨要求)总之,就是有点难搞懂什么情况会镜头乱转,什么时候又固定了
平移推轨也是通过,timeline的动态赋值 ,实现
2个镜头间的切换
主要通过timeline处理,也没什么好说的,没用过Flash,也总见过Flash怎么做的吧
Windows -> Sequencing -> Timeline
关于timeline的使用,参考自:这2哥们都写的挺好的了
timeline的简单用法
Unity2017中Timeline的简单使用方法-CSDN博客
timeline的动态赋值
【Unity】TimeLine&Cinemachine系列教程——动态赋值,我要打十个!_using cinemachine;-CSDN博客
真正的美工做动画
【Unity】TimeLine&Cinemachine系列教程——动作特写! - 哔哩哔哩
好吧,在仔细的看了一遍上面的链接
我给的建议就是,不要听别人的建议
若完全按上面2位哥门写的做,真正在大型项目里面,人多了很难用(而他们反而说这样更好),做做小项目还行,你想怎么做都行,协同就困难了
我这里也只是提出一些关键词,供大家搜索,并没有成熟的方案,(只是个人觉得官方的timeline很难用,cinemachine也很难用,功能多,稳定,但难用)
难学难精,都2020了,何必呢
TopDown Engine里面的一些特色镜头运用
一切的一切,都在细节里
关卡场景Tipmap生成
官方的Demo:KoalaProceduralTilemap demo scene,扩展了 TTHelper那个工具,刚好就会生成打竖的第一个地图,正是我需要的,今年搞2D去了。。。
同样的,还是没有文档,网上找到的文档要不就只是翻译官方,要不就只是演示下TopDown游戏Demo,Tilemap 这个东西作为其他引擎的“王牌”工具,在Unity 好用的 Tilemap真的没有,也确实证明没什么卵用
自己开发一个也快,老规矩,我们直接看代码吧
代码
//功能不多,就一个 generator 功能,直接看该方法
protected virtual void Awake()
{
if (GenerateOnAwake)
{
Generate();
}
}
public override void Generate()
{
base.Generate();
HandleWallsShadow();
PlaceEntryAndExit();
ResizeLevelManager();
}
//明显是继承了 MMTool 的 Procedual 包(2个类)
(这个包还不是放在Editor 目录下的,就是直接拿过来用不知道会不会有权限问题)
//MMTilemapGeneratorEditor.cs
//几行代码写在一起,有些恶心,Inspector 效果也没有很好,主打就是一个代码“实用”
//其实这样的代码也是写的挺潇洒的
protected virtual void OnEnable()
{
_list = new MMReorderableList(serializedObject.FindProperty("Layers"));
_list.elementNameProperty = "Layer";
_list.elementDisplayType = MMReorderableList.ElementDisplayType.Expandable;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
//写的有些“”复杂“”,先是排除了 gui layers属性
DrawPropertiesExcluding(serializedObject, "Layers");
EditorGUILayout.Space(10);//空格(10)
_list.DoLayoutList();//然后这里又,反而作一次 gui layers
serializedObject.ApplyModifiedProperties();//最后 ?? 确保(序列化的)属性能够正常“缓存”
if (GUILayout.Button("Generate"))//生成按钮一个
{
(target as MMTilemapGenerator).Generate();
}
}
//就这一手 Unity Editor API ,遥遥领先,Unity领先虚幻或者COCOS,或者GODOT 10年以上。。。。怪不得这么有底气收人头税
//Unity 和Editor 都不开源,却有堪比开源智慧的整体架构,和兼容性;所以开元不开源并不重要,关键在于免费吧,如果你想做到免费,做到每个人都用,产品就会越做越下沉(这是任何高层都影响不了的,除了这次人头税 by 2023 年)
//如果你看懂上面代码最好,看不懂也没关系,下探代码发现
//关键在于属性:Layers
//而这个属性并不是数组,而是 More Moutain工作室自己实现的一个类
/// <summary>
/// A class used to display a reoderable list of MMTilemapGeneratorLayers
/// </summary>
[System.Serializable]
public class MMTilemapGeneratorLayerList : MMReorderableArray<MMTilemapGeneratorLayer>
{
}
//还实现了 MMReorderableArray, 这就有点呕了,就不再 下探代码,有点晕