Обнаружение прикосновения к указанному c объекту в Unity - PullRequest
0 голосов
/ 26 февраля 2020

работает над игрой android в Unity 2D. Короче говоря, у меня есть два отдельных объекта в сцене, к которым прикреплен этот скрипт:

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

public class SwipeScript : MonoBehaviour
{
    Vector2 startPos, endPos, direction;
    float touchTimeStart, touchTimeFinish, timeInterval;
    public static int brojbacanja=0;
    public static bool bacenaprva = false;

    [Range (0.05f, 1f)]
    public float throwForce = 0.3f;

    void Update(){
        if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began && brojbacanja == 0) {

                    touchTimeStart = Time.time;
                    startPos = Input.GetTouch (0).position;

        }
            if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Ended && brojbacanja == 0) {
                touchTimeFinish = Time.time;
                timeInterval = touchTimeFinish - touchTimeStart;
                endPos = Input.GetTouch (0).position;
                direction = startPos - endPos;
                GetComponent<Rigidbody2D> ().AddForce (-direction / timeInterval * throwForce);
                brojbacanja = 1;
                bacenaprva = true;
            }
    }
}

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

Если кто-то может помочь, был бы признателен.

1 Ответ

1 голос
/ 28 февраля 2020

Так как этот сценарий будет на каждом объекте в сцене, вам понадобится дополнительная переменная и проверка, чтобы увидеть, пересекает ли ваше первоначальное касание ваш объект.

Если вы используете 3D-объекты (которые Я предполагаю, потому что вы упомянули трассировку лучей), тогда вам нужно что-то, что преобразует позицию касания на экране в луч, который вы затем применяете, чтобы увидеть, пересекает ли он ваш объект. Ваш объект должен столкнуться, чтобы это работало.

public class SwipeScript : MonoBehaviour
{
    // added these two values, set the coll value to your collider on this object.
    bool isTouching;
    public Collider coll;

    Vector2 startPos, endPos, direction;
    float touchTimeStart, touchTimeFinish, timeInterval;
    public static int brojbacanja=0;
    public static bool bacenaprva = false;

    [Range (0.05f, 1f)]
    public float throwForce = 0.3f;

    void Update(){
        if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began && brojbacanja == 0) {
                if(IsTouchOverThisObject(Input.GetTouch(0))) {
                    isTouching = true;
                    touchTimeStart = Time.time;
                    startPos = Input.GetTouch (0).position;
                }

        }
            if (isTouching && Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Ended && brojbacanja == 0) {
                isTouching = false;
                touchTimeFinish = Time.time;
                timeInterval = touchTimeFinish - touchTimeStart;
                endPos = Input.GetTouch (0).position;
                direction = startPos - endPos;
                GetComponent<Rigidbody2D> ().AddForce (-direction / timeInterval * throwForce);
                brojbacanja = 1;
                bacenaprva = true;
            }
    }

    bool IsTouchOverThisObject(Touch touch) {
         Ray ray = Camera.main.ScreenPointToRay(new Vector3(touch.position.x, touch.position.y, 0));
         RaycastHit hit;

         // you may need to adjust the max distance paramter here based on your
         // scene size/scale.
         return coll.Raycast(ray, out hit, 1000.0f); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...