我想制作一个鸟瞰图像艺术游戏。
我目前有两个精灵表设置,分裂和诸如此类 groundSheet和characterSheet这些分为
ground_0_0_0 (A concrete floor)
ground_1_0_0 (grass)
character_0_0_0 (man idle animation frame 1)
character_0_0_1 (man idle animation frame 2)
character_0_1_0 (man run animation frame 1)
character_0_1_1 (man run animation frame 2)
character_1_0_0 (woman idle animation frame 1)
character_1_0_1 (woman idle animation frame 2)
character_1_1_0 (woman run animation frame 1)
character_1_1_1 (woman run animation frame 2)
之后的数字是关于:
的注释第一个数字 - 精灵动画的主要集合(例如man)
第二个数字 - 正在使用的动画集(例如跑步或空闲)
第三个数字 - 所述动画的框架。 (由于我计划在后期制作动画场地,因此有理由这样做)
现在,我希望为一个可以在Unity编辑器中查看的可编辑值的角色(和地面相同)制作一个脚本,例如sprite渲染器之类的内容如何具有精灵,颜色等。这决定了什么要使用的第一个数字(见上文)第二个数字和第三个数字动画的延迟。然后,这将告诉sprite渲染器要加载哪些图片以及加载它们的速度。我还希望脚本扫描文件以例如character_0_0_开头,然后计算它后面的文件数,因此它知道在动画时要做什么。我希望这个脚本能够检查在unity编辑器中可以看到的变量之一的变化,并且一旦它确定了动画所需的一切,就会检查它。
在只有一个盒子可以统一编辑的情况下可以做其他事情,你可以将character_0_0_或ground_1_0_或类似的东西放在一起,并且它会检查所有内容(它还使脚本具有通用性,并且在地面上可用,角色和墙壁(我后来加入))。
这可能看起来令人困惑,但这对我来说很有意义,你们中的许多人可能会提到一种更简单的动画制作方法等等,但是如果它符合我的要求,请说出来。
For scripts and such my file layout:
/Assets
/scripts
ground.cs
character.cs
/sprites
characterSheet.png
character_0_0_0
character_0_0_1
character_0_1_0
character_0_1_1
character_1_0_0
character_1_0_1
character_1_1_0
character_1_1_1
groundSheet.png
ground_0_0_0
ground_1_0_0
(由于某种原因,Stack溢出说上面是代码,所以我必须这样做)
ground.cs和character.cs是我想要制作的脚本,如上所述。 在我的对象视图中,我有 主摄像头 地面 字符
我几乎是C#和JS的新手。我基本上知道C#的语法(比如在哪里使用{}和put;在行的末尾)。如果你帮我解决这个问题,我请求你解释一下这个脚本,比如使用//来简单解释每个命令的作用,我知道一些但不是全部。而且我知道有人会说它在教程X中有很好的文档记录,但是大多数教程都没有统一5并且在帮助解决这个问题时并没有完全触及它。
感谢您的帮助,如果您对此问题/请求有任何疑问(这很复杂),我会解释。
答案 0 :(得分:0)
你的问题很长,很难理解,但是我试着帮助, 首先,如果你想在统一编辑器中想要可编辑的值,我建议使用像这样的信息的序列化结构
[System.Serializable] // this makes it viewable in the inspector
public struct Sprite_Manager;
{
public Sprite[] Render_Sprites; // array of sprites to store sprites
public SpriteRenderer S_Renderer;
public float Anim_Delay;
}
public class Character : MonoBehavior {
Sprite_Manager SMG = new Sprite_Manager(); // instantiate a new instance of the struct
void Set_Sprite()
{
for(int i = 0; i < SMG.Render_Sprites.Length; i++)
{
SMG.S_Renderer.sprite = SMG.Render_Sprites[i];
}
}
void Update
{
Invoke("Set_Sprite", SMG.Anim_Delay);
}
}
不确定这是否正是您所寻找的,但这是您可以设置基于精灵的信息结构的一种方法,并使用Invoke在将新精灵传递给渲染器时设置某种延迟。
答案 1 :(得分:0)
也许我完全错了,但在我看来,你正试图重新创建一个动画系统。
您是否有特定原因不使用Unity的动画系统?
你可以用它来完成你在这里描述的所有事情(改变精灵,选择动画速度)。你几乎没有代码可以编写。只需将精灵拖放到编辑器中即可开始
编辑 - 回答第一条评论:
你应该做的是创建你需要的所有动画。然后在动画师中,您选择将触发转换到另一个动画的条件(例如,布尔跳转为true将转换为动画跳转)。然后在你的代码中你可以调用GetComponent()。SetBool(“Jump”,true)。
要拥有不同的角色,您可以创建不同的游戏对象(每个角色一个)。他们都有一个不同的动画师,其中包含特定于角色的动画。 另外一个解决方案,如果你真的想要一个gameObject和一个动画师,那么你也要为你的动画添加字符串条件(例如,如果character ==“character1”和jump == true,则转换为跳转动画)。
如果我是你,我会专注于测试和学习使用Unity动画师所能做的一切。我想不出你需要自己重新创建动画系统的案例