Как я могу изменить Sprite Renderer только для игры, на которую я нажимаю? - PullRequest
0 голосов
/ 27 марта 2020

Совершенно новый для Unity, работающий над базовым c прототипом игровой концепции. Я пытаюсь добавить сетку кругов 3х3, которая переключает цвет при касании на мобильном устройстве. Используя окна Raycasting и Collision, я смог успешно обнаружить ввод и переключить цвет, но когда я это сделал, он переключает цвет для каждого круга, а не только один, который я нажимаю.

Использование Debug.Log(hit.collider.name) Я вижу, что программа знает, какой круг я нажал, поэтому я думаю, что настроил Raycasting правильно.

Может кто-нибудь помочь с этим?

Вот сценарий:

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

    public class colorChange : MonoBehaviour
    {
        SpriteRenderer sprite;
        bool isPressed;

        // Start is called before the first frame update
        void Start()
        {
            sprite = GetComponent<SpriteRenderer>();
            isPressed = false;
        }

        // Update is called once per frame
        void Update()
        {
            if (Input.touchCount > 0)
            {
                Touch touch = Input.GetTouch(0);

                if (touch.phase == TouchPhase.Began)
                {

                    Vector2 worldPoint = Camera.main.ScreenToWorldPoint(touch.position);
                    RaycastHit2D hit = Physics2D.Raycast(worldPoint, Vector2.zero);

                    if (hit.collider != null)
                    {   

                        if (isPressed == false)
                        {
                            Debug.Log(hit.collider.name);
                            sprite.color = new Color(0, 1, 0, 1);
                            isPressed = true;
                        }
                        else
                        {
                            Debug.Log(hit.collider.name);
                            sprite.color = new Color(1, 1, 1, 1);
                            isPressed = false;
                        }
                    }
                } 
            }
        }
    }

1 Ответ

0 голосов
/ 27 марта 2020

Как насчет вместо:

sprite.color = new Color(1,1,1,1);

Делать:

hit.collider.gameObject.GetComponent<SpriteRenderer>().color = new Color(1,1,1,1)

Поскольку вы точно знаете, что объект попадания прав.

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