Я создаю проект для Microsoft Hololens через Unity3D, версия 2017.4.16f1.У меня есть HoloToolkit, добавленный в мой проект, и я использую его префаб SpatialMapping по умолчанию.Я также использую HololensShaderPack, найденный в хранилище ресурсов, и использую один из предоставленных шейдеров в префабе SpatialMapping.
Мое приложение включает в себя нажатие на объект / поверхность, чтобы взять из него цвет и изменить цветцвет материала пространственной сетки - это цвет, который вы «украли» с этой поверхности.Нажатие работает отлично, а также захват цвета.Все, что мне нужно сделать, - это получить доступ к материалу, найденному в скрипте SpatialMappingManager.
Моя проблема в том, что я не уверен, как получить доступ к члену частичного класса, особенно если этот частичный класс является одиночным.Я не слишком знаком с этим аспектом C # и пытался найти решение в Интернете.
Сценарий SpatialMappingManager определен следующим образом, опущенные нерелевантные части:
namespace HoloToolkit.Unity.SpatialMapping
{
[RequireComponent(typeof(SpatialMappingObserver))]
public partial class SpatialMappingManager : Singleton<SpatialMappingManager>
{
[Tooltip("The material to use for rendering spatial mapping data.")]
[SerializeField]
private Material surfaceMaterial;
public Material SurfaceMaterial
{
get
{
return surfaceMaterial;
}
set
{
if (value != surfaceMaterial)
{
surfaceMaterial = value;
SetSurfaceMaterial(surfaceMaterial);
}
}
}
public void SetSurfaceMaterial(Material setSurfaceMaterial)
{
SurfaceMaterial = setSurfaceMaterial;
if (DrawVisualMeshes)
{
foreach (MeshRenderer sourceRenderer in Source.GetMeshRenderers())
{
if (sourceRenderer != null)
{
sourceRenderer.sharedMaterial = setSurfaceMaterial;
}
}
}
}
}
}
В моем другомскрипт, я пытаюсь это:
public GameObject sm; //assigned in-editor
public SpatialMapping smm;
void Start()
{
smm = sm.GetComponent<SpatialMapping>();
}
void ChangeColor(Color newColor) //this is called in an omitted part of the script that assigns newColor
{
//what I WANT to do:
Material newMat = smm.getSurfaceMaterial();
newMat.color = newColor;
smm.SetSurfaceMaterial(newMat);
}
Однако, это не позволит мне получить доступ к этим переменным / функциям-членам частичного класса.Я также не думаю, что это потому, что это одиночка или я не могу получить доступ к членам неполного класса, как это?Как еще я могу это сделать?