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动画的动画状态代码控制与代码生成动画控制器

Unity动画丨一创建普通动画

unity3d学习笔记-动画(2.控制动画与Animator Controller)

unity - 停止动画循环

unity 动画状态机控制行走,人物怎么不懂

unity滑块控制动画