【发布时间】:2021-05-17 01:55:22
【问题描述】:
在我的游戏中,我有一个很大的装备目录:盔甲、武器和盾牌。这些之间的组合可能非常巨大。
除此之外,玩家还可以选择在游戏中切换到不同的盔甲武器组合。最后为了解决这个问题,我使用了以下对象结构。
每当我切换武器时,我都会激活/停用必要的游戏对象。动画是这样设置的:
现在,问题在于创建动画。我首先考虑以编程方式预渲染所有组合,但我的目录非常庞大,以至于它会创建 100 多个动画,如果不是 1000 多个动画。所以我选择了不同的解决方案。一旦我知道玩家会选择什么装备,就可以在播放时间创建动画。为此,我创建了一个脚本来处理它。问题是我一直在使用来自UnityEditor 的 API,现在我意识到构建将无法正常工作。特别是因为 2 个不同的类:EditorCurveBinding 和 ObjectReferenceKeyframe。
这是我在创建动画时如何使用这些类的几个 sn-ps:
static EditorCurveBinding GetEditorCurveBinding(string path = "")
{
EditorCurveBinding spriteBinding = new EditorCurveBinding();
spriteBinding.type = typeof(SpriteRenderer);
spriteBinding.path = path;
spriteBinding.propertyName = "m_Sprite";
return spriteBinding;
}
static ObjectReferenceKeyframe GetKeyframe(float time, Sprite sprite)
{
ObjectReferenceKeyframe keyframe = new ObjectReferenceKeyframe();
keyframe.time = time / FRAMERATE;
keyframe.value = sprite;
return keyframe;
}
现在,曲线的问题,我想我设法解决了,用这段代码替换它,用 AnimationCurve 替换 EditorCurveBinding:
AnimationClip clip = ...
AnimationCurve curve = new AnimationCurve();
clip.SetCurve(path, typeof(SpriteRenderer), "m_Sprite", curve);
但我不知道如何为每个动画设置精灵。我认为使用curve.AddKey可能会有所帮助,但我没有看到在那里添加精灵。
如何重写该代码以避免使用UnityEditor?
【问题讨论】:
-
如果动画对于一类设备(例如剑)总是相同的,为什么不创建一个包含动画的父对象,然后将特定剑添加为子对象?这将使动画与齿轮分离,您只需要创建一组有限的动画。
-
您的意思是为每个齿轮创建单独的动画,并将动画分散到不同的游戏对象上?我理解正确吗?
-
不是针对每个单独的装备,而是针对每个类别的装备。例如一个动画用于所有剑,一个用于所有长矛,一个用于所有盾牌等。然后您可以拥有一个没有任何图形处理动作的游戏对象,并在小时候附加齿轮的实际图形/统计/逻辑。
-
问题在于动画师。状态机一次只能控制一个动画。它无法为每一类齿轮控制单独的动画。
-
为什么不让每个装备一个动画师,然后在你的播放器脚本中使用参数触发它?否则无论如何你都必须处理多个并发动画,例如同时砍杀和行走。