Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
- Configuración global:
- Usaremos una vista ortográfica para la cámara. ( Seleccionamos la cámara -> Projection -> Orthographic)
- Usaremos un fondo plano (Seleccionamos la cámara -> Clear flags -> Solid color)
- Creando el pincel:
- Create Empty. Lo llamaremos ball
- Dentro de este empty creamos un 2D Object -> Sprite. Le asignamos la imagen del pincel:
- Asociamos un Rigid Body 2D al objeto Ball.
- Dentro del componente Rigid Body 2D cambiamos la propiedad Body Type a static para que la pelota no caiga por gravedad.
- Añadimos un Circle Collider 2D al objeto Ball y lo ajustamos al tamaño del pincel.
- Convertimos el objeto Ball en un Prefab.
- Creamos la línea
- Creamos un nuevo empty que llamaremos Line.
- Añadimos un componente de tipo Line Renderer a esta línea.
- Creamos un nuevo material y lo vinculamos al objeto.Line.
- Dentro del componente Line Renderer del objeto Line:
- Asignaremos un Width de 0.15.
- Asignamos un Edge Collider 2D a la línea.
- Salvamos la línea como Prefab.
- Creamos un nuevo Script llamado DrawLine
public class DrawLine : MonoBehaviour {
public GameObject linePrefab;
private GameObject currentLine;
private LineRenderer lineRenderer;
private EdgeCollider2D edgeCollider;
private List<Vector2> fingerPositions = new List<Vector2>();
void Update () {
if (Input.GetMouseButtonDown(0)){
CreateLine();
}
if (Input.GetMouseButton(0)){
Vector2 tempFingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Vector2.Distance(tempFingerPos, fingerPositions[fingerPositions.Count - 1]) > .1f){
UpdateLine(tempFingerPos);
}
}
}
void CreateLine(){
// Llamamos a CreateLine una sola vez cuando empezamos a dibujar para crear currentLine. currentLine se visualizará porque tendrán un lineRenderer y tendrá colisión porque tendrá un edgeCollider
currentLine = Instantiate(linePrefab, Vector3.zero, Quaternion.identity);
lineRenderer = currentLine.GetComponent<LineRenderer>();
edgeCollider = currentLine.GetComponent<EdgeCollider2D>();
fingerPositions.Clear();
// Como lineRenderer es una línea, necesitamos añadir dos puntos a fingerPositions para poder dibujarla sin errores
fingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
fingerPositions.Add(Camera.main.ScreenToWorldPoint(Input.mousePosition));
// Dibujamos una línea compuesta de dos puntos
lineRenderer.SetPosition(0, fingerPositions[0]);
lineRenderer.SetPosition(1, fingerPositions[1]);
edgeCollider.points = fingerPositions.ToArray();
}
void UpdateLine(Vector2 newFingerPos){
fingerPositions.Add(newFingerPos);
lineRenderer.positionCount++;
// Convertimos el List de posiciones por las que ha ido pasando el dedo en la línea que vamos a ver
lineRenderer.SetPosition(lineRenderer.positionCount - 1, newFingerPos);
// Convertimos el List de posiciones por las que ha ido pasando el dedo en los puntos del edge collider
edgeCollider.points = fingerPositions.ToArray();
}
}
- Creamos un Empty llamado GameController y le vinculamos el código anterior.
- Luego, en el panel inspector, iremos asociando las propiedades que hemos hecho públicas. Sólo con rellenar la primera propiedad ( Line Prefab ya podremos dibujar).