Hola , quería pediros ayuda por si alguno sabe de algun tutorial o algun sitio donde se explique mas o menos algunas funciones para crear lo que seria un brazo extensible o disparo con anclaje, lo que viene a ser con la cuerda , os pongo un ejemplo
eature=oembed" width="459">
https://gamedevelopment.tutsplus.com/tutorials/swinging-physics-for-player-movement-as-seen-in-spider-man-2-and-energy-hook--gamedev-8782 (https://gamedevelopment.tutsplus.com/tutorials/swinging-physics-for-player-movement-as-seen-in-spider-man-2-and-energy-hook--gamedev-8782)
He creado este código, con el que a lo mejor puedes empezar:
using UnityEngine;
using System.Collections;
public class Gancho : MonoBehaviour {
public Transform pivot;
public LineRenderer lineRenderer;
public float alcance = 3f;
public float velocidad = 5f;
public float minGancho = 0.1f;
public float fuerza = 100f;
bool ganchoActivado = false;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.G) && !this.ganchoActivado)
{
this.ganchoActivado = true;
StartCoroutine(LanzarGancho());
}
}
IEnumerator LanzarGancho()
{
float distancia = 0.2f;
RaycastHit hit;
Vector3[] posiciones = new Vector3[2];
Vector3 direccion;
this.lineRenderer.enabled = true;
Debug.Log("LanzarGanchoEnter");
while (distancia <= this.alcance)
{
posiciones[0] = this.pivot.position;
direccion = this.pivot.forward + Vector3.up * 0.5f;
posiciones[1] = posiciones[0] + direccion * distancia;
this.lineRenderer.SetPositions(posiciones);
if (Physics.Linecast(posiciones[0],posiciones[1], out hit))
{
StartCoroutine(Lanzamiento(hit, -direccion));
break;
}
distancia += velocidad * Time.deltaTime;
yield return null;
}
if (distancia > this.alcance)
{
this.ganchoActivado = false;
this.lineRenderer.enabled = false;
}
yield return null;
Debug.Log("LanzarGanchoExit");
}
IEnumerator Lanzamiento(RaycastHit hit, Vector3 direccionGancho)
{
float alfa = 0f;
float distancia = Vector3.Distance(this.pivot.position, hit.point);
Vector3 vectorOpuesto = Quaternion.Euler(0f, 180f, 0f) * direccionGancho;
Vector3[] posiciones = new Vector3[2];
posiciones[1] = hit.point;
Debug.Log("LanzamientoEnter");
while (alfa <= 1f)
{
posiciones[0] = hit.point + Vector3.Lerp(direccionGancho, vectorOpuesto, alfa) * distancia;
this.lineRenderer.SetPositions(posiciones);
this.transform.position = posiciones[0] - this.pivot.position + this.transform.position;
if (distancia > this.minGancho) distancia -= this.velocidad * Time.deltaTime;
alfa += Time.deltaTime;
yield return null;
}
this.lineRenderer.enabled = false;
this.ganchoActivado = false;
this.GetComponent<Rigidbody>().AddRelativeForce(Vector3.forward * this.fuerza);
yield return null;
Debug.Log("LanzamientoExit");
}
1) Lanza el gancho.
2) Recoge el gancho y mueve el personaje al lado contrario, rotación en Y de 180 grados.
Gracias chicos!! voy a probar a ver que tal... luego necesitare sprites asi chulos en openart no encuentro :(
kaito , que iría en line renderer y en pivot?
Gracias , esque soy un poco noob.
Utilicé un componente LineRenderer para simular una cuerda que comenzaba desde la posición 'pivot'(Un GameObject vacio emparentado al player)
Animación-corrutina LanzarGancho: La cuerda al inicio tiene una longitud 0, que va aumentando hasta 'alcance. Al mismo tiempo lanzo un rayo para encontrar un objeto.
Animación-corrutina Lanzamiento: El personaje se mueve.