ibcadmin 发表于 2019-9-17 11:32:38

尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄

<p><strong>如果已经看过本章节:目次传送门:这是目次鸭~</strong></p>
<h3>1.场景搭建:</h3>
<p>首先我们去AssetStore逛淘宝~~~</p>
<p><div align="center"></div></p>
<p>我淘到的是这个资源,其他好看的场景(消耗不高的都行)。</p>
<p>然后我们导入了这个资源后,把资源根文件夹的名字改为Select,把Demo场景文件的名字改为Selection,我如许修改的emmm...</p>
<p><div align="center"></div></p>
<p>然后打开那个Demo场景,走到LightningSetting关闭雾结果(这个消耗有点大,关一下,你开心也可以不关的~):</p>
<p><div align="center"></div></p>
<p>然后我们就在场景里移动Main Camera到你喜好的好看的位置~</p>
<p>趁便创建个Reflection Probe(反射结果的):</p>
<p><div align="center"></div></p>
<p>前面是没加的,背面是加了的,区别有点小,仔细看右边的更美丽诶~~~</p>
<p><div align="center"></div><div align="center"></div></p>
<p>然后我们在场景中创建空对象,重新定名为你喜好的名字,用于展示英雄的脚色坐标的定位,我在里面放了个阿离并把相对坐标设置为零来测试站的位置是否准确(我这里面还有个光照是因为脸部比力暗,你可以自己调解光照的,对~说的就是你o(*^▽^*)o):</p>
<p><div align="center"></div></p>
<p>到此为止~我们的场景就搭建完毕了亲亲~</p>
<h3>2.英雄资源的打包相关(重要!!!):</h3>
<p>定名规则:我们可以看到,农药的AssetBundle定名结构是:英雄ID+皮肤编号(没有空格,比如说阿离的ID是199,这个花间舞是第二个皮肤,所以ID为1992,第一个默认皮肤不需要输入皮肤ID就199就好了)_英雄拼音_资源范例.assetbbundle。(下面可以看到廉颇ID是105,这个设定使得我们提资源非常方便~良心TX~):</p>
<p><div align="center"></div></p>
<p>然后我们也操持用这种规则来定名~</p>
<p>下面部门含有代码~</p>
<p>创建几个新文件夹在根工程目次下,路径是 ActorManager/Scripts,然后再在里面创建一个Csharp(即C#),名为ActorManager:</p>

/*
* 编辑者:Miku酱
* 版本:1
* 初次编写日期:2019/09/15 13:53
* 修改日期:2019/09/15 13:53
* 强行加一行~~~
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuoHao.AssetBundleManager;

namespace LuoHao.Actor
{
    public class ActorManager : MonoBehaviour
    {
      /// <summary>
      /// 脚色信息文件的列表
      /// </summary>
      
      public List<string> actorFileList = new List<string>();
      /// <summary>
      /// 全部的脚色信息
      /// </summary>
      public static Dictionary<int, ActorInfoData> allActor = new Dictionary<int, ActorInfoData>();

      private void Awake()
      {
            LoadAllActor();//加载
            DontDestroyOnLoad(this.gameObject);//切换场景不烧毁这个物体
      //    Debug.Log(allActor.actorName);//测试
         
      }
      /// <summary>
      /// 加载脚色信息
      /// </summary>
      public bool LoadAllActor()
      {
            for(int i = 0; i < actorFileList.Count; i++)
            {
                //取得文件
             PackageForAssetBundle pfa=   AssetBundleManager.AssetBundleManager.GetAssetBundle(actorFileList);
                //加载资源
                GameObject[] gms = pfa.GetAssetBundle().LoadAllAssets<GameObject>();
                ActorInfo[] ai = gms.GetComponents<ActorInfo>();
                if (ai.Length == 0)//数组长度为0则返回错误
                {
                  Debug.LogError("加载脚色信息文件失败!\n错误文件位置:"+actorFileList);
                  return false;
                }
                else
                {
                  for (int i1 = 0; i1 < ai.Length; i1++)
                        allActor.Add(ai._actorInfoData.actorID, ai._actorInfoData);
                  //信息载入字典....
                }
                pfa.UnLoadAssetBundle(true);//卸载ab包
            }
            
            return true;
      }
      
    }
   
    /// <summary>
    /// 储存单个脚色信息的类
    /// </summary>
    //序列化,注意要用System定名空间下面的
    public class ActorInfoData
    {
      /// <summary>
      /// 脚色名字
      /// </summary>
      public string actorName = "英雄名字";
      /// <summary>
      /// 脚色拼音
      /// </summary>
      public string actorPinYin = "PinYin";
      /// <summary>
      /// 脚色ID
      /// </summary>
      public int actorID = 100;
      /// <summary>
      /// 屏蔽英雄
      /// </summary>
      public bool banActor = false;
      /// <summary>
      /// 脚色配景
      /// </summary>
       //这个是文本框,表现在编辑器的
      public string actorBG = "配景故事";

      /// <summary>
      /// 皮肤列表(第一个就是原皮,必填)
      /// </summary>
      public List<ActorSkin> actorSkins = new List<ActorSkin>();
      
    }
    /// <summary>
    /// 储存单个皮肤的
    /// </summary>
    //序列化
    public class ActorSkin
    {
      /// <summary>
      /// 皮肤名字
      /// </summary>
      public string skinName = "皮肤名字";
      /// <summary>
      /// 皮肤展示模子资源路径
      /// </summary>
      //这个是文本框,表现在编辑器的
      public string skinShowModelPath = "皮肤展示模子资源路径";
      /// <summary>
      /// 皮肤对战模子资源路径
      /// </summary>
      //这个是文本框,表现在编辑器的
      public string skinBattleModelPath = "皮肤对战模子资源路径";
      /// <summary>
      /// 皮肤展示殊效资源路径
      /// </summary>
      //这个是文本框,表现在编辑器的
      public string skinShowEffectPath = "皮肤展示殊效资源";
      /// <summary>
      /// 皮肤对战殊效资源路径
      /// </summary>
      //这个是文本框,表现在编辑器的
      public string skinBattleEffectPath = "皮肤对战殊效资源";
    }
}

<p>脚本ActorInfo(承载信息的载体):</p>

1 /*
2* 编辑者:Miku酱
3* 版本:1
4* 初次编写日期:2019/09/15 13:53
5* 修改日期:2019/09/15 13:53
6* 强行加一行~~~
7*/
8
9 using System.Collections;
10 using System.Collections.Generic;
11 using UnityEngine;
12
13 namespace LuoHao.Actor {
14   public class ActorInfo : MonoBehaviour
15   {
16         
17         public ActorInfoData _actorInfoData;
18   }
19 }

<p> </p>
<p> </p>
<p>创建脚色信息数据库:</p>
<p>新建一个物体,并挂上脚本ActorInfo,修改信息(你开心就好随便想改啥就改啥~),然后制作成预制体而且设置标签:</p>
<p><div align="center"></div><div align="center"></div></p>
<p>然后在点击工具栏的打包AssetBundle的按钮,打包这个预制体,末了我们在场景中随便找个物体挂上ActorManager,并增长一个路径(就是你预制体标签的名字加后缀,标签默认是全部小写,我们设置的时间巨细写不影响文件读取):</p>
<p><div align="center"></div></p>
<p>如果运行后Unity编辑器毫无波涛乃至有点想笑的话那就说明这步OK啦~</p>
<p>施工了一个中午emmm~头发又少了几根,下一部门再见咯~</p>
<p><strong>如果已经看过本章节:目次传送门:这是目次鸭~</strong></p>
<p> </p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/Miku-CEB-Bug/archive/2019/09/15/11522216.html" target="_blank">https://www.cnblogs.com/Miku-CEB-Bug/archive/2019/09/15/11522216.html</a>
页: [1]
查看完整版本: 尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄