主頁 >  其他 > 《學Unity的貓》——第十一章:Unity貓咪救濟管理系統,山崗的星光

《學Unity的貓》——第十一章:Unity貓咪救濟管理系統,山崗的星光

2020-12-04 13:45:22 其他

文章目錄

        • 11.1 山崗的星光
        • 11.2 Unity貓咪救濟管理系統
        • 11.3 設定UI攝像機
        • 11.4 設定Canvas
        • 11.5 制作登錄界面預設
        • 11.6 制作大廳界面預設
        • 11.7 制作資訊界面預設
        • 11.8 UI界面管理器:UIManager
        • 11.9 封裝貓資訊的類:CatInfo
        • 11.10 貓資訊管理器:CatManager
        • 11.11 資料存盤:CatDataBase
        • 11.12 Json庫:LitJson
        • 11.13 觀察者模式
        • 11.14 登錄界面代碼:LoginPanel
        • 11.15 大廳界面代碼:PlazaPanel
        • 11.16 資訊界面代碼:InfoPanel

簡介:我是一名Unity游戲開發工程師,皮皮是我養的貓,會講人話,它接到了喵星的特殊任務:學習編程,學習Unity游戲開發,
于是,發生了一系列有趣的故事,
在這里插入圖片描述

11.1 山崗的星光

稀疏的星光,清輝灑地,流浪貓小花凝望著窗外,它沒有想到一個月前它還是一只無家可歸的流浪小貓,此時已經有了一個溫暖的家,
事情要回到一個月前的那個夜晚,秋風瑟瑟,小花在路邊蜷縮著身子,有個人類經過它的身旁,那個人站住了,嘴里發出蹩腳的喵喵聲,慢慢想要靠近,小花見狀立刻躲進了斜坡中的草叢里,那人停留片刻后便離開了,
兩天后,小花又看到了那個人,而且還帶著一只貓一臺電腦,那只貓朝著小花揮手:“喂,過來這邊,不要怕,我們不是壞人,”
小花不敢靠前,那只貓又喊道:“我叫皮皮,這個是我的鏟屎官,這里有吃的,快過來,”
后來,小花不僅飽飽的吃了一餐,還得知了他們正在做一個貓咪救濟管理系統,皮皮是專案的策劃貓,它希望可以為那些流浪貓提供基礎的保障,實名登記流浪貓,統一管理,調度資源,在設定的救濟點投放食物和過冬物資,并與人類鏟屎官合作,希望可以給流浪貓尋找合適的家,
每一只來到地球的喵星人都有一個唯一的編號,只要登記了這個編號,就可以隨時隨地通過貓電波進行通信,小花成為了救濟系統的第一只貓,
很快便有人類來領養了小花,以前,小花總是坐在小斜坡上望著星星,它不知道自己從哪里來的,那里還有很多和它一樣的貓,有的從來沒見過,有的離開了又回來了,有的離開了就再也沒有回來,只有星星一直陪著它,現在它有了家,它也想和皮皮它們一起,幫助流離失所的貓尋找溫暖的家,
山崗的星光,愿你不再流浪,被世界溫柔以待,

11.2 Unity貓咪救濟管理系統

貓咪救濟管理系統,模塊設計如下:
在這里插入圖片描述
運行效果如下:
在這里插入圖片描述

本工程使用的Unity版本為2020.1.14f1c1 (64-bit),工程已上傳到GitHub,感興趣的同學可以下載下來學習,
GitHub地址:https://github.com/linxinfa/Unity-CatInfoSystem在這里插入圖片描述

11.3 設定UI攝像機

創建一個攝像機,重命名為UICamera
在這里插入圖片描述
設定Culling Mask只渲染UI層,
在這里插入圖片描述
設定視口Projection為正交視口Orthographic
在這里插入圖片描述
設定Main Camera不渲染UI層,
在這里插入圖片描述

11.4 設定Canvas

創建Canvas,并設定Render ModeScreen Space -Camera,設定Render CameraUICamera,再把Canvas Scaler組件的UI Scale Mode設定為Scale With Screen Size
在這里插入圖片描述

11.5 制作登錄界面預設

LoginPanel.prefab
在這里插入圖片描述
在這里插入圖片描述
兩個Input Field組件,用來輸入賬號和密碼(accountpassword),一個Button組件作為登錄按鈕(LoginButton),

11.6 制作大廳界面預設

PlazaPanel.prefab
在這里插入圖片描述
在這里插入圖片描述
一個Button組件作為登記按鈕(AddButton),一個Scroll View組件作為拖拉串列,一個Item作為串列的項,一個Button組件作為退出登錄按鈕(LogoutButton),其中,Item中使用多個Text組件作為資訊顯示,

11.7 制作資訊界面預設

InfoPnel.prefab
在這里插入圖片描述
在這里插入圖片描述
使用三個Button組件作為確定、洗掉、關閉按鈕,使用多個Input Field組件和一個Drop Down組件作為資訊輸入,

11.8 UI界面管理器:UIManager

UI預設資源放在Resources目錄中,
在這里插入圖片描述
封裝一個UIManager類,用來加載界面預設資源和顯示界面,

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

public class UIManager
{
    public void Init(Canvas canvas)
    {
        m_canvasTrans = canvas.transform;
    }

    /// <summary>
    /// 顯示界面
    /// </summary>
    /// <param name="panelName">界面名稱</param>
    /// <returns></returns>
    public GameObject ShowPanel(string panelName)
    {
        GameObject prefabObj = null;
        if (m_panelRes.ContainsKey(panelName))
        {
            prefabObj = m_panelRes[panelName];
        }
        else
        {
            prefabObj = Resources.Load<GameObject>(panelName);
            m_panelRes[panelName] = prefabObj;
        }
        GameObject panelObj = Object.Instantiate(prefabObj);
        panelObj.transform.SetParent(m_canvasTrans, false);
        return panelObj;
    }

    private Transform m_canvasTrans;
    /// <summary>
    /// 界面資源快取
    /// </summary>
    private Dictionary<string, GameObject> m_panelRes = new Dictionary<string, GameObject>();

    /// <summary>
    /// 單例模式
    /// </summary>
    private static UIManager s_instance;
    public static UIManager Instance
    {
        get
        {
            if (null == s_instance)
                s_instance = new UIManager();
            return s_instance;
        }
    }
}

/// <summary>
/// 界面名稱,對應預設檔案名稱
/// </summary>
public class PanelName
{
    public const string LOGIN_PANEL = "LoginPanel";
    public const string PLAZA_PANEL = "PlazaPanel";
    public const string INFO_PANEL = "InfoPanel";
}

11.9 封裝貓資訊的類:CatInfo

貓的資訊中有個uuid是系統生成的,id是貓星人的編號,由喵星人手動輸入,

/// <summary>
/// 貓咪資訊
/// </summary>
public class CatInfo 
{
    public CatInfo()
    {
        uuid = System.Guid.NewGuid().ToString("N");
    }


    /// <summary>
    /// 系統唯一識別符號
    /// </summary>
    public string uuid;
    /// <summary>
    /// 喵星身份編號
    /// </summary>
    public string id;
    /// <summary>
    /// 昵稱
    /// </summary>
    public string nickname;
    /// <summary>
    /// 品種
    /// </summary>
    public string kind;
    /// <summary>
    /// 毛色
    /// </summary>
    public string color;
    /// <summary>
    /// 性別,0:母,1:公
    /// </summary>
    public int gender;
    /// <summary>
    /// 出生
    /// </summary>
    public string birth;
    /// <summary>
    /// 流浪原因
    /// </summary>
    public string reason;
}

11.10 貓資訊管理器:CatManager

封裝一個貓資訊的管理類,CatManager,負責資料加載和增刪改查,

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

public class CatManager
{
    public void Init()
    {
        // 從資料庫加載資料
        m_datas = CatDataBase.QueryDatas();
    }

    /// <summary>
    /// 新增或修改貓資訊
    /// </summary>
    /// <param name="info"></param>
    public void AddOrModify(CatInfo info)
    {
        CatDataBase.AddOrModify(info);
        // 拋出事件,更新界面
        EventDispatcher.instance.DispatchEvent(EventNameDef.EVENT_ADD_OR_MODIFY_CAT, info);
    }

    /// <summary>
    /// 洗掉貓資訊
    /// </summary>
    /// <param name="uuid"></param>
    public void Del(string uuid)
    {
        CatDataBase.Del(uuid);
        // 拋出事件,更新界面
        EventDispatcher.instance.DispatchEvent(EventNameDef.EVENT_DEL_CAT, uuid);
    }

    public Dictionary<string, CatInfo> data
    {
        get { return m_datas; }
    }

    /// <summary>
    /// 貓資訊資料快取
    /// </summary>
    private Dictionary<string, CatInfo> m_datas = null;

    /// <summary>
    /// 單例模式
    /// </summary>
    private static CatManager s_instance;
    public static CatManager Instance
    {
        get
        {
            if (null == s_instance)
                s_instance = new CatManager();
            return s_instance;
        }
    }
}

11.11 資料存盤:CatDataBase

封裝一個CatDataBase類,負責資料的本地寫入和讀取,

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System.IO;

/// <summary>
/// 貓資料庫
/// </summary>
public class CatDataBase
{

    /// <summary>
    /// 新增或修改資料
    /// </summary>
    /// <param name="info"></param>
    public static void AddOrModify(CatInfo info)
    {
        if (s_datas.ContainsKey(info.uuid))
        {
            s_datas[info.uuid] = info;
        }
        else
        {
            s_datas.Add(info.uuid, info);
        }
        
        SaveData();
    }

    /// <summary>
    /// 刪資料
    /// </summary>
    /// <param name="uuid"></param>
    public static void Del(string uuid)
    {
        if (!s_datas.ContainsKey(uuid)) return;
        s_datas.Remove(uuid);
        SaveData();
    }

    /// <summary>
    /// 查詢所有貓資訊
    /// </summary>
    /// <returns></returns>
    public static Dictionary<string, CatInfo> QueryDatas()
    {
        string jsonStr = PlayerPrefs.GetString("cats", null);
        if (string.IsNullOrEmpty(jsonStr))
        {
            s_datas = new Dictionary<string, CatInfo>();
        }
        else
        {
            s_datas = JsonMapper.ToObject<Dictionary<string, CatInfo>>(jsonStr);
        }
        return s_datas;
    }

    /// <summary>
    /// 使用PlayerPrefs將資料寫入本地
    /// </summary>
    public static void SaveData()
    {
        string jsonStr = JsonMapper.ToJson(s_datas);
        PlayerPrefs.SetString("cats", jsonStr);
    }

    private static Dictionary<string, CatInfo> s_datas = new Dictionary<string, CatInfo>();
}

其中寫入本地資料用到了Unity提供的PlayerPrefs類,
讀取資料介面

public static string GetString(string key, string defaultValue);

寫入資料介面

public static void SetString(string key, string value);

11.12 Json庫:LitJson

需要將資料序列號到本地檔案中,采用Json的格式,所以需要匯入一個Json庫,從GitHub下載LitJson原始碼:
https://github.com/LitJSON/litjson/releases/tag/0.15.0
在這里插入圖片描述
下載后將原始碼匯入到工程中,
在這里插入圖片描述
使用時引入命名空間,

using LitJson;

主要用到JsonMapper的兩個介面,
objectjson字串介面

public static string ToJson (object obj)

json字串轉object介面

public static T ToObject<T> (string json)

11.13 觀察者模式

資料更新的時候要更新ui的顯示,這里采用觀察者模式,ui界面的代碼監聽事件,資料變化時拋出事件,從而實作ui的顯示重繪,
封裝一個事件訂閱和發送的類:EventDispatcher

using UnityEngine;
using System.Collections.Generic;

public delegate void MyEventHandler(params object[] objs);

public class EventDispatcher
{
    /// <summary>
    /// 注冊事件的回應函式
    /// </summary>
    /// <param name="type"></param>
    /// <param name="handler"></param>
    public void Regist(string type, MyEventHandler handler)
    {
        if (handler == null)
            return;

        if (!listeners.ContainsKey(type))
        {
            listeners.Add(type, new Dictionary<int, MyEventHandler>());
        }
        var handlerDic = listeners[type];
        var handlerHash = handler.GetHashCode();
        if (handlerDic.ContainsKey(handlerHash))
        {
            handlerDic.Remove(handlerHash);
        }
        listeners[type].Add(handler.GetHashCode(), handler);
    }

    /// <summary>
    /// 注銷事件的回應函式
    /// </summary>
    /// <param name="type"></param>
    /// <param name="handler"></param>
    public void UnRegist(string type, MyEventHandler handler)
    {
        if (handler == null)
            return;

        if (listeners.ContainsKey(type))
        {
            listeners[type].Remove(handler.GetHashCode());
            if (null == listeners[type] || 0 == listeners[type].Count)
            {
                listeners.Remove(type);
            }
        }
    }

    /// <summary>
    /// 拋出事件,觸發之前注冊過的回應函式
    /// </summary>
    /// <param name="evt"></param>
    /// <param name="objs"></param>
    public void DispatchEvent(string evt, params object[] objs)
    {
        if (listeners.ContainsKey(evt))
        {
            var handlerDic = listeners[evt];
            if (handlerDic != null && 0 < handlerDic.Count)
            {
                var dic = new Dictionary<int, MyEventHandler>(handlerDic);
                foreach (var f in dic.Values)
                {
                    try
                    {
                        f(objs);
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogErrorFormat(szErrorMessage, evt, ex.Message, ex.StackTrace);
                    }
                }
            }
        }
    }

    /// <summary>
    /// 清理事件
    /// </summary>
    /// <param name="key"></param>
    public void ClearEvents(string key)
    {
        if (listeners.ContainsKey(key))
        {
            listeners.Remove(key);
        }
    }

    /// <summary>
    /// 事件監聽快取
    /// </summary>
    private Dictionary<string, Dictionary<int, MyEventHandler>> listeners = new Dictionary<string, Dictionary<int, MyEventHandler>>();
    private readonly string szErrorMessage = "DispatchEvent Error, Event:{0}, Error:{1}, {2}";

    /// <summary>
    /// 單例模式
    /// </summary>
    private static EventDispatcher s_instance;
    public static EventDispatcher instance
    {
        get
        {
            if (null == s_instance)
                s_instance = new EventDispatcher();
            return s_instance;
        }
    }
}

定義事件

public class EventNameDef 
{
    /// <summary>
    /// 新增或修改一只貓的資訊
    /// </summary>
    public const string EVENT_ADD_OR_MODIFY_CAT  = "EVENT_ADD_OR_MODIFY_CAT";

    /// <summary>
    /// 洗掉一只貓的資訊
    /// </summary>
    public const string EVENT_DEL_CAT = "EVENT_DEL_CAT";
}

11.14 登錄界面代碼:LoginPanel

登錄界面代碼LoginPanel,掛在LoginPanel.prefab上,
簡單判斷下賬號和密碼,如果賬號為admin且密碼為123456則進入大廳界面,
(實際開發需要有賬號注冊,與服務器通信才能完成登錄,這里只是演示效果),

using UnityEngine;
using UnityEngine.UI;

public class LoginPanel : MonoBehaviour
{
    public InputField nameInput;
    public InputField pwdInput;

    public Button loginBtn;

    void Start()
    {
        loginBtn.onClick.AddListener(() =>
        {
            if ("admin" == nameInput.text && "123456" == pwdInput.text)
            {
                Destroy(gameObject);
                UIManager.Instance.ShowPanel(PanelName.PLAZA_PANEL);
            }
        });
    }
}

系結ui物件
在這里插入圖片描述

11.15 大廳界面代碼:PlazaPanel

大廳界面代碼PlazaPanel,掛在PlazaPanel.prefab上,

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

public class PlazaPanel : MonoBehaviour
{
    public Button logoutBtn;
    public Button signBtn;
    public GameObject catItemObj;

    private Transform listRoot;

    void Awake()
    {
        // 注冊事件
        EventDispatcher.instance.Regist(EventNameDef.EVENT_ADD_OR_MODIFY_CAT, OnEventAddOrModifyCat);
        EventDispatcher.instance.Regist(EventNameDef.EVENT_DEL_CAT, OnEventDelCat);

        CatManager.Instance.Init();
        catItemObj.SetActive(false);
        listRoot = catItemObj.transform.parent;
    }

    void Start()
    {
        // 退出登錄
        logoutBtn.onClick.AddListener(() =>
        {
            Destroy(gameObject);
            UIManager.Instance.ShowPanel(PanelName.LOGIN_PANEL);
        });

        // 登記新資訊
        signBtn.onClick.AddListener(() =>
        {
            UIManager.Instance.ShowPanel(PanelName.INFO_PANEL);
        });

        // 遍歷資料,創建串列
        foreach (CatInfo catInfo in CatManager.Instance.data.Values)
        {
            CreateItem(catInfo);
        }

    }

    /// <summary>
    /// 創建資訊串列的一行ui
    /// </summary>
    /// <param name="info"></param>
    void CreateItem(CatInfo info)
    {
        var obj = Instantiate(catItemObj);
        obj.SetActive(true);
        obj.transform.SetParent(listRoot, false);
        var itemUi = obj.GetComponent<CatListItem>();
        // 使用資料更新ui
        itemUi.UpdateUi(info);
        // 快取,方便后面更新ui
        m_catUiList[info.uuid] = itemUi;
    }

    /// <summary>
    /// 資料發生變化,更新ui
    /// </summary>
    /// <param name="args"></param>
    void OnEventAddOrModifyCat(params object[] args)
    {
        var info = args[0] as CatInfo;
        if (m_catUiList.ContainsKey(info.uuid))
        {
            m_catUiList[info.uuid].UpdateUi(info);
        }
        else
        {
            // 創建多一行
            CreateItem(info);
        }
    }

    /// <summary>
    /// 資訊被洗掉,洗掉對應的ui
    /// </summary>
    /// <param name="args"></param>
    void OnEventDelCat(params object[] args)
    {
        var uuid = (string)args[0];
        if (m_catUiList.ContainsKey(uuid))
        {
            var ui = m_catUiList[uuid];
            if(null != ui)
            {
                Destroy(ui.gameObject);
            }
            m_catUiList.Remove(uuid);
        }

    }

    /// <summary>
    /// 界面被銷毀
    /// </summary>
    private void OnDestroy()
    {
        // 注銷事件
        EventDispatcher.instance.UnRegist(EventNameDef.EVENT_ADD_OR_MODIFY_CAT, OnEventAddOrModifyCat);
        EventDispatcher.instance.UnRegist(EventNameDef.EVENT_DEL_CAT, OnEventDelCat);
    }

    private Dictionary<string, CatListItem> m_catUiList = new Dictionary<string, CatListItem>();
}

系結PlazaPanel組件的ui物件,
在這里插入圖片描述
其中,串列的行ui單獨封裝成一個組件CatListItem,掛在Item節點上,

using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 串列的一行ui
/// </summary>
public class CatListItem : MonoBehaviour
{
    public Text idText;
    public Text nameText;
    public Text kindText;
    public Text colorText;
    public Text genderText;
    public Text birthText;
    public Text resonText;

    public Button itemBtn;

    public void Start()
    {
        // 串列的行被點擊,打開資訊界面
        itemBtn.onClick.AddListener(() => 
        {
            var panelObj =  UIManager.Instance.ShowPanel(PanelName.INFO_PANEL);
            var infoPanel = panelObj.GetComponent<InfoPanel>();
            infoPanel.Init(m_info);
        });
    }

    /// <summary>
    /// 更新ui
    /// </summary>
    /// <param name="info"></param>
    public void UpdateUi(CatInfo info)
    {
        m_info = info;
        idText.text = info.id;
        nameText.text = info.nickname;
        kindText.text = info.kind;
        colorText.text = info.color;
        genderText.text = 0 == info.gender ? "母" : "公";
        birthText.text = info.birth;
        resonText.text = info.reason;
    }

    private CatInfo m_info;
}

系結CatListItem組件的ui物件,
在這里插入圖片描述

11.16 資訊界面代碼:InfoPanel

資訊界面代碼InfoPanel,掛在InfoPanel.prefab上,

using UnityEngine;
using UnityEngine.UI;

public class InfoPanel : MonoBehaviour
{
    public InputField idInput;
    public InputField kindInput;
    public InputField nameInput;
    public InputField colorInput;
    public Dropdown genderDropdown;
    public InputField birthInput;
    public InputField reasonInput;

    public Button okBtn;
    public Button delBtn;
    public Button closeBtn;

    public CatInfo m_catInfo;

    public void Init(CatInfo info)
    {
        m_catInfo = info;
        idInput.text = info.id;
        kindInput.text = info.kind;
        nameInput.text = info.nickname;
        colorInput.text = info.color;
        genderDropdown.value = info.gender;
        birthInput.text = info.birth;
        reasonInput.text = info.reason;
    }

    private CatInfo MakeCatInfo()
    {
        if (null == m_catInfo)
            m_catInfo = new CatInfo();
        m_catInfo.id = idInput.text;
        m_catInfo.kind = kindInput.text;
        m_catInfo.nickname = nameInput.text;
        m_catInfo.color = colorInput.text;
        m_catInfo.gender = genderDropdown.value;
        m_catInfo.birth = birthInput.text;
        m_catInfo.reason = reasonInput.text;
        return m_catInfo;
    }

    void Start()
    {
        okBtn.onClick.AddListener(() =>
        {
            // 新增或修改
            CatManager.Instance.AddOrModify(MakeCatInfo());
            Destroy(gameObject);

        });
        delBtn.onClick.AddListener(() =>
        {
            // 洗掉
            if(null != m_catInfo)
            {
                CatManager.Instance.Del(m_catInfo.uuid);
            }
            
            Destroy(gameObject);
        });

        closeBtn.onClick.AddListener(() => 
        {
            Destroy(gameObject);
        });
    }
}

系結ui物件,
在這里插入圖片描述
完成,
如果有任何疑問歡迎留言或私信,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229955.html

標籤:其他

上一篇:關于go并發的實體及理解

下一篇:洛谷P1073最優貿易--(tarjan縮點+DAG+dp+拓撲排序)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more