【Unity&DragonBones】使用DragonBones的函数不能放Update函数的问题

在调试的过程中,还遇到下列问题


所生成项目的处理器架构"MSIL"与引用"AmplifyMotionEditor"的处理器架构"x86"不匹配。


上述问题,重启Unity就行了。



Unity5.5.0p4

1.正常情况
当我在Unity的start函数里面使用
person_armature.animation.Play("standing");
是可以正常动画的,并且是可以通过Insperctor视图,改变动画的状态

2.错误的情况
然而一旦自定义了一个新的函数 TestKey(),在把 TestKey()函数放入Update函数里面,动画就无法正常使用了。脚都抬不起来了

void Update()
    {
TestKey();
}

 private void TestKey()
    {
        if (Input.GetKey(mKeyRight) || Input.GetKey(mKeyLeft) || Input.GetKey(mKeyBackward)
<think>嗯,用户的问题Unity使用DoMove方法在Update函数里无法实现循环移动,想找替代方案,不用Update,用协程的例子教程。首先,我得回忆一下DOTween的相关知识。DOTween的DOMove通常是用来做一次性动画的,如果在Update里调用可能会被每一帧重置,导致动画无法正确循环。所以用户的问题可能出在这里。 用户提到不想用Update函数,可能是因为Update每帧执行,效率不高或者导致逻辑混乱。正确的替代方案应该是使用协程或者DOTween自带的循环功能。比如DOTween的SetLoops方法可以设置循环次数,这样就不用自己手动在Update里控制了。另外,协程也是一个好方法,可以在动画结束后等待一段时间再重新启动,实现循环效果。 接下来需要检查用户提供的引用内容。引用[1]提到DOTween的循环Looping,引用[3]中有协程的使用例子。所以可以结合这两部分来给出解决方案。首先,使用SetLoops(-1)让动画无限循环,这是最简单的办法。然后,如果需要更复杂的控制,比如每次移动后等待一段时间,或者有其他逻辑,可以用协程配合WaitForCompletion来等待动画完成再重新开始。 另外,用户可能需要具体的代码示例,所以应该提供两种方法的代码片段。比如第一种直接用DOTween的循环参数,第二种用协程启动动画,并在协程里用while循环结合yield return来持续执行。 还需要注意,物体的初始位置可能需要保存,以便在循环中回到起点。比如在协程方法中,先记录startPos,然后在DOMove到目标位置后,再DOMove回来,并无限循环这个过程。 可能用户遇到的问题还有DOMove在Update中被不断调用,导致动画被中断,所以强调要在Start或单独的函数中调用,避免每帧执行。同时,提醒他们使用OnEnable或事件触发来启动协程,确保逻辑正确。 最后,总结两种方法的适用场景,比如简单循环用SetLoops,复杂控制用协程,这样用户可以根据实际情况选择。还要确认引用的来源是否正确,比如引用[1]中的DOTween循环和引用[3]的协程示例,确保建议的解决方案有依据。</think>在Unity中实现DOTween的循环移动时,使用Update函数会导致动画逻辑混乱。以下是两种基于协程和DOTween特性的替代方案: ### 方案一:DOTween内置循环参数(推荐) ```csharp using DG.Tweening; void Start() { // 设置循环参数为-1表示无限循环 transform.DOMove(new Vector3(5,0,0), 1f) .SetLoops(-1, LoopType.Yoyo) .SetEase(Ease.Linear); } ``` 此方法通过$SetLoops(-1)$参数实现往返移动循环[^1],无需编写额外代码。 ### 方案二:协程控制移动序列 ```csharp using DG.Tweening; using System.Collections; IEnumerator Start() { Vector3 startPos = transform.position; Vector3 targetPos = new Vector3(5,0,0); while(true) { yield return transform.DOMove(targetPos, 1f).WaitForCompletion(); yield return transform.DOMove(startPos, 1f).WaitForCompletion(); } } ``` 此协程实现了: 1. 通过$WaitForCompletion()$等待单次动画完成 2. 使用while(true)建立无限循环 3. 保留初始位置实现精确位移[^3] ### 对比说明 | 方法 | 优点 | 适用场景 | |-----------|---------------------|----------------| | SetLoops | 代码简洁,性能最优 | 简单循环运动 | | 协程 | 可插入自定义逻辑,控制更灵活 | 复杂运动序列 | 建议优先使用DOTween原生循环功能,需要自定义中间逻辑时再采用协程方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值