HoloLens - Unity: как изменить цвет курсора? - PullRequest
4 голосов
/ 06 июня 2019

Я пытался изменить цвет с помощью скрипта во время выполнения курсора, и он работал до 75%:

enter image description here

Mesh_top является единственнымчасть, которая не меняет цвет, и я не знаю, почему.Все 4 детали используют один и тот же материал с именем "cursormaterial".Что я пробовал:

  1. Изменение цвета путем ссылки на cursormaterial
  2. Изменение цвета путем получения компонента SkinnedMeshRenderer
  3. Попытка использовать ProptertyBlock


Во всех трех случаях я получил одинаковый результат.Единственное, что работает, это перед изменением игры, я могу изменить цвет, это изменит цвет всего курсора.Изменение его во время выполнения работает только для 3 из 4 частей ... ´

- Правка -

    public SkinnedMeshRenderer cursorRendererOne, cursorRendererTwo, cursorRendererThree, cursorRendererFour;
private MaterialPropertyBlock _propBlock;
public Material material;

void Start()
{
    _propBlock = new MaterialPropertyBlock();
}

public void OnInputDown(InputEventData eventData)
{
    if (!isActivated)
    {
        //#1
        material.color = Color.blue;
        //#2
        cursorRendererOne.sharedMaterial.color = Color.blue;
        //#3
        cursorRendererOne.GetPropertyBlock(_propBlock);
        _propBlock.SetColor("_Color", Color.blue);
        cursorRendererOne.SetPropertyBlock(_propBlock);
        cursorRendererTwo.SetPropertyBlock(_propBlock);
        cursorRendererThree.SetPropertyBlock(_propBlock);
        cursorRendererFour.SetPropertyBlock(_propBlock);
        isActivated = true;
    }


Здесь вы видите измененный материал, но mesh_topвыглядит, но отличается: enter image description here
enter image description here

1 Ответ

3 голосов
/ 06 июня 2019

Это «ошибка» (может быть, предполагаемая?).

Открыть окно Animation ( CTRL + 6 )

И в иерархии выберите CursorVisual

Если вы сейчас переходите к анимации под названием CursorWaitingAnim, вы можете увидеть, что есть ключевой кадр для цвета top_mesh.

enter image description here

Этот единственный ключевой кадр приводит к тому, что цвет этой плитки не может быть изменен во время выполнения.Причина в том, что аниматор запускается после OnInputDown, поэтому он отменяет изменения для любого свойства ключевого кадра.

Поэтому, если вам не нужна анимация Ожидания, просто удалите этот ключевой кадр.

enter image description here

=> Вы можете снова управлять цветом во время выполнения!


В качестве альтернативы вы можете заменить его на тот, который вместоисправление цвета просто отключает SkinnedMeshRenderer вместо этого, который в основном имеет более или менее тот же эффект, но не привинчивает цвета:

enter image description here

...