[1]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(上)
如果已经看过本章节:目录传送门:这是目录鸭~
1.场景搭建:
首先我们去AssetStore逛淘宝~~~

我淘到的是这个资源,其他好看的场景(消耗不高的都行)。
然后我们导入了这个资源后,把资源根文件夹的名字改为Select,把Demo场景文件的名字改为Selection,我这样修改的emmm...

然后打开那个Demo场景,走到LightningSetting关闭雾效果(这个消耗有点大,关一下,你开心也可以不关的~):

然后我们就在场景里移动Main Camera到你喜欢的好看的位置~
顺便创建个Reflection Probe(反射效果的):

前面是没加的,后面是加了的,区别有点小,仔细看右边的更漂亮诶~~~


然后我们在场景中创建空对象,重新命名为你喜欢的名字,用于展示英雄的角色坐标的定位,我在里面放了个阿离并把相对坐标设置为零来测试站的位置是否准确(我这里面还有个光照是因为脸部比较暗,你可以自己调整光照的,对~说的就是你o(*^▽^*)o):

到此为止~我们的场景就搭建完毕了亲亲~
2.英雄资源的打包相关(重要!!!):
命名规则:我们可以看到,农药的AssetBundle命名结构是:英雄ID+皮肤编号(没有空格,比如说阿离的ID是199,这个花间舞是第二个皮肤,所以ID为1992,第一个默认皮肤不需要输入皮肤ID就199就好了)_英雄拼音_资源类型.assetbbundle。(下面可以看到廉颇ID是105,这个设定使得我们提资源十分方便~良心TX~):

然后我们也打算用这种规则来命名~
下面部分含有代码~
创建几个新文件夹在根工程目录下,路径是 ActorManager/Scripts,然后再在里面创建一个Csharp(即C#),名为ActorManager:
/*
* 编辑者: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>
[TextArea]
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[100].actorName);//测试 }
/// <summary>
/// 加载角色信息
/// </summary>
public bool LoadAllActor()
{
for(int i = ; i < actorFileList.Count; i++)
{
//取得文件
PackageForAssetBundle pfa= AssetBundleManager.AssetBundleManager.GetAssetBundle(actorFileList[i]);
//加载资源
GameObject[] gms = pfa.GetAssetBundle().LoadAllAssets<GameObject>();
ActorInfo[] ai = gms[].GetComponents<ActorInfo>();
if (ai.Length == )//数组长度为0则返回错误
{
Debug.LogError("加载角色信息文件失败!\n错误文件位置:"+actorFileList[i]);
return false;
}
else
{
for (int i1 = ; i1 < ai.Length; i1++)
allActor.Add(ai[i1]._actorInfoData.actorID, ai[i1]._actorInfoData);
//信息载入字典....
}
pfa.UnLoadAssetBundle(true);//卸载ab包
} return true;
} } /// <summary>
/// 储存单个角色信息的类
/// </summary>
[System.Serializable]//序列化,注意要用System命名空间下面的
public class ActorInfoData
{
/// <summary>
/// 角色名字
/// </summary>
public string actorName = "英雄名字";
/// <summary>
/// 角色拼音
/// </summary>
public string actorPinYin = "PinYin";
/// <summary>
/// 角色ID
/// </summary>
public int actorID = ;
/// <summary>
/// 屏蔽英雄
/// </summary>
public bool banActor = false;
/// <summary>
/// 角色背景
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string actorBG = "背景故事"; /// <summary>
/// 皮肤列表(第一个就是原皮,必填)
/// </summary>
public List<ActorSkin> actorSkins = new List<ActorSkin>(); }
/// <summary>
/// 储存单个皮肤的
/// </summary>
[System.Serializable]//序列化
public class ActorSkin
{
/// <summary>
/// 皮肤名字
/// </summary>
public string skinName = "皮肤名字";
/// <summary>
/// 皮肤展示模型资源路径
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string skinShowModelPath = "皮肤展示模型资源路径";
/// <summary>
/// 皮肤对战模型资源路径
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string skinBattleModelPath = "皮肤对战模型资源路径";
/// <summary>
/// 皮肤展示特效资源路径
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string skinShowEffectPath = "皮肤展示特效资源";
/// <summary>
/// 皮肤对战特效资源路径
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string skinBattleEffectPath = "皮肤对战特效资源";
/// <summary>
/// 皮肤原画位置
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string skinBannerPath = "皮肤原画位置";
/// <summary>
/// 皮肤小图标位置
/// </summary>
[TextArea]//这个是文本框,显示在编辑器的
public string skinIconPath = "皮肤小图标位置";
}
}
脚本ActorInfo(承载信息的载体):
/*
* 编辑者:Miku酱
* 版本:1
* 首次编写日期:2019/09/15 13:53
* 修改日期:2019/09/15 13:53
* 强行加一行~~~
*/ using System.Collections;
using System.Collections.Generic;
using UnityEngine; namespace LuoHao.Actor {
public class ActorInfo : MonoBehaviour
{
[Header("角色信息")]
public ActorInfoData _actorInfoData;
}
}
创建角色信息数据库:
新建一个物体,并挂上脚本ActorInfo,修改信息(你开心就好随便想改啥就改啥~),然后制作成预制体并且设置标签:


然后在点击工具栏的打包AssetBundle的按钮,打包这个预制体,最后我们在场景中随便找个物体挂上ActorManager,并增加一个路径(就是你预制体标签的名字加后缀,标签默认是全部小写,我们设置的时候大小写不影响文件读取):

这步加载没错误就OK了,记得删除测试用的Test对象,请看下一节。
施工了一个中午emmm~头发又少了几根,下一部分再见咯~
如果已经看过本章节:目录传送门:这是目录鸭~
[1]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(上)的更多相关文章
- [3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)
如果已经看过本章节:目录传送门:这是目录鸭~ 上节内容写了Actor管理器,那么这一节让我们先创建一个角色.(此章节开始加速...) 1.制作角色展示AssetBundle: 提取农药某个展示模型(S ...
- [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划
太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...
- [1]尝试用Unity3d制作一个王者荣耀(持续更新)->AssetBundle管理器
如果已经看过本章节:目录传送门:这是目录鸭~ 1.AssetBundleManager: 首先我们创建一个文件夹,叫AssetBundleManager,再创建Csharp(即C#)脚本,名为Asse ...
- 尝试用kotlin做一个app(二)
导航条 我想实现的效果是这样的 类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动 ·添加布局 <!--导航分类:编程语言/技术文档/源码 ...
- 尝试用kotlin做一个app(五)
JSP后台管理系统 开发工具是IntelliJ IDEA+tomcat+mysql5.6.19+mysql-connector-java-5.1.48.jar+easyui+kindeditor 之前 ...
- 尝试用kotlin做一个app(四)
本来是应该为主页加载数据库数据了,但是想着做后台,之前写jsp后台写吐了,所以先拖几天.把之前的代码完善一下,或者添加些新内容. ...... 多个fragment切换卡顿 首先修正一个bug.从主页 ...
- 尝试用kotlin做一个app(三)
新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.Ne ...
- 尝试用kotlin做一个app(一)
1.先添加一下anko库 依赖:implementation "org.jetbrains.anko:anko:$anko_version" 版本:ext.anko_version ...
- 尝试用kotlin做一个app(写在前面)
学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...
随机推荐
- UVA11388 GCD LCM
(链接点这儿) 题目: The GCD of two positive integers is the largest integer that divides both the integers w ...
- java并发编程(七)----(JUC)ReadWriteLock
前面我们已经分析过JUC包里面的Lock锁,ReentrantLock锁和semaphore信号量机制.Lock锁实现了比synchronized更灵活的锁机制,Reentrantlock是Lock的 ...
- alluxio源码解析-netty部分(2)
netty简介 Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. netty作为alluxio中重要的通讯组件 在常见的客户端上传,下载中,都会有n ...
- 浅谈IDEA集成SSM框架(SpringMVC+Spring+MyBatis)
前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...
- Spring AOP JDK动态代理与CGLib动态代理区别
静态代理与动态代理 静态代理 代理模式 (1)代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. (2)静态代理由 业务实现类.业务代理类 两部分 ...
- 8.14 day32 TCP服务端并发 GIL解释器锁 python多线程是否有用 死锁与递归锁 信号量event事件线程q
TCP服务端支持并发 解决方式:开多线程 服务端 基础版 import socket """ 服务端 1.要有固定的IP和PORT 2.24小时不间断提供服务 3.能够支 ...
- Mybatis mapper动态代理的原理详解
在开始动态代理的原理讲解以前,我们先看一下集成mybatis以后dao层不使用动态代理以及使用动态代理的两种实现方式,通过对比我们自己实现dao层接口以及mybatis动态代理可以更加直观的展现出my ...
- 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之四Nlog记录日志至数据库
为什么要进行日志记录呢?为什么要存至数据库呢?只能说日志记录是每个系统都应当有的. 好的日志记录方式可以提供我们足够多定位问题的依据.查找系统或软件或项目的错误或异常记录.程序在运行时就像一个机器人, ...
- C#开发BIMFACE系列8 服务端API之获取文件上传状态信息
系列目录 [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...
- 【故障公告】阿里云 RDS 数据库服务器 CPU 100% 造成全站故障
非常非常抱歉,今晚 19:34 ~ 21:16 园子所使用的阿里云 RDS 数据库服务器突然出现 CPU 100% 问题,造成全站无法正常访问,由此您带来了很大的麻烦,请您谅解. 故障经过是这样的.1 ...