拖拽指定序列化的私有变量(用代码实现)

Posted rollingyouandme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拖拽指定序列化的私有变量(用代码实现)相关的知识,希望对你有一定的参考价值。

1.先看这样一个脚本,我们要用代码来实现类似拖拽的方式指定引用,尤其是特别注意私有变量 mRootCanvas是怎样指定的。

 

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

public class UIRoot : MonoBehaviour
{
    public Transform Bg;

    public Transform Common;

    public Transform PopUp;

    public Transform Forward;

    [SerializeField]
    private Canvas mRootCanvas;
}

 

技术图片

 

 

2.代码片段(主要部分):

       var uiRootScript = uiRootObj.AddComponent<UIRoot>();

     //指定 public 的引用 (其中bg common popUp forward 都是些变量名,它们都是GameObject游戏物体)
uiRootScript.Bg
= bg.transform; uiRootScript.Common = common.transform; uiRootScript.PopUp = popUp.transform; uiRootScript.Forward = forward.transform; //指定序列化后的私有变量的引用:其中canvas是变量名,类型是GameObject。
先把整个脚本序列化,然后拿到里面的私有变量mRootCanvas,然后为其指定引用(objectReferenceValue),最后保存修改。
var uiRootSerializedObj = new SerializedObject(uiRootScript); //把目标脚本序列化 uiRootSerializedObj.FindProperty("mRootCanvas").objectReferenceValue = canvas.GetComponent<Canvas>(); //指定引用 uiRootSerializedObj.ApplyModifiedPropertiesWithoutUndo(); //保存修改

 

用到的 API 有:

SerializedObject()
FindProperty()
objectReferenceValue    //是个属性,用来指定引用
ApplyModifiedPropertiesWithoutUndo()

00

以上是关于拖拽指定序列化的私有变量(用代码实现)的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 2D平面游戏实现鼠标拖拽物体移动

用面向对象写一个拖拽,并实现继承

如何管理在每个 git 版本中添加私有代码片段?

Spark闭包与序列化

编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量

转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议11~15)