快速連結

2018年5月17日

Inspecter 基本架構紀錄


[CustomEditor(typeof(Tool))]
public class ToolInspecter : Editor
{
  protected Tool m_Tool;
  /// 
  /// Component每一次顯示在Inspector上就會重新呼叫一次
  /// 
  private void OnEnable()
  {
     //DO init
     m_Tool = target as Tool;
  }

  /// 
  /// Component從Inspector上移除的瞬間執行
  /// 
  private void OnDestroy()
  {
     //Do origin
  }

  /// 
  /// 該Component每一次有改變就會呼叫一次
  /// 
  public override void OnInspectorGUI()
  {
     //Do Draw GUI
     DrawDefaultInspector();
  }

2018年4月11日

Adapter Pattern:組合兩個不相干的執行需要一個轉接器

概念

當螢幕只有D-SUB,但卻要接主機只有DVI插孔的顯示卡時候,需要轉接器來轉換傳送訊號,這種改變既有內容去轉換需要結果時,就需要它。
很多人會想,那只要共同有一個Interface去繼承就好啦!
但是像是D-SUB這種已經定型的產品架構,你無法再重新改變它的定義與執行內容,你只能取出它並且改為新產品需要的資訊才能產生結果。
在這個之中,D-SUB被稱為Target,轉換對象;DVI被稱為Adaptee,適配者。

假如功能相差太多的兩種功能/產品,或是適配者有著轉換對象沒有的plugin,那就不適用這種設計模式。

2018年2月8日

動態設定Private Member時候遇到System.Reflection.MonoField錯誤

一般來說,要設定私人變數時,只要這麼寫通常可以順利進去:

var tProp = OverrideCtrl.GetType().GetField("name", BindingFlags.NonPublic | BindingFlags.Instance);
tProp.SetValue(tPorp, "new name value");

但若設定的是繼承MonoBehaviour的物件的話,請在setValue(Object, Value)中,把Object直接指向物件。

public GameObject TargetObject = null;
private void ReplaceObj(){
  var tProp = OverrideCtrl.GetType().GetField("monoObject", BindingFlags.NonPublic | BindingFlags.Instance);
  tProp.SetValue(OverrideCtrl, TargetObject);
}