【EC思想】实现极简版技能编辑器

大家先看一下 最后可以实现的效果 

极简版技能编辑器效果

注:代码里有详细讲解  有我没有描述清楚的欢迎在下方留言

实现这种技能编辑器需要哪些步骤???

1.Editor文件夹的使用及创建

        1.1、两个脚本文件  

                (1)、用于创建窗口 编辑人物Model 和 技能名称的脚本
                (2)、用于编辑人物技能组件的显示存储脚本

2.Scripts脚本的编写

         2.1、两个必要使用的脚本文件

                (1)、人物实体与组件的绑定使用脚本
                (2)、创建人物技能组件所使用的基类脚本

我们大体的说了一下实现以上功能的需求 下面我们用代码与讲解详细的分析一下它的步骤

写代码我们要分清楚主次与流程  知道了主次就知道先去做哪些事情也有了一个合理的有序的思路

1.这里呢我们先去写技能基类与玩家实体

技能基类代码示例(请结合后面的玩家实体代码观看):

using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 组件类型
/// </summary>
public enum TypeInfo
{
    None,
    动画,
    声音,
    特效,
}
public class PlayerInfo
{
    public string skillName;//技能名称
    public string icon;//技能图片
    public List<SKillBase> skills = new List<SKillBase>();//存放技能的库
}
/// <summary>
/// 技能基类
/// </summary>
public class SKillBase
{
    //[JsonIgnore] 忽略序列化,就是当字段在序列化时,被[JsonIgnore]标记了的字段将被忽略序列化
    public string clipPath;  //元件路径
    public float delayTime;  //延迟时间
    [JsonIgnore] public PlayerEntity playerEntity;//玩家实体
    public TypeInfo type;//组件类型

    //虚方法  --初始化 --播放  --暂停
    public virtual void Init(PlayerEntity player)
    {
        //初始化时将其与玩家实体进行绑定
        playerEntity = player;
    }
    public virtual void Play()
    {

    }
    public virtual void Stop()
    {

    }
}
/// <summary>
/// 动画组件  Animator的更改替换
/// </summary>
public class Skill_Anim : SKillBase
{
    //动画元件
    [JsonIgnore] public AnimationClip clip;
    public override void Init(PlayerEntity player)
    {
        base.Init(player);
        //拿到加载对应路径得到的动画元件
        clip = Resources.Load<AnimationClip>("Anim/" + clipPath);
    }
    /// <summary>
    /// 切换并播放动画的原理
    /// </summary>
    public override void Play()
    {
        base.Play();
        playerEntity.m_animOver["Start"] = clip;
        playerEntity.m_anim.SetTrigger("Play");
    }
    /// <summary>
    /// 停止动画的原理
    /// </summary>
    public override void Stop()
    {
        base.Stop();
        playerEntity.m_anim.StopPlayback();
        playerEntity.m_animOver["Idle"] = Resources.Load<AnimationClip>("Anim/Idle");
        playerEntity.m_anim.SetTrigger("Play");
    }

}
/// <summary>
/// 音乐组件  Audio的更改替换
/// </summary>
public class Skill_Audio : SKillBase
{
    //声音元件
    [JsonIgnore] public AudioClip clip;
    public override void Init(PlayerEntity player)
    {
        base.Init(player);
        //拿到加载对应路径得到的音乐元件
        clip = Resources.Load<AudioClip>("Audio/" + clipPath);
    }
    /// <summary>
    /// 切换并播放音乐的原理
    /// </summary>
    public override void Play()
    {
        base.Play();
        playerEntity.m_audio.Play();

    }
    /// <summary>
    /// 停止音乐的原理
    /// </summary>
    public override void Stop()
    {
        base.Stop();
        playerEntity.m_audio.Stop();
    }

}
/// <summary>
/// 特效(GameObject)组件  Effect的更改替换
/// </summary>
public class Skill_Effect : SKillBase
{
    //特效元件
    [JsonIgnore] public GameObject clip;
    //特效实例
    [JsonIgnore] public GameObject effect;

    public override void Init(PlayerEntity player)
    {
        base.Init(player);
        //拿到加载对应路径得到的特效元件
        clip = Resources.Load<GameObject>("Effect/" + clipPath);
    }
    /// <summary>
    /// 切换并播放特效的原理
    /// </summary>
    public override void Play()
    {
        base.Play();
        effect = GameObject.Instantiate(clip, playerEntity.transform);
        effect.GetComponent<ParticleSystem>().Play();

    }
    /// <summary>
    /// 停止特效的原理
    /// </summary>
    public override void Stop()
    {
        base.Stop();
        effect.GetComponent<ParticleSystem>().Stop();
    }

}

人物实体(请结合前面的技能基类代码观看):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 玩家实体
/// </summary>
public class PlayerEntity : MonoBehaviour
{
    public string m_playerName;//玩家名称

    public PlayerInfo m_Info;//对于技能基类的引用
    public List<PlayerInfo> skills = new List<PlayerInfo>();//人物技能列表的存储库

    public AudioSource m_audio;//音乐组件
    public Animator m_anim;//动画组件
    public AnimatorOverrideController m_animOver;//替换使用的特定动画但保留其原始结构的组件
    public RuntimeAnimatorController m_runTimeAnim;//人物身上挂载的常见动画控制器 用于运行时动画的操作
    public void OnInit(string playerName)
    {
        m_playerName = playerName;

        //获取玩家身上的音乐、动画组件
        m_audio = GetComponent<AudioSource>();
        m_anim = GetComponent<Animator>();
        //拿到动画控制器
        m_runTime
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值