Как я могу назначить материал игровому объекту при его выборе и изменить его обратно на исходный материал при отмене выбора игрового объекта с помощью C #? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть несколько игровых объектов на сцене с разными материалами.Когда я выбираю игровой объект, его материал должен измениться на selectMat.Мой код работает в редакторе, и на моем samsung s8 он также работает, но после нескольких раз выбора различных игровых объектов материал selectedMat остается на игровом объекте и не меняется обратно на оригинальный.

Я действительноможет помочь с этим.

{
public GameObject SelectedObject;
public Material SelectMat;
public string Path = "StringPath";
private Material originalMat;

// Start is called before the first frame update
void Start()
{
    originalMat = Resources.Load<Material>(Path);

}

public void Update()
{

    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
            GameObject hitObject = hit.transform.gameObject;
            hitObject.GetComponent<Renderer>().material = originalMat;
            SelectObject(hitObject);
            hitObject.GetComponent<Renderer>().material = SelectMat;

        }
        else
        {
            ClearSelection();
        }
    }
}
void SelectObject(GameObject obj)
{
    if (SelectedObject != null)
    {
        if (obj == SelectedObject)
        {
            return;
        }
        SelectedObject = obj;
    }
}

void ClearSelection()
{
    if (SelectedObject == null)
    {
        return;
    }
    else
    {
        SelectedObject.GetComponent<Renderer>().sharedMaterial = originalMat;
        SelectedObject = null;
    }
}

1 Ответ

0 голосов
/ 20 февраля 2019

После изменения material Renderer использует локальный экземпляр этого материала.Изменение sharedMaterial после этого afaik не дает никакого эффекта.

Используйте

SelectedObject.GetComponent<Renderer>().material = originalMat;

вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...