Unity Genrics 动画控制器
Posted
技术标签:
【中文标题】Unity Genrics 动画控制器【英文标题】:Unity Genrics Animation controller 【发布时间】:2019-02-21 22:11:12 【问题描述】:大家好,正在开发通用动画控制器,
Public Animator anim
Public void GenAnim <t>(string "name", t val)
If (t is float)
anim.setfloat ("name", val)
If (t is bool)
anim.settrigger("name", val)
If (t is int)
anim.setint ("name", val)
问题是,您不能将 t 传递给 anim.set 函数,而且我不知道如何投射或绕过它,我觉得有一个简单的修复方法,我错过了 如果您有任何想法,请告诉我
干杯
【问题讨论】:
你可以通过应用你刚刚测试过的演员来解决这个问题,即在t is float
的情况下你可以写anim.setfloat ("name", (float) val);
。但这感觉不是很 OOP:代码不应该知道它可以支持和测试的有限 T 集。你想达到什么目的?一定会有更好的办法。你可以使用重载函数吗?
感谢您的回复,不幸的是,演员阵容不起作用,我得到“无法将 t 转换为浮点数,我需要在我申请的工作中显示泛型的使用,这就是我想出反对同一个 gen list class 再次感谢
糟糕,抱歉:Convert.ToSingle(val)
应该可以工作(其中 'single' 是 'float' 的另一个名称),因为它有一个接受对象的重载。但是,如果您希望将其作为投资组合,我认为这不是使用泛型的好例子。也许掌握一些 Unity 示例项目,看看他们在哪里以一种有趣的方式使用泛型,或者尝试在其中一个(或你自己的另一个示例?)中找到一个你可以用泛型解决的问题.
感谢一百万的建议和建议 Rup,我一定会看看一些示例项目欢呼
【参考方案1】:
泛型并不能真正以干净的方式做到这一点,但@Rup 的方法重载建议可行:
public Animator anim;
public void SetParameter(string name, bool value)
anim.SetBool(name, value);
public void SetParameter(string name, float value)
anim.SetFloat(name, value);
public void SetParameter(string name, int value)
anim.SetInteger(name, value);
这样调用 SetParameter 将根据您提供的参数选择正确的版本。
您也可以使用没有值的 SetParameter(string name) 来调用 SetTrigger,但没有 GetTrigger(它是 ResetTrigger)。由您决定如何处理。
【讨论】:
以上是关于Unity Genrics 动画控制器的主要内容,如果未能解决你的问题,请参考以下文章
关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器