Ressources

Catégorie scripts.

Le panda anti Adblock

grapplingHook.cs

Script permettant au FPController d'utiliser un grappin.
Copier
								
									 
// Vidéo tutoriel / mise en place : https://youtu.be/dJmnN0yvfu0
// Il est nécessaire d'effectuer des modifications au script FirstPersonController.cs
// vous pouvez télécharger le script modifié ici : https://pastebin.com/qWV6NUmY

using UnityEngine;
using System.Collections;
// Pour utiliser le FirstPersonController
using UnityStandardAssets.Characters.FirstPerson;

public class grapplingHook : MonoBehaviour{

	public Camera cam;
	public RaycastHit hit;

    public LayerMask surfaces;
	public int maxDistance;
	
	public bool isMoving;
	public Vector3 location;
	
	public float speed = 10;
	public Transform hook;
	
	public FirstPersonController FPC;
	public LineRenderer LR;

	void Update(){

        // Envois du grappin
		if(Input.GetKey(KeyCode.Q)){
			Grapple();
		}
		
        // Si le personnage vole, on l'envoie vers le point d'arrivée 
		if(isMoving)
        {
			MoveToSpot();
		}
		
        // Annulation / décrochage du grappin
		if(Input.GetKey(KeyCode.Space) && isMoving)
        {
            isMoving = false;
			FPC.CanMove = true;
			LR.enabled = false;
            gameObject.GetComponent< Rigidbody>().useGravity = true;
            FPC.m_GravityMultiplier = 2;
        }

        
	}
	
    // Lors de l'envois du grappin
	public void Grapple(){
        // On créé un raycast de "maxDistance" unités depuis la caméra vers l'avant.
        // Si ce raycast touche quelque chose c'est que la grappin est utilisable
		if(Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, maxDistance, surfaces)){
            isMoving = true;
			location = hit.point;
			FPC.CanMove = false;
            gameObject.GetComponent< Rigidbody>().useGravity = false;
            FPC.m_GravityMultiplier = 1;
			LR.enabled = true;
			LR.SetPosition(1, location);
		}

    }

	// Déplacement du joueur vers le point touché par le grappin
	public void MoveToSpot(){
		transform.position = Vector3.Lerp(transform.position, location, speed * Time.deltaTime / Vector3.Distance(transform.position, location));
		LR.SetPosition(0, hook.position);
		
        // Si on est à - de 1 unité(s) de la cible final on décroche le grappin automatiquement
		if(Vector3.Distance(transform.position, location) < 1f){
            isMoving = false;
			FPC.CanMove = true;
			LR.enabled = false;
            gameObject.GetComponent< Rigidbody>().useGravity = true;
            FPC.m_GravityMultiplier = 2;
        }
	}
}