Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

[AYUDA] Brazo extensible

Iniciado por Kyrzo, Septiembre 22, 2016, 10:35:28 AM

Tema anterior - Siguiente tema
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">

 
 


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.
 
 

Etiquetas: