• (转)Unity3D


    转自:http://blog.csdn.net/ynnmnm/article/details/46866347

    最近在调战斗时的动画与特效,Unity3D对加/减速提供了Time.timeScale支持。但是,timeScale提供的是全局的时间缩放,而我们有些动作或动画是不希望被timeScale加减速的。比如,《刀塔传奇》中播放大招时,除了大招特效,所有别的动作/动画都暂停。

    下面分别是Animation、Animator和粒子特效的ignoreTimeScale方法。

    Animation

    Time.realtimeSinceStartup记录是不受timeScale影响的真实时间,利用它来在每一帧采样播放Animation。代码片段如下:

    AnimationState animState = animation[clipName]; // 当前动画状态
    curTime = Time.realtimeSinceStartup; // 当前真实时间
    deltaTime = curTime - lastFrameTime; // 此帧与上一帧的时间间隔
    lastFrameTime = curTime; // 记录此帧时间,下一帧用
    progressTime += deltaTime; // 动画已播放时间
    animState.normalizedTime = progressTime / currState.length; // 动画规范化时间[0-1]
    animation.Sample(); // 在当前状态对动画进行采样,当你想显式设置动画状态并且对它取样的时候使用

    Animator

    Animator _animator = ...;
    public void Update() {
        _animator.updateMode = AnimatorUpdateMode.UnscaledTime; // 指定该Animator更新模式为不受scale影响
    }

    粒子特效

    对于ParticleEmitter

    ParticleEmitter _emitter = ...;
    public void Update() {
        _emitter.Simulate(Time.unscaledDeltaTime);
    }

    对于ParticleSystem

    ParticleSystem _particleSystem = ...;
    public void Update() {
        _particleSystem.Simulate(Time.unscaledDeltaTime, true, false);
  • 相关阅读:
    一个tomcat设置多个端口,多个端口对应多个应用
    Docker 容器镜像删除
    Centos7上安装docker
    oracle锁表与解表
    windows共享文件夹
    tomcat部署项目后,war包是否可刪?war包存在必要性!
    解决Windows对JDK默认版本切换问题
    FLASHBACK介绍
    ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
    Linux journalctl命令
  • 原文地址:https://www.cnblogs.com/wonderKK/p/4645575.html
Copyright © 2020-2023  润新知