C#中public變量不能被unity面板識別的解決方案

究其根本,原因在於,能在unity面板上識別的變量,public不是唯一的條件,另外一個條件是可序列化

比如你聲明瞭如下一個類

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Wave
{
    public GameObject prefab;
    public int count;
    public float rate;
}

在另外一個類中進行聲明時如下:

public Wave[] waves;

這樣在unity面板中自然看不到,因為你自己隨意聲明的類沒有繼承自序列化類,

隻需要聲明繼承即可,如下所示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Wave
{
    public GameObject prefab;
    public int count;
    public float rate;
}

補充:C#類修飾符public和internal

當在命名空間建瞭一個類時,默認修飾符號是internal。

作用:

在當前命名空間內可以實現對類的調用。

當類的修飾符是public時,表明該類不僅在當前命名空間可以被調用,在其它命名空間也可以被調用。如:

using system;
using ...;
namespace s1
{
 internal class A
 {
  ....
 }
        class B
        {
           A a=new A();//ok
        }
}

但是 下述代碼則會提示錯誤:

using system;
using ...; 
namespace s1
{
 internal class A
 {
  ....
 }
        
}
  
using system;
using ...;
using s1;
namespace s2
{
    class B
    {
       A a=new A();//error,as A is an internal which can only be called in its packet
     }
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀:

    None Found