Unity开发——编辑器模式下播放动画、特效、音乐

一、简介

Unity编辑器(Unity Editor)是一个用于创建、编辑和调试游戏和应用程序的集成开发环境(IDE)。它是Unity引擎的核心组件,为开发者提供了丰富的工具和功能来构建和管理游戏项目。

以下是Unity编辑器的一些主要特点和功能:

  1. 可视化编辑:Unity编辑器提供了可视化工具,可以轻松创建和编辑游戏对象、场景、材质、动画等。你可以通过直观的界面进行操作,添加、移动、调整游戏元素并实时预览效果。

  2. 脚本编写:Unity编辑器支持使用C#脚本进行游戏逻辑编写。你可以在编辑器中创建、编写和编辑脚本文件,并在游戏中使用这些脚本来实现交互、控制和逻辑处理等功能。

  3. 资源管理:Unity编辑器提供了资源管理功能,可以管理和导入各种类型的资源文件,如模型、纹理、音频等。你可以在编辑器中对这些资源进行预览、设置属性,并将其应用到游戏中的对象上。

  4. 场景编辑:Unity编辑器允许你创建、编辑和组织游戏场景。你可以在场景中放置游戏对象、设置摄像机、灯光和碰撞体等组件,构建虚拟的游戏世界。

  5. 动画编辑:Unity编辑器具备强大的动画编辑功能,可以创建和编辑游戏中的动画。你可以对角色、对象进行关键帧动画、骨骼动画、路径动画等操作,并调整动画的速度、循环等属性。

  6. 调试工具:Unity编辑器提供了一系列调试工具,用于检查和修复代码中的问题。你可以使用调试器来跟踪代码执行过程、设置断点、查看变量值,以及监视游戏对象的状态。

  7. 云服务集成:Unity编辑器与Unity的云服务平台紧密集成,可以实时协作、构建和发布游戏、分析用户数据等。你可以在编辑器中直接访问和管理这些云服务。

Unity编辑器的功能非常丰富,并且不断更新与改进。它是一个强大而灵活的工具,为开发者提供了高效而便捷的开发环境。

在这里主要是编辑器模式下声音,动画以及特效的播放

二、实现效果

 了解了一下编辑器后,接下来实现一下效果

一、声音

首先声音,它并没有什么特殊的操作,只需要正常的调用AudioSource组件的Play函数就可以实现声音的播放了。

 public void OnPlayAudioClip(AudioClip audioClip)
    {
        AudioSource audioSource = GetComponent<AudioSource>();
        audioSource.clip = audioClip;
        audioSource.Play();
    }

这样我们就可以实现声音的播放了,不管是在编辑器还是运行状态下,都可以进行播放

二、动画

动画,我们需要在编辑器模式下进行播放就需要一点操作了。

下面先看一下代码

[ExecuteInEditMode]
public class PlayerAnim : MonoBehaviour
{
    float perTime;
    Animator animator;
    private void Awake()
    {
        animator = GetComponent<Animator>();
    }
    private void OnEnable()
    {
        perTime = (float)EditorApplication.timeSinceStartup;//从编辑器运行开始计算的时间
        EditorApplication.update += CustomUpdate;
    }

    public void CustomUpdate()
    {
        float _nextTime = (float)EditorApplication.timeSinceStartup - perTime;
        perTime = (float)EditorApplication.timeSinceStartup;
        animator.Update(_nextTime);
    }

    private void OnDestroy()
    {
        EditorApplication.update -= CustomUpdate;
    }
}

 首先先去获取一个时间差,其中EditorApplication.timeSinceStartup这个属性是从编辑器开始运行开始计算的时间,比如你在14:00打开的Unity,你在14:20的时候Debug了一下这个属性,那么他就会显示20 * 60的结果,因为他是以秒为单位,并且他还是个double类型的。

至于EditorApplication.update它是一个静态的事件,它可以在编辑器模式下执行帧逻辑。

我们得到时间差之后就可以调用Animator的Update函数,至于这个Animator.Update函数,下面来简单的说明一下:

Animator.Update()是Unity中Animator组件的一个方法,用于手动更新Animator的状态。在大多数情况下,Animator会在每帧自动更新,但有时你可能需要在特定的时间或条件下手动更新Animator的状态。

比如Animator.Update(10f)它的动画就会动的非常快,因为你把它的动画帧的执行调成了10的速度。同理,我们只要给Animator.Update()一个正常的帧率,在编辑器模式下他就可以正常的运动了。

再运行模式下我们没有什么特殊的操作就不需要对他进行处理了,因为Unity本身就有帧执行的函数,Unity引擎会负责处理动画的更新和播放。

三、特效

  最后是特效,其实对于特效的播放和动画差不多,都是要进行一个时间的插值计算,只不过特效需要的是控制它播放的进度,就和我们平时看视频一样,进度条到哪,就播放对应的画面。

下面展示一下代码:

[ExecuteInEditMode]
public class EffectPlay : MonoBehaviour
{
    private float _perTime;
    private float customTime;
    private bool flag;
    ParticleSystem particleSystem;

    public EffectPlay()
    {
        EditorApplication.update += CustomUpdate;
        _perTime = (float)EditorApplication.timeSinceStartup;
        particleSystem = GetComponent<ParticleSystem>();
    }
    public void Play()
    {
        if (particleSystem.GetComponent<ParticleSystem>())
        {
            particleSystem.Play();
            customTime = 0;
            flag = true;
        }
    }

    public void CustomUpdate()
    {
        float _time = (float)EditorApplication.timeSinceStartup - _perTime;
        _perTime = (float)EditorApplication.timeSinceStartup;

        if (!flag) return;
        customTime += _time;
        particleSystem.Simulate(customTime, true);
        SceneView.RepaintAll();
    }
}

我们可以看到,代码中就是累加了一个时间的插值,然后调用插值进行一个播放,具体用到的属性也都是在动画播放的代码中用到的。

关于SceneView.RepainAll(),这个Api就是将屏幕重新绘制。

那么本章就结束了,本章只是做一个简单的演示效果与实例代码,并不会进行过多的了解,如有想有更深的了解,可以去UnityApi官网看看关于Editor下的Api并加以使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值