Как позволить пользователю взаимодействовать с объектом при нажатии кнопки редактирования в Unity C #? - PullRequest
0 голосов
/ 19 октября 2019

Мне нужна некоторая помощь, чтобы реализовать способ взаимодействия пользователя с моделью, например, когда нажата кнопка редактирования. Я хочу, чтобы пользователь выделил часть объекта, которая может выделяться желтым цветом на единице с помощью c #,Есть ли способ или какая-то логика? Дайте мне знать, если вы не понимаете, что я хочу реализовать. Спасибо за вашу помощь.

Вот код:

    public class BlowupController : MonoBehaviour {



    public void Editcomponents()
    {
        // let user interact when edit button (script) is called. 
          ClearText();
        RemoveStatus = !RemoveStatus;
        var imgs = reticle.GetComponentsInChildren<Image>(true);
        if (RemoveStatus)
        {
            foreach (var img in imgs)
            {
                img.GetComponent<Image>().color = new Color32(255, 0, 0, 255);
            }
        }
        else
        {
            foreach (var img in imgs)
            {
                img.GetComponent<Image>().color = new Color32(255, 255, 255, 255);
            }
        }



    }




    public void ResetComponents(GameObject Remove)
    {
        Debug.Log("HI"); ;
        Debug.Log(value);
        ClearText();
        foreach (Animator ani in AnimotorList)
        {
            ani.gameObject.SetActive(true);
            ani.SetBool("Start", value);
        }
        if (RemoveStatus)
        {
            var imgs = reticle.GetComponentsInChildren<Image>(true);
            foreach (var img in imgs)
            {
                img.GetComponent<Image>().color = new Color32(255, 255, 255, 255);
            }
            var on = Remove.transform.Find("Remove_On");
            on.gameObject.SetActive(true);
            var off = Remove.transform.Find("Remove_Off");
            off.gameObject.SetActive(false);
            RemoveStatus = !RemoveStatus;
        }        
        ResetPanel.SetActive(false);
    }
    public void UndoRemovingComponent(GameObject Remove)
    {
        if (UndoList.Count > 0)
        {
            ClearText();
            var ob = UndoList[UndoList.Count - 1];
            ob.SetActive(true);
            UndoList.Remove(ob);
            if (UndoList.Count == 0)
            {
                var imgs = reticle.GetComponentsInChildren<Image>(true);
                foreach (var img in imgs)
                {
                    img.GetComponent<Image>().color = new Color32(255, 255, 255, 255);
                }
                var on = Remove.transform.Find("Remove_On");
                on.gameObject.SetActive(true);
                var off = Remove.transform.Find("Remove_Off");
                off.gameObject.SetActive(false);
                ResetPanel.SetActive(false);
                UndoPanel.SetActive(false);
                RemoveStatus = !RemoveStatus;
            }            

        }
    }



     private IEnumerator Start()
    {
        yield return new WaitForSeconds(initialTimeDelay);
        if (reticle == null)
        {
            reticle = FindObjectOfType<Reticle>().gameObject;
        }
        TransformSync();        


    }


    }



} 

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Прежде всего, поскольку ваш объект разделен на отдельные части, создайте сценарий с именем «CheckIfSelected» или что-то подобное, а затем в методе обновления используйте raycast, чтобы проверить, щелкает ли объект. После того, как на объект нажали, получите материал об объекте, затем измените цвет следующим образом: (Извините за форматирование и любые возможные опечатки, я не использую ide)

function Update () {
         if (Input.GetMouseButtonDown(0)) {
             var hit: RaycastHit;
             var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

             if (Physics.Raycast(ray, hit)) {
                 if (hit.transform.gameObject == gameObject ){
                      gameObject.renderer.material.color = new Color(1,1,1);
                 }
             }
         }
0 голосов
/ 19 октября 2019

Я не до конца понимаю ваш вопрос, но если вы пытаетесь узнать, нажимает ли пользователь клавишу, вы можете использовать Input.GetKeyDown (). Пример

if (Input.GetKeyDown("space"))
        {
            print("space key was pressed");
        }

ИЛИ

void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            print("space key was pressed");
        }
    }

Здесь вы заменяете пробел ключом, который хотите проверить. Полную документацию можно найти на Unity docs https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html

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