<strong id="h7llx"><track id="h7llx"></track></strong>

<li id="h7llx"><object id="h7llx"></object></li>

<em id="h7llx"><acronym id="h7llx"><u id="h7llx"></u></acronym></em>
<rp id="h7llx"><acronym id="h7llx"><input id="h7llx"></input></acronym></rp>
<rp id="h7llx"></rp>
    <tbody id="h7llx"></tbody>

     找回密碼
     注冊帳號

    掃一掃,訪問微社區

    zhang273162308 Unity實用小工具或腳本—利用反射制作動態編輯欄(二)

    53
    回復
    4448
    查看
    打印 上一主題 下一主題
    [ 復制鏈接 ]
    排名
    139
    昨日變化

    125

    主題

    598

    帖子

    7097

    積分

    Rank: 9Rank: 9Rank: 9

    UID
    3579
    好友
    110
    蠻牛幣
    5937
    威望
    0
    注冊時間
    2013-9-10
    在線時間
    1637 小時
    最后登錄
    2020-7-6

    專欄作家活力之星游戲蠻牛QQ群會員蠻牛哥

    馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

    您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

    x
    一、前言
    上一章通過反射實現創建動態編輯欄,但是此時的編輯欄還并沒有和結構體數據關聯。本章將實現編輯欄中修改的數據將反饋到對應的結構體中,并最后通過序列化將結構體數據以文本的形式進行存儲
    二、實現
    1、FieldInfo.SetValue方法
    將給定對象的字段設置為給定值,查閱了C#的官方文檔,上面的案例是這樣的
    [C#] 純文本查看 復制代碼
    using System;
    using System.Reflection;
    using System.Globalization;
    
    public class Example
    {
        private string myString;
        public Example()
        {
            myString = "Old value";
        }
    
        public string StringProperty
        {
            get
            {
                return myString;
            }
        }
    }
    
    public class FieldInfo_SetValue
    {
        public static void Main()
        {
            Example myObject = new Example();
            Type myType = typeof(Example);
            FieldInfo myFieldInfo = myType.GetField("myString", 
                BindingFlags.NonPublic | BindingFlags.Instance); 
    
            // Display the string before applying SetValue to the field.
            Console.WriteLine( "\nThe field value of myString is \"{0}\".", 
            myFieldInfo.GetValue(myObject)); 
            // Display the SetValue signature used to set the value of a field.
            Console.WriteLine( "Applying SetValue(Object, Object)."); 
       
            // Change the field value using the SetValue method. 
            myFieldInfo.SetValue(myObject, "New value"); 
            // Display the string after applying SetValue to the field.
            Console.WriteLine( "The field value of mystring is \"{0}\".", 
                myFieldInfo.GetValue(myObject));
        }
    }
    
    /* This code example produces the following output:
    
    The field value of myString is "Old value".
    Applying SetValue(Object, Object).
    The field value of mystring is "New value".
    

    這段代碼在參數是類的對象的時候是毫無問題的,但是傳進來結構體變量的時候,就會出現沒有附上值的問題。這個主要是跟結構體是值類型,類是引用類型有關。
    Fieldinfo.SetValue(object,object),里面的參數都是引用類型的,而結構體是指類型,在調用該方法傳結構體變量的時候,會將結構體賦值一份新的,然后在方法里面對新的值進行了修改,而傳進去原來的結構體并沒有任何改變。所以,在調用SetValue之前,先將結構體進行裝箱操作變成Object類型的變量,然后,在進行拆箱操作,將Object變量轉換成結構體變量。代碼如下:
    游客,如果您要查看本帖隱藏內容請回復

    我將這個方法進行了簡單的泛型處理,這樣保證不管是什么結構體或類都可以作為參數傳遞進來,并進行轉換。方法最后,返回的是一個Object類型的變量,對這個變量進行拆箱操作就可以了:
    游客,如果您要查看本帖隱藏內容請回復

    在每一個編輯欄的輸入框組建中都添加了編輯結束響應事件,保證每次對單個編輯框編輯的時候,結構體的數據都會得到修改如圖所示:當對單個編輯框進行修改的時候,右側的Inspector面板上的結構體字段的值也會相應的改變,在輸入錯誤的時候,還加入了相應的處理,出現輸入的值和字段類型不匹配則回到上一個輸入框的值,并且結構體不發生改變。



    最后,將修改后的結構體變量的值存成文本文件:

    [C#] 純文本查看 復制代碼
     public static object SetValue_ReflectMethod<T>(T obj, string paramName, string paramValue)
    {
    //先裝箱 變成引用類型的
    object tempObj = obj;
    if (obj != null)
    {
    try
    {
    Type tempType = obj.GetType();
    //設置字段
    FieldInfo tempFI = tempType.GetField(paramName);
    tempFI.SetValue(tempObj, Convert.ChangeType(paramValue, tempFI.FieldType));
    //設置屬性
    //PropertyInfo tempPI = tempType.GetProperty(paramName);
    //tempPI.SetValue(tempObj, Convert.ChangeType(paramValue, tempPI.PropertyType), null);
    }
    catch (Exception e)
    {
    Debug.Log("編輯錯誤" + e.Message);
    tempObj = null;
    }
    }
    return tempObj;
    }


    三、總結
    1、初步具備了根據結構體字段來動態創建編輯框的功能

    2、可以在輸入框中對結構體的對應名稱字段進行修改,并且編輯框中還加入了錯誤輸入的處理
    3、將結構體數據保存成Json文件
    4、尚不具備對泛型的處理


    未完待續。。。。。


    工程案例地
    游客,如果您要查看本帖隱藏內容請回復









    本帖被以下淘專輯推薦:

    回復

    使用道具 舉報

    7日久生情
    2284/5000
    排名
    2351
    昨日變化

    8

    主題

    801

    帖子

    2284

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    40014
    好友
    16
    蠻牛幣
    3772
    威望
    0
    注冊時間
    2014-8-15
    在線時間
    701 小時
    最后登錄
    2020-7-18
    QQ
    沙發
    2019-1-23 20:25:49 只看該作者
    利用反射制作動態編輯欄
    回復 支持 反對

    使用道具 舉報

    7日久生情
    2472/5000
    排名
    1385
    昨日變化

    0

    主題

    745

    帖子

    2472

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    135463
    好友
    0
    蠻牛幣
    77
    威望
    0
    注冊時間
    2016-1-23
    在線時間
    835 小時
    最后登錄
    2020-7-19
    板凳
    2019-1-23 21:16:42 只看該作者
    6666666666666777777777
    回復 支持 反對

    使用道具 舉報

    7日久生情
    2472/5000
    排名
    1385
    昨日變化

    0

    主題

    745

    帖子

    2472

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    135463
    好友
    0
    蠻牛幣
    77
    威望
    0
    注冊時間
    2016-1-23
    在線時間
    835 小時
    最后登錄
    2020-7-19
    地板
    2019-1-23 21:19:50 只看該作者
    66666666666667777777777
    回復 支持 反對

    使用道具 舉報

    7日久生情
    3026/5000
    排名
    4092
    昨日變化

    0

    主題

    2153

    帖子

    3026

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    254705
    好友
    1
    蠻牛幣
    2617
    威望
    0
    注冊時間
    2017-11-16
    在線時間
    511 小時
    最后登錄
    2020-7-17
    5#
    2019-1-24 08:38:33 只看該作者
    66666666666667777777777
    回復 支持 反對

    使用道具 舉報

    6蠻牛粉絲
    1223/1500
    排名
    2064
    昨日變化

    0

    主題

    271

    帖子

    1223

    積分

    Rank: 6Rank: 6Rank: 6

    UID
    26073
    好友
    1
    蠻牛幣
    4871
    威望
    0
    注冊時間
    2014-5-21
    在線時間
    282 小時
    最后登錄
    2020-1-17
    6#
    2019-1-24 08:44:54 只看該作者
    牛牛牛!佩服!
    回復

    使用道具 舉報

    7日久生情
    2320/5000
    排名
    582
    昨日變化

    1

    主題

    145

    帖子

    2320

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    43081
    好友
    1
    蠻牛幣
    1071
    威望
    0
    注冊時間
    2014-9-1
    在線時間
    772 小時
    最后登錄
    2020-6-30
    7#
    2019-1-24 08:45:00 只看該作者
    Unity實用小工具或腳本—利用反射制作動態編輯欄(二)
    回復 支持 反對

    使用道具 舉報

    7日久生情
    4577/5000
    排名
    141
    昨日變化

    11

    主題

    664

    帖子

    4577

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    52346
    好友
    0
    蠻牛幣
    7306
    威望
    0
    注冊時間
    2014-10-31
    在線時間
    1462 小時
    最后登錄
    2020-7-19
    8#
    2019-1-24 08:47:56 只看該作者
    感謝分享  感謝分享
    回復 支持 反對

    使用道具 舉報

    4四處流浪
    431/500
    排名
    9870
    昨日變化

    0

    主題

    27

    帖子

    431

    積分

    Rank: 4

    UID
    308426
    好友
    0
    蠻牛幣
    2172
    威望
    0
    注冊時間
    2018-12-16
    在線時間
    292 小時
    最后登錄
    2020-7-20
    9#
    2019-1-24 09:12:23 只看該作者
    aaaaaaaaaaaaaaaaaa
    回復 支持 反對

    使用道具 舉報

    排名
    64947
    昨日變化

    0

    主題

    12

    帖子

    74

    積分

    Rank: 2Rank: 2

    UID
    309391
    好友
    0
    蠻牛幣
    67
    威望
    0
    注冊時間
    2018-12-24
    在線時間
    60 小時
    最后登錄
    2019-12-30
    10#
    2019-1-24 09:22:15 只看該作者
    6666666666666777777777
    回復 支持 反對

    使用道具 舉報

    5熟悉之中
    998/1000
    排名
    3263
    昨日變化

    1

    主題

    70

    帖子

    998

    積分

    Rank: 5Rank: 5

    UID
    149521
    好友
    2
    蠻牛幣
    556
    威望
    0
    注冊時間
    2016-5-23
    在線時間
    471 小時
    最后登錄
    2020-7-18
    11#
    2019-1-24 09:22:41 只看該作者
    參數都是引用類型的,而結構體是指類型,在調用該方法傳結構體變量
    回復 支持 反對

    使用道具 舉報

    5熟悉之中
    932/1000
    排名
    3359
    昨日變化

    9

    主題

    88

    帖子

    932

    積分

    Rank: 5Rank: 5

    UID
    202690
    好友
    5
    蠻牛幣
    1284
    威望
    0
    注冊時間
    2017-1-17
    在線時間
    369 小時
    最后登錄
    2020-5-12
    12#
    2019-1-24 09:37:59 只看該作者
    6666666666
    回復

    使用道具 舉報

    3偶爾光臨
    261/300
    排名
    14744
    昨日變化

    0

    主題

    46

    帖子

    261

    積分

    Rank: 3Rank: 3Rank: 3

    UID
    114875
    好友
    0
    蠻牛幣
    122
    威望
    0
    注冊時間
    2015-7-23
    在線時間
    160 小時
    最后登錄
    2019-1-28
    13#
    2019-1-24 10:53:43 只看該作者
    1111111111111111111111111111111111111
    回復 支持 反對

    使用道具 舉報

    7日久生情
    2365/5000
    排名
    567
    昨日變化

    2

    主題

    60

    帖子

    2365

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    182935
    好友
    0
    蠻牛幣
    6084
    威望
    0
    注冊時間
    2016-11-11
    在線時間
    883 小時
    最后登錄
    2020-7-20
    14#
    2019-1-24 14:25:17 只看該作者
    Unity實用小工具或腳本—利用反射制作動態編輯欄(二)
    回復 支持 反對

    使用道具 舉報

    7日久生情
    1608/5000
    排名
    5479
    昨日變化

    20

    主題

    234

    帖子

    1608

    積分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    236132
    好友
    2
    蠻牛幣
    3194
    威望
    0
    注冊時間
    2017-8-6
    在線時間
    1094 小時
    最后登錄
    2020-7-20
    15#
    2019-1-24 15:15:02 只看該作者
    反射機制
    回復

    使用道具 舉報

    您需要登錄后才可以回帖 登錄 | 注冊帳號

    本版積分規則

    神马电影34pp影视午夜|久久热视频任意撸|155女生能接受几厘米|97色色97成人
    <strong id="h7llx"><track id="h7llx"></track></strong>

    <li id="h7llx"><object id="h7llx"></object></li>

    <em id="h7llx"><acronym id="h7llx"><u id="h7llx"></u></acronym></em>
    <rp id="h7llx"><acronym id="h7llx"><input id="h7llx"></input></acronym></rp>
    <rp id="h7llx"></rp>
      <tbody id="h7llx"></tbody>