AnimationEvent事件问题

本文探讨了在Unity中使用AnimationEvent遇到的问题,包括事件丢失、添加无效及meta文件的作用。作者分享了如何解决这些问题的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AnimationEvent事件问题

本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.youkuaiyun.com/cartzhang/article/details/50914823
作者:cartzhang

**

一,说明

上周在使用Unity过程中,出现了一些奇怪的事情。
当然,在不排除自己使用方法问题的时候,都可以怀疑Unity版本问题,这就是槽点啊!!

二、AnimationEvent使用

AnimationEvent的添加和使用方法,官方网址:
file:///C:/Program%20Files/Unity5.3.0/Editor/Data/Documentation/en/Manual/animeditor-AnimationEvents.html

当然是你本地文件夹的路径。

然而,在打开Animation后,在多次添加完毕Event事件后,调整或保存后,总会发生事件丢失的问题。
这里写图片描述

后来才知道问题在这里:
这里写图片描述

看到红框的里面的说明了吧,这玩意儿是个只读的。

怎么办?还是老老实实的从动画里面添加事件:
是这样做的:

add animation event

三、事件添加没有效果


该添加的都已经添加完毕了。咋还运行报错,找不到事件函数呢?
一开始怀疑,写了函数为类中的私有函数,private。要是私有的不可以调用,从设计的角度,就应该把这些没用的私有,不可用调用的全部屏蔽掉啊!!
所以,问题不在于此啊!!


历尽千辛万苦,把所有动画下的挂在的事件,全部都重新修改调整了一遍。结果通过比较meta文件,发现meta文件中原来的event中,多了一个空格,就是由他造成的。
但是可以保证,在使用上述的动画Event中,绝对是拷贝的代码,没有添加过任何手动的过程,这样就会多了个空格这种问题。想想,也是无可奈何啊!!Unity我也无奈。

四、说说meta文件

meta文件主要包括内容:

  1. 文件格式版本
  2. GUID
  3. 创建时间
  4. License类型
  5. 导入者
  6. 用户数据等。
    我们随便看看一个:
fileFormatVersion: 2
guid: 7d5d1ce2c226f9e40a8c1692583c2700
timeCreated: 1453951490
licenseType: Free
DefaultImporter:
  userData: 
  assetBundleName: 
  assetBundleVariant: 


meta文件的作用:帶有GUID,就意思就是文件唯一標識。就是很小概率的重複的一組數字。
使用它來對應相應的資源引用,在下次搜索到這個引用時,若找不到就場景就會崩潰,腳本就會顯示“Missing script”。它們是工程的一部分。

若不想看到它,可以隱藏它。如下圖所示:
如圖

在工程中,meta文件是需要提交的,如沒有,就會在本地自動生成一個,打亂原來的所有資源引用。
https://gamedevdaily.io/managing-meta-files-in-unity-713166ee3d30#.jyjv9b2ks
這篇文章還是不錯的。若是不太了解,可以看看!!!

参考

http://answers.unity3d.com/questions/932348/visible-or-hidden-meta-files-with-git.html
http://answers.unity3d.com/questions/620728/how-to-remove-meta-files-1.html
https://gamedevdaily.io/managing-meta-files-in-unity-713166ee3d30#.jyjv9b2ks

—————-THE—————-END—————————————–

若有問題,請隨時聯繫!!
非常感謝!!!

喝了這碗雞湯,分清楚那是個夢想,還是夢鄉
这里写图片描述

### 解决 AnimationEvent 缺少函数名指定的问题 当遇到 `AnimationEvent` 缺少函数名指定的错误时,通常是因为在定义或调用动画事件时未提供必要的回调函数名称。为了修复此问题,可以按照以下方法进行排查和修正。 #### 1. 检查事件注册 确保在创建 `AnimationEvent` 实例时提供了有效的回调函数名称。如果使用的是字符串形式来表示函数名,则应确认该字符串与实际存在的函数相匹配[^1]。 ```python animation_event = AnimationEvent( time=0, functionName="on_animation_end", # 确认此处为有效的方法名 object=self.object_to_animate ) ``` #### 2. 验证回调函数的存在性和可访问性 验证目标对象上确实存在名为 `"on_animation_end"` 的方法,并且可以从当前上下文中访问到它。可以通过打印类中的所有属性来进行初步检查: ```python print([attr for attr in dir(self.object_to_animate) if callable(getattr(self.object_to_animate, attr))]) ``` 这会列出所有的可调用成员(即方法),从而帮助定位是否存在拼写错误或其他潜在问题[^2]。 #### 3. 使用匿名函数作为替代方案 如果不希望依赖于特定命名的方法,也可以考虑直接传递一个 lambda 表达式或者常规函数给 `functionName` 参数。这种方式更加灵活,但可能不如显式的命名方式直观易读。 ```python def handle_animation_completion(): print("Animation has completed.") animation_event = AnimationEvent( time=0, functionName=lambda: handle_animation_completion(), object=self.object_to_animate ) ``` 需要注意的是,在某些框架中,`functionName` 可能期望接收具体的字符串而不是函数本身;因此这种方法取决于具体实现细节[^3]。 通过上述措施应该能够有效地解决由于缺少函数名而导致的 `AnimationEvent` 错误。不过具体情况还需要根据使用的库文档进一步核实最佳实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值