[3]嘗試用Unity3d製作一個王者榮耀(持續更新)->選擇英雄-(中)

来源:https://www.cnblogs.com/Miku-CEB-Bug/archive/2019/09/20/11553452.html
-Advertisement-
Play Games

如果已經看過本章節:目錄傳送門:這是目錄鴨~ 上節內容寫了Actor管理器,那麼這一節讓我們先創建一個角色。(此章節開始加速...) 1.製作角色展示AssetBundle: 提取農藥某個展示模型(Show)資源(這步具體去百度),然後再把模型製作成預製體,AssetBundle命名規則按照農藥的( ...


如果已經看過本章節:目錄傳送門:這是目錄鴨~

上節內容寫了Actor管理器,那麼這一節讓我們先創建一個角色。(此章節開始加速...)

1.製作角色展示AssetBundle:

提取農藥某個展示模型(Show)資源(這步具體去百度),然後再把模型製作成預製體,AssetBundle命名規則按照農藥的(ID_游戲拼音_資源類型.assetbundle):

製作UI預製體,還是得提取或者去農藥官網 pvp.qq.com 的壁紙中心下載原圖截取(一個是圖標一個是載入時候用到的):

創建一個空物體,並掛上ActorInfo組件,製作成預製體並輸入數據(雖然標簽以及打包的文件都是小寫的,但按照路徑讀取文件的時候不會區分大小寫,為了好看於是可以大寫):

到這步先不要打包,後面還有小部件需要打包的。

2.拼UI(最舒適的部分~):

創建一個滾動視圖,並且在Content位置增加自動佈局組件,再創建空對象改名Mode,裡面存放兩個按鈕用來切換皮膚和英雄選擇,如圖:

拉幾下幾下位置,最終效果:

然後我們製作一個預製體,用於動態生成(結構是一個空物體裡面有個按鈕(已把裡面文字刪去)和一個 名字 的 文本顯示組件):

把預製體粘貼到Content裡面測試有沒有問題(是否自動對齊):

測試放上去的內容記得刪除,設置預製體標簽:

然後我們寫一個代碼用於管理選擇英雄的UI響應的(前SelectionListManager)和 按鈕回調的(後HeroItemButton):

 1 /*
 2  * 編輯者:Miku醬
 3  * 版本:1
 4  * 首次編寫日期:2019/09/20 00:05
 5  * 修改日期:2019/09/20 00:05
 6  * 強行加一行~~~
 7  */
 8 using System.Collections;
 9 using System.Collections.Generic;
10 using UnityEngine;
11 using LuoHao.Actor;
12 using UnityEngine.UI;
13 using LuoHao.AssetBundleManager;
14 
15 namespace LuoHao.PVP.Selection
16 {
17     public class SelectionListManager : MonoBehaviour
18     {
19         public Transform testPos;
20 
21         /// <summary>
22         /// 介面
23         /// </summary>
24         public static SelectionListManager selectionListManager;
25 
26         /// <summary>
27         /// UI的AB包路徑
28         /// </summary>
29         static string uiPath = "UGUI_Selection_0.assetbundle";
30         [Header("父對象")]
31         public Transform UIparent;
32         /// <summary>
33         /// 當前選擇的英雄ID
34         /// </summary>
35          private int nowSelectionID = -1;
36 
37         GameObject testGM = null;
38         /// <summary>
39         /// 設置ID
40         /// </summary>
41         /// <param name="id">id</param>
42         public void SetSelectionID(int id)
43         {
44             if (nowSelectionID == id) return;
45            nowSelectionID = id;
46             if (testGM != null) Destroy(testGM);
47             Transform tr = Instantiate(AssetBundleManager.AssetBundleManager.
48                 GetAssetBundle(ActorManager.allActor[id].actorSkins[0].skinShowModelPath+ ".assetbundle")
49                 .GetAssetBundle().LoadAllAssets<GameObject>()[0],testPos).transform;
50             tr.localPosition = Vector3.zero;
51         }
52         
53         public int GetSelectionID()
54         {
55             return nowSelectionID;
56         }
57 
58         private void Awake()
59         {
60             selectionListManager = this;
61             nowSelectionID = -1;//重置ID
62         }
63         // Start is called before the first frame update
64         private void Start()
65         {
66             LoadList();
67         }
68 
69         // Update is called once per frame
70         private void Update()
71         {
72 
73         }
74         
75         private void LoadList()
76         {
77             //取得預製體
78             GameObject btn =AssetBundleManager.AssetBundleManager.
79                 GetAssetBundle(uiPath).GetAssetBundle().LoadAsset<GameObject>("HeroBtn");
80             List<ActorInfoData> infos = new List<ActorInfoData>(ActorManager.allActor.Values);//取得信息...
81             for(int i = 0; i < infos.Count; i++)//創建UI
82             {
83                 PackageForAssetBundle sprite = AssetBundleManager.AssetBundleManager.
84                     GetAssetBundle(infos[i].actorSkins[0].skinIconPath+".assetbundle");
85                    //取得圖標資源
86                 Transform tr = Instantiate(btn, UIparent).transform;
87                 tr.GetComponentInChildren<Text>().text = infos[i].actorName;//設置名字
88                 tr.GetComponentInChildren<Image>().sprite= sprite.GetAssetBundle().LoadAllAssets<Sprite>()[0]; //設置圖標
89                 tr.GetComponentInChildren<HeroItemButton>().heroID = infos[i].actorID;//設置ID
90                 sprite.UnLoadAssetBundle(false);//卸載
91             }
92         }
93     }
94 }

 

 

 1 /*
 2  * 編輯者:Miku醬
 3  * 版本:1
 4  * 首次編寫日期:2019/09/20 00:05
 5  * 修改日期:2019/09/20 00:05
 6  * 強行加一行~~~
 7  */
 8 using System.Collections;
 9 using System.Collections.Generic;
10 using UnityEngine;
11 
12 namespace LuoHao.PVP.Selection
13 {
14     public class HeroItemButton : MonoBehaviour
15     {
16         /// <summary>
17         /// 這個由代碼來設置
18         /// </summary>
19         [HideInInspector]
20         
21         public int heroID = 0;
22         public void OnClick()
23         {
24             SelectionListManager.selectionListManager.SetSelectionID(heroID);//調用更改ID
25             
26         }
27     }
28 }

然後在回到按鈕,掛上HeroItemButton並設置按鈕回調OnClick:

再再選擇英雄的場景中創建一個空物體(SelectionListManager),拖入展示位置和滾動視圖的Content:

 

3.試運行:

這時候我們點擊一下AssetBundle打包,讓程式飛一會~

在一個用於測試的空對象(沒有就創建)掛上ActorManager:

並輸入剛剛創建的阿離的ActorInfo文件的位置(這裡就要帶尾碼了,可以通過修改代碼來免除加尾碼):

然後運行:

我這邊因為臨時寫了個動畫的管理的所以有出場動畫展示,這個後面才講。

出現了動圖裡面的效果就說明成功啦!

不早了( 2019/09/20 00:30),下一節再見。

如果已經看過本章節:目錄傳送門:這是目錄鴨~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用PyCharm向世界打招呼! print (“Hello world!”) 介紹自己的基本信息的方法 ...
  • centos7上部署dubbo管理控制台dubbo admin 1 準備工作 伺服器:系統centos7, 記憶體4G, 存儲60G, ip 192.168.159.128 軟體環境: 安裝有jdk1.8, 具體安裝方式參見《centos7上安裝jdk1.8》博文; 安裝並啟動zookeeper,具體 ...
  • 儘可能讓一切變得簡單,用最簡單的方式完成工作 能用最少的概念,最精簡易懂的概念模型來抽象系統,多一個概念就多一份別人瞭解系統以及維護系統的複雜度,別人也會質疑多一個概念的意義所在,自己如果沒想清楚就容易被diss。 特別是在類的設計中,會發現其實很多時候用一個類就可以表達要乾的單一職責了,每個類職責 ...
  • 1.什麼是spring boot 答案:springboot是用來簡化spring應用的初始搭建和開發過程,使用特定的配置文件來配置,例如application.properties,簡化來maven配置,使項目從繁到簡。 2.springboot與spring的區別。 答案:1)Java在集成sp ...
  • 1.SpringMVC: SpringMVC是基於java的實現MVC設計模式的請求驅動類型的輕量級的web框架,通常把model,view,controller將web層進行職責解耦, 把複雜的web應用分層邏輯清晰的幾部分,簡化開發,減少錯誤,方便組內人員之間的配合。 SpringMVC框架和其 ...
  • 2019-09-19-22:11:33 今天是自學Python的第九天 學的內容是有關文件操作的,如:r、w、a、rb、wb、ab、r+、w+、a+等 有大牛幫我看一下我的代碼第一個有沒有什麼弊端嗎?我感覺好像沒有,但是看視頻時,說不建議這樣做 ...
  • 前言 上一篇文章開始了我們的springboot序篇,我們配置了mysql資料庫,但是我們sql語句直接寫在controller中並且使用的是jdbcTemplate。項目中肯定不會這樣使用,上篇文章也說了,會結合mybatis 或者JPA 使用。我們這篇文章就來結合 mybatis 來使用吧,至於 ...
  • 1.消息隊列介紹 消息隊列本質上來說是一個符合先進先出原則的單向隊列:一方發送消息並存入消息隊列尾部(生產者投遞消息),一方從消息隊列的頭部取出消息(消費者消費消息)。但對於一個成熟可靠的消息隊列來說,所需要解決的主要問題還包括:高效可靠的消息投遞、存儲;能承受高併發的流量衝擊,可通過集群部署來解決 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...