Менять материал сборника Hololens SpatialMapping из Holotoolkit через сценарий? - PullRequest
0 голосов
/ 01 мая 2019

Я создаю проект для 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);

}

Однако, это не позволит мне получить доступ к этим переменным / функциям-членам частичного класса.Я также не думаю, что это потому, что это одиночка или я не могу получить доступ к членам неполного класса, как это?Как еще я могу это сделать?

...