我有一個顏色型別的欄位,我們稱之為 objectColor。我希望 objectColor “指向”具有顏色欄位的游戲物件。例如,相機的背景顏色。或者精靈渲染器的顏色。例如,當我嘗試“objectColor = mainCamera.backgroundColor”時,它會復制當時的主相機背景色,并且沒有鏈接。我習慣了指標和 C 。如果我在 C 中,我只會創建一個 Color 型別的指標,使其指向 mainCamera.backgroundColor 所指向的內容,然后以這種方式更改顏色。有什么建議?
uj5u.com熱心網友回復:
在 C# 中沒有簡單的方法可以做到這一點。您可以持有對擁有Color欄位的類的參考,但這將阻止您更改不同物件型別的顏色(不確定它實際上是否不好)。或者,您可以圍繞具有顏色更改功能的所有物件制作類包裝器,并通過通用介面使用它們。
interface IColorChange {
void SetColor(Color color);
}
class CameraWrapper : IColorChange {
public void SetColor(Color color){
m_camera.backgroundColor = color;
}
}
其實仔細想想,在c 中存盤成員指標也不是什么好主意。類實體隨時可能消亡,您將留下一個懸空的指標,而您無法了解它。
uj5u.com熱心網友回復:
一種有點不尋常的方式(但如果記錄得好,不一定是壞的)是使用“屬性”。這些是在訪問時自動呼叫其自定義 setter 和 getter 方法的變數。但是,您也無法避免單獨保留對相機實體的參考。
這是一個獨立于統一的例子:https : //dotnetfiddle.net/oxBqXV
using System;
public class Camera
{
public int color = 20;
}
public class Foo // most likely should inherit from MonoBehavior
{
Camera _camera;
public int cam_color_ptr // property
{
get
{
return _camera.color;
} // get method
set
{
_camera.color = value;
} // set method
}
public void Start()
{
// of course you should acutally get the reference here
// or have _camera a serializable field to assign in the editor.
_camera = new Camera();
}
public void Print()
{
Console.WriteLine("The camera color is: " cam_color_ptr);
}
}
public class Program
{
public static void Main()
{
Foo foo = new Foo();
foo.Start();
foo.Print();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384322.html
