• 注册
  • 攻略教程 攻略教程 关注:711 内容:221

    DLL教程:给物品自定义一个类

  • 查看作者
  • 打赏作者
  • 当前位置: 七日杀中文网 > 攻略教程 > 正文
  • 攻略教程
  • 大版主
    LV.4
    爱我走心

    廢話不多說 直接上教程

    1.用VS創建Net Framework類庫

    DLL教程:给物品自定义一个类

    在vs起始界面 找到上方功能面闆中的文件選項卡 然後點擊進行新建一個項目

    **************************************

    DLL教程:给物品自定义一个类

    選擇類庫(.net framework)項目 底圖藍色常亮表示選中 接下來點擊 确定 這樣一個項目就新建完成了

    2.爲類庫引入必要的命名空間

    DLL教程:给物品自定义一个类            

    在項目右側資源管理器中 找到 “引用” 右鍵它 選擇添加引用

    **************************************

    DLL教程:给物品自定义一个类

    由于我這裏已經添加過 所以這次就不需要手動添加了 但是你們可能第一次做這個項目 所以需要到七日殺文件裏面找到紅框提到的這些dll 并把他們逐一添加進去

    **************************************

    DLL教程:给物品自定义一个类            

    上述操作無誤 那麽你就會看到這個庫多了很多所必需的dll文件 一方面方便我們對七日殺内核代碼進行調用、重寫

    **************************************

    3. 關于override關鍵字

    override的意思就是對函數進行重寫。表示子類對父類以定義的方法進行改寫,當做自己的方法。

    使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現。由重寫聲明重寫的方法稱爲重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。

    不能重寫非虛方法或靜态方法。重寫基方法必須是虛拟的、抽象的或重寫的。也就是說,用 override 修飾符重寫的基類中的方法必須是 virtual, abstract 或 override 方法。

    **************************************

    4. 重寫父類方法

    我們今天要實現一個簡單的自定義類 就是 當玩家拿着該物品時 按下某個鍵 就會打開七日殺中文網這樣一個功能 而且 血月期間不能使用


    要讓系統檢測玩家是否手持某個物品并檢測其狀态,我們這裏要用到 OnHoldingUpdate()這個無返回值方法 用 override 進行标記 表示要重寫某個方法

    但是 我們創建的這個項目中沒有對 OnHoldingUpdate()的相關定義 而且 這個類也沒有繼承任何父類 所以 所以你就無法找到合适的方法進行重寫,那麽..

    怎麽做呢?其實很簡單 在類名後寫上一個 “:” 後面就是你想用繼承的類了 注意是英文半角 這裏不賣關子了 OnHoldingUpdate()存在于ItemClass類中 事後你可以自己去看底層源碼 

    就像這樣:
    public class Class1:ItemClass
        {
            public override void OnHoldingUpdate(ItemInventoryData _data)
            {
                
            }
        }


    好了 現在Class1這個類就成了ItemClass的派生類(也稱子類) 我們可以對父類中很多函數或者事件進行重寫


    5.開始編寫代碼


    通過上一章的學習 我們已經對父類中的方法進行了重寫 而且系統也可以捕獲到該物品的狀态了  

    那麽接下來我們用一個if語句來判斷玩家輸入

    public class Class1:ItemClass
        {
            public override void OnHoldingUpdate(ItemInventoryData _data)
            {
                if (UnityEngine.Input.GetKey(KeyCode.K))  //調用Input類下的GetKey方法 并賦予參數[注意GetKey所需參數是一個鍵值]
                {
                
                }
            }
        }

    那麽 怎麽實現在血月狀态下不能使用呢?

    我們可以調用SkyManager下的BloodMoon方法 這個方法是一個bool類型 意味判斷當前是否是血月

    代碼如下

     public class Class1:ItemClass
        {
            public override void OnHoldingUpdate(ItemInventoryData _data)
            {
                if (UnityEngine.Input.GetKey(KeyCode.K) && !SkyManager.BloodMoon())
                {
                
                }
            }
        }

    &&的意思是邏輯與 也就是說 隻有 &&兩邊的表達式都爲true時 if裏面的大條件才算爲true 隻要有一個爲false 那麽整體就爲false 所以if裏面的代碼也就不會執行 

    !的意思邏輯非 就是指本來值的反值。例如:” !0″ 這個邏輯表達式的值爲1.(判斷的這個數爲0,成立,則其表達式的值爲1)



    對于這個代碼而言 隻有當你按下K鍵 并且不是血月 才會執行if大括号裏面的代碼 接下來我們可以把有實際意義的代碼丢入if大括号中

    這裏又用到了 Start()方法 它存在于Process類之中 由于是靜态 我們可以直接用類名.方法名()  進行調用

    代碼如下

    public class Class1:ItemClass
        {
            public override void OnHoldingUpdate(ItemInventoryData _data)
            {
                if (UnityEngine.Input.GetKey(KeyCode.K) && SkyManager.BloodMoon())
                {
                    Process.Start("", "");        //表示用進程打開一個網頁
                }
            }
        }

    這裏我直接告訴大家 strat()方法第一個所需參數是一個進程 第二個參數是你想打開的網頁 但這隻是其中一個重載 想要深入研究還是去看底層源碼

    比如我要用ie浏覽器打開中文網 就這麽寫

    Process.Start("iexplore.exe", "https://www.7risha.com");//意味用IE浏覽器打開七日殺中文網

    這樣 打開網頁的功能就實現了

    代碼編寫完成之後 應該是這樣子的

    DLL教程:给物品自定义一个类

    6.打包

    接下來 到了最關鍵的一步 那就是把我們所寫的代碼編譯成.dll類庫

    怎麽做呢?

    DLL教程:给物品自定义一个类

    在右側資源管理器面闆上找到程序集 右鍵它 選擇生成  靜等一會過後 生成成功便會提示 你可以在資源管理器中打開該項目所在文件夾

    DLL教程:给物品自定义一个类

    如圖所示 這邊是項目所在文件夾了 

    DLL教程:给物品自定义一个类DLL教程:给物品自定义一个类

    按照路徑 依次打開bin-Debug

    DLL教程:给物品自定义一个类

    這邊是dll類庫文件生成的根目錄了 其他的都不需要 把剛才那個TestClass.dll複制出來 這才是需要的

    7.與自定義程序集進行合并


    我們用Dnspy新建一個程序集 

    然後依次展開它的子項

    DLL教程:给物品自定义一个类如圖所示



    DLL教程:给物品自定义一个类

    在這裏選擇與程序集合并 然後 選擇我們剛才那個dll類庫



    DLL教程:给物品自定义一个类

    需要注意的是 合并完成之後 記得要将改類庫移動到同一命名空間之下 步驟就是 右鍵命名空間 選擇箭頭所指的選項

    最後 不要忘記保存 這樣 自定義類就添加完成了


    關于怎麽調用 其實很簡單 你可以随便複制一個物品 

    将它的class改成你新添加的這個類名字 就可以了[格式:類名,程序集名稱]

    "点赞是美意,打赏是鼓励"

    因恶意刷帖用户过多,本版块已取消回帖金币奖励,请签到获取!>>>金币获取指南<<<

    请登录之后再进行评论

    登录
    • 大版主
    • 小版主
  • yichen
  • 柒月白风清
    柒月白风清
    一只小萌新,万年摸鱼党!已经脱坑了。。。
  • Cure_805
    Cure_805
    晚上在睡觉,白天在工作,不一定能及时回复,有事可以留言!
  • 至善丶丶
    至善丶丶
    群:1050040662 定制/开服/地图制作/价格公道
  • 东方清华EX
    东方清华EX
    一个爱玩七日杀的妹纸
  • 暂没有数据

    赞助广告位

  • 点击展示图片即可一键加入QQ群
    赞助广告:100R/月 目前空缺广告位:0

    分享网站

  • 繁体中文
  • 任务
  • 动态
  • 到底部
  • 帖子间隔 侧栏位置: