Unity выбирает только один из всех отмеченных игровых объектов - PullRequest
1 голос
/ 30 апреля 2020

У меня есть 100 кубов с тегом имени (карты), и я хочу, чтобы только куб, который я нажимаю, мог вращаться. Мой код работает, но вращает все кубы с тегом (картой). Вот мой код, мне просто нужно повернуть из целого семейства (карточных) тегов только объект, который я нажал

все остальное работает нормально

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

public class SceneOneScript : MonoBehaviour
{


private bool canIRotate;
void Update()
{
    foreach (Touch touch in Input.touches)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
            if (touch.phase == TouchPhase.Began)
            {

                if (hit.collider.tag == "card")
                {
                    canIRotate = true;

                }
            }
            if (touch.phase == TouchPhase.Ended)
            {
                canIRotate = false;
            }

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


                if (canIRotate == true)
                {
                       transform.LookAt(new Vector3(hit.point.x, hit.point.y,         transform.position.z));
                }


            }
        }






    }

}
}

1 Ответ

1 голос
/ 30 апреля 2020

Использование RayCast - хорошее решение:

if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)    
{
     Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
     RaycastHit hit;
     Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow, 100f);
     if(Physics.Raycast(ray, out hit))
     {
         Debug.Log(hit.transform.name);
         if (hit.collider != null) {

             GameObject touchedObject = hit.transform.gameObject;

             Debug.Log("Touched " + touchedObject.transform.name);
         }
     }
}
...