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

Я пытаюсь создать настольную игру Hex.Первый игрок внизу - желтый, а второй игрок - синий.Когда Игрок Один нажимает на гекс, он должен стать желтым, а когда Игрок 2 нажимает на гекс, он должен стать синим.

Я создал эту карту Hex, используя префаб, и теперь я хочу иметь возможность изменять цвет каждой плитки, когда я нажимаю на нее (желтые гексы, которые вы видите, будут прозрачными, но импортированный мной спрайтжелтый, поэтому цвет в средстве отображения спрайтов белый, хотя гексы выглядят желтыми.

Кстати, на данный момент изменение цвета в средстве отображения спрайтов изменяет цвет всех гексов.

Я следовал учебнику quill18creates, чтобы создать карту Hex, за исключением того, что я сделал ее в 2D вместо 3D.

https://www.youtube.com/watch?v=j-rCuN7uMR8

enter image description here

На момент написания, мой скрипт изменения цвета вообще не работает.Я пытался получить его, поэтому, когда он получает один щелчок, он меняется на желтый.Затем следующий клик на синий, рядом с желтым и так далее.Так как каждый игрок получает только один клик.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ColorChange : MonoBehaviour {

    public Color[]colors; // allows input of material colors in a set sized array
    public SpriteRenderer rend;  // what are we rendering? the hex

    private int index = 1; //initialize at 1, otherwise you have to press the ball twice to change color


    // Use this for initialization
    void Start () {
        rend = GetComponent<SpriteRenderer> (); // gives functionality for the renderer
    }

    // Update is called once per frame
    void onMouseDown () {
        // if there are no colors present nothing happens
        if (colors.Length == 0){
            return;
        }

       if (Input.GetMouseButtonDown(0)){
           index += 1; // when mouse is pressed down we increment up to the next index location

           // when it reaches the end of the colors it stars over
           if (index == colors.Length +1){
               index = 1;
           }

        print (index); // used for debugging
        rend.color = colors [index - 1]; // this sets the material color values inside the index
       }
   } //onMouseDown
}

Как мне реализовать это?Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Перво-наперво, вам нужно правильно прописать OnMouseDown(), чтобы он был вызван.

После этого, поскольку вы используете SpriteRenderer, вам понадобитсядобавить коллайдер для обнаружения событий щелчка мыши.Как упомянуто в документации OnMouseDown():

Это событие отправляется всем сценариям коллайдера или GUIElement.

Поскольку у вас нет ни одного, на вашем префабе нажмите Добавьте компонент> Polygon Collider 2D , и он автоматически создаст правильную геометрию для вашего спрайта (при условии, что все за пределами гексагона прозрачно).

Наконец, снимите проверку с Input.GetMouseButtonDown(0),OnMouseDown уже фиксирует тот факт, что была нажата мышь, и конкретный экземпляр, запущенный OnMouseDown(), был экземпляром, который был нажат.

0 голосов
/ 19 марта 2019

добавить коллайдер и твердое тело в ваш сборный затем заглавная O в OnMouseDown и удалить "if (Input.GetMouseButtonDown (0)) {" Input.GetMouseButtonDown (0) возвращает true, когда игрок щелкает в любом месте, а это не то, что вам нужно

public Color[] colors; // allows input of material colors in a set sized array
    public SpriteRenderer rend;  // what are we rendering? the hex

    private int index = 1; //initialize at 1, otherwise you have to press the ball twice to change color


    // Use this for initialization
    void Start()
    {
        rend = GetComponent<SpriteRenderer>(); // gives functionality for the renderer
    }

    // Update is called once per frame
    void OnMouseDown()
    {
        // if there are no colors present nothing happens
        if (colors.Length == 0)
        {
            return;
        }


            index += 1; // when mouse is pressed down we increment up to the next index location

            // when it reaches the end of the colors it stars over
            if (index == colors.Length + 1)
            {
                index = 1;
            }

            print(index); // used for debugging
            rend.color = colors[index - 1]; // this sets the material color values inside the index

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