Pantalla táctil Unity

Aquí vamos aprender a como incorporar una pantalla táctil para nuestro juego, en mi caso será un volante, así que vamos a ello

Aquí tenemos nuestro Unity lo que vamos hacer es añadir un canvas y una imagen

Todavía nos queda un poquito ya aunque le diéramos al Play no funcionara nuestro Volante y nosotros lo que queremos es que se mueva , Así que vamos a crear un Create Empty

Lo llamamos control Pantalla y dentro creamos un Script al que vamos a llamar SteeringWheel

Y dentro del Script pegamos el siguiente código

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using System.Collections;
  
public class SteeringWheel : MonoBehaviour
{
    public Graphic UI_Element;
  
    RectTransform rectT;
    Vector2 centerPoint;
  
    public float maximumSteeringAngle = 200f;
    public float wheelReleasedSpeed = 200f;
  
    float wheelAngle = 0f;
    float wheelPrevAngle = 0f;
  
    bool wheelBeingHeld = false;
  
    public float GetClampedValue()
    {
        // returns a value in range [-1,1] similar to GetAxis("Horizontal")
        return wheelAngle / maximumSteeringAngle;
    }
  
    public float GetAngle()
    {
        // returns the wheel angle itself without clamp operation
        return wheelAngle;
    }
  
    void Start()
    {
        rectT = UI_Element.rectTransform;
        InitEventsSystem();
    }
  
    void Update()
    {
        // If the wheel is released, reset the rotation
        // to initial (zero) rotation by wheelReleasedSpeed degrees per second
        if( !wheelBeingHeld && !Mathf.Approximately( 0f, wheelAngle ) )
        {
            float deltaAngle = wheelReleasedSpeed * Time.deltaTime;
            if( Mathf.Abs( deltaAngle ) > Mathf.Abs( wheelAngle ) )
                wheelAngle = 0f;
            else if( wheelAngle > 0f )
                wheelAngle -= deltaAngle;
            else
                wheelAngle += deltaAngle;
        }
  
        // Rotate the wheel image
        rectT.localEulerAngles = Vector3.back * wheelAngle;
         
        //Debug.Log("Steering Value: " + GetClampedValue());
    }
  
    void InitEventsSystem()
    {
        // Warning: Be ready to see some extremely boring code here :-/
        // You are warned!
        EventTrigger events = UI_Element.gameObject.GetComponent<EventTrigger>();
  
        if( events == null )
            events = UI_Element.gameObject.AddComponent<EventTrigger>();
  
        if( events.triggers == null )
            events.triggers = new System.Collections.Generic.List<EventTrigger.Entry>();
  
        EventTrigger.Entry entry = new EventTrigger.Entry();
        EventTrigger.TriggerEvent callback = new EventTrigger.TriggerEvent();
        UnityAction<BaseEventData> functionCall = new UnityAction<BaseEventData>( PressEvent );
        callback.AddListener( functionCall );
        entry.eventID = EventTriggerType.PointerDown;
        entry.callback = callback;
  
        events.triggers.Add( entry );
  
        entry = new EventTrigger.Entry();
        callback = new EventTrigger.TriggerEvent();
        functionCall = new UnityAction<BaseEventData>( DragEvent );
        callback.AddListener( functionCall );
        entry.eventID = EventTriggerType.Drag;
        entry.callback = callback;
  
        events.triggers.Add( entry );
  
        entry = new EventTrigger.Entry();
        callback = new EventTrigger.TriggerEvent();
        functionCall = new UnityAction<BaseEventData>( ReleaseEvent );//
        callback.AddListener( functionCall );
        entry.eventID = EventTriggerType.PointerUp;
        entry.callback = callback;
  
        events.triggers.Add( entry );
    }
  
    public void PressEvent( BaseEventData eventData )
    {
        // Executed when mouse/finger starts touching the steering wheel
        Vector2 pointerPos = ( (PointerEventData) eventData ).position;
  
        wheelBeingHeld = true;
        centerPoint = RectTransformUtility.WorldToScreenPoint( ( (PointerEventData) eventData ).pressEventCamera, rectT.position );
        wheelPrevAngle = Vector2.Angle( Vector2.up, pointerPos - centerPoint );
    }
  
    public void DragEvent( BaseEventData eventData )
    {
        // Executed when mouse/finger is dragged over the steering wheel
        Vector2 pointerPos = ( (PointerEventData) eventData ).position;
  
        float wheelNewAngle = Vector2.Angle( Vector2.up, pointerPos - centerPoint );
        // Do nothing if the pointer is too close to the center of the wheel
        if( Vector2.Distance( pointerPos, centerPoint ) > 20f )
        {
            if( pointerPos.x > centerPoint.x )
                wheelAngle += wheelNewAngle - wheelPrevAngle;
            else
                wheelAngle -= wheelNewAngle - wheelPrevAngle;
        }
        // Make sure wheel angle never exceeds maximumSteeringAngle
        wheelAngle = Mathf.Clamp( wheelAngle, -maximumSteeringAngle, maximumSteeringAngle );
        wheelPrevAngle = wheelNewAngle;
    }
  
    public void ReleaseEvent( BaseEventData eventData )
    {
        // Executed when mouse/finger stops touching the steering wheel
        // Performs one last DragEvent, just in case
        DragEvent( eventData );
  
        wheelBeingHeld = false;
    }
}

Aquí ya tendríamos nuestro código, yo os voy a poner los errores que me salieron y como areglarlos

quizas a vosotros no os salga o si pero aquí teneis el resultado de este Script copiado

Estos serian nuestros errores vamos air solucionándolo poco a poco

Solo nos quedarían 29 fallos de 30 aun son muchísimos, y aquí que hemos hecho muy facil hemos puesto

using UnityEngine.UI;

Y que es:

El sistema UI le permite a usted crear interfaces de usuario rápidas e intuitivas. Esta es una introducción a las características principales del sistema UI de Unity.

De 29 Errores bajaron a 4 Errores, los errores bajaron significativamente añadiendo using UnityEngine.Events;

El sistema de eventos es una forma de enviar eventos a objetos en la aplicación en función de la entrada, ya sea teclado, mouse, toque o entrada personalizada . El Sistema de eventos consta de unos pocos componentes que trabajan juntos para enviar eventos.

Ahora vamos hacer que tengamos un nuevo error

Y ahora solucionaremos todo

Y ya lo tendríamos

admin

Related Posts

Lección del Balón de Oro, Cuando el Carácter y el Juego. No Van de la Mano

Ayer el Real Madrid se enfrentó en casa al AC Milan, pero el marcador de 1-3 en contra fue un golpe difícil. Este resultado no es alentador, y si la…

Jugadores Lesionados y Controversias en Amistosos Internacionales

En estos últimos días, se ha hablado mucho sobre los partidos amistosos de selecciones y los jugadores que vuelven lesionados. Uno de los focos de atención ha sido Kylian Mbappé,…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You Missed

Ganar para No Avanzar: El Atlético de Madrid y su Estilo Estancado

  • Por admin
  • noviembre 6, 2024
  • 212 views
Ganar para No Avanzar: El Atlético de Madrid y su Estilo Estancado

Lección del Balón de Oro, Cuando el Carácter y el Juego. No Van de la Mano

  • Por admin
  • noviembre 6, 2024
  • 72 views
Lección del Balón de Oro, Cuando el Carácter y el Juego. No Van de la Mano

Una Jornada Que Nunca Debió Jugarse

  • Por admin
  • noviembre 4, 2024
  • 57 views
Una Jornada Que Nunca Debió Jugarse

Vinicius, el Real Madrid y la Sombra de la ‘Encerrona’ en el Balón de Oro

  • Por admin
  • octubre 29, 2024
  • 70 views
Vinicius, el Real Madrid y la Sombra de la ‘Encerrona’ en el Balón de Oro

La Farsa del Balón de Oro. Un Espejismo de Justicia en el Fútbol

  • Por admin
  • octubre 28, 2024
  • 86 views
La Farsa del Balón de Oro. Un Espejismo de Justicia en el Fútbol

Barcelona Imparable, Atlético en Caída y un Valencia Sin Rumbo

  • Por admin
  • octubre 28, 2024
  • 42 views
Barcelona Imparable, Atlético en Caída y un Valencia Sin Rumbo