/** 找到可用的动作配置 */ private ModelMotionConfig findUseMotionConfig(int modelID, int id) { ModelMotionConfig config = ModelMotionConfig.get(modelID, id); if (config == null) { int backID; MotionConfig mConfig; if ((mConfig = MotionConfig.get(id)) == null) { return(null); } if ((backID = mConfig.backID) == id) { return(null); } return(findUseMotionConfig(modelID, backID)); } return(config); }
protected override void toPlayMotion(int id, float speed, float startFrame, bool isLoop) { string useName = MotionConfig.get(id).useName; if (_animator != null) { _animator.speed = speed; try { _animator.CrossFade(useName, 0f, 0, 0f); } catch (Exception e) { Ctrl.errorLog(e, "播放动画失败", useName, _unit.avatar.getModelID()); } } else if (_animation != null) { _animation.wrapMode = isLoop ? WrapMode.Loop : WrapMode.Once; try { _animation.CrossFade(useName); _animationState = _animation[useName]; _animationState.speed = speed; } catch (Exception e) { Ctrl.errorLog(e, "播放动画失败", useName, _unit.avatar.getModelID()); } } }
private void prePlayMotion(int id, float speed, float startTime, bool isLoop) { int modelID; if ((modelID = _data.avatar != null ? _data.avatar.modelID : -1) <= 0) { return; } _currentMotionID = id; ModelMotionConfig config = findUseMotionConfig(modelID, id); if (config != null) { id = config.id; _currentMotionMaxTime = config.motionTime; } else { _currentMotionMaxTime = MotionConfig.get(id).defaultMotionTime; } _currentMotionUseID = id; _currentMotionSpeed = speed; _currentMotionPassTime = startTime; _currentIsLoop = isLoop; toPlayMotion(id, speed, startTime, isLoop); }