#unity3d #input
#unity3d #ввод
Вопрос:
Я создаю мобильную игру, в которой есть простой круг с прикрепленной к нему ручкой, им можно управлять и его можно поворачивать с помощью положения мыши, я использую приведенный ниже код для управления ручкой.
public class Controller : MonoBehaviour
{
private float m_force = 0.04f;
// amount of force for the player (circle and handle both)
public GameObject firePoint; // It is the tip of the handle which will shoot bullets
public float senstivity = 1f;
// senstivity control
public void ControlSenstivity(float index)
{
senstivity = index;
}
void Update()
{
//Get the Screen positions of the object
Vector2 positionOnScreen = Camera.main.WorldToViewportPoint(transform.position) ;
//Get the Screen position of the mouse
Vector2 mouseOnScreen = Camera.main.ScreenToViewportPoint(Input.mousePosition) ;
//Get the angle between the two points
float angle = AngleBetweenTwoPoints(positionOnScreen, mouseOnScreen) ;
// it will control the rotation of player (circle and handle both)
transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, angle) * senstivity);
}
float AngleBetweenTwoPoints(Vector3 a, Vector3 b)
{
return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg ;
}
// Below function for adding force to the player (both the circle and the handle), this function I added for mobile input whenever the button is pressed
public void AddForce()
{
transform.Translate(-firePoint.transform.localPosition.x, 0, 0 * m_force);
}
}
В этой мобильной игре пользователь может поворачивать игрока, перетаскивая его по экрану, и может перемещать игрока, прикладывая силу в направлении, противоположном направлению точки огня, всякий раз, когда нажата кнопка добавления силы, но проблема в том, что всякий раз, когда я нажимаю кнопку, игрок принимает ввод.Наведите курсор мыши на положение этой кнопки и повернитепо направлению к кнопке, вот почему она всегда будет двигаться в одном направлении, противоположном кнопке. Я хотел знать, что я могу сделать, чтобы не получать Input.MousePosition кнопки, которая находится на холсте и может изначально получить положение только в пространстве камеры. Любой ответ будет оценен, заранее спасибо!
Ответ №1:
Вы можете использовать EventSystem.IsPointerOverGameObject. Этот метод проверит, находится ли ваш указатель (мышь / джойстик) на каком-либо из элементов пользовательского интерфейса. Добавьте условие if перед получением положения мыши.
// This will ignore all UI game objects
if (!EventSystem.current.IsPointerOverGameObject())
{
//Get the Screen positions of the object
Vector2 positionOnScreen = Camera.main.WorldToViewportPoint(transform.position);
}