Présent depuis peu sur unity je me suis lancé le défi de réaliser un petit prototype de jeu 3D. Dans ce but j'ai réalisé une fonction de "pickup" qui permet de prendre les objets devant soit et les garder en main jusqu'au relâchement de la touche, ils se déposent alors par terre devant le joueurs.
Pour cette fonction j'ai eu recours à un gameobject "Destination" enfant du player controller et l'objet saisi par le joueur se place alors à l’emplacement de destination. Cependant je fais face a un problème qui est que quand je me saisi d'un objet celui ci chute instantanément dans le vide. voici le code de la fonction PickUp.
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PickUp : MonoBehaviour
{
[SerializeField] private Transform destination; //Game object qui permet de placer l'objet saisi devant la caméra
public void OnMouseDown()
{
GetComponent<BoxCollider>().enabled = false; //Désactivation de la gravité et de la collision pour éviter les interactions indésirables
GetComponent<Rigidbody>().useGravity = false;
this.transform.position = destination.position; // l'objet saisi vient se positionner devant le joueur
this.transform.parent = GameObject.Find("Destination").transform; //recalcule de la positon pour que l'objet suive le joueur.
}
public void OnMouseUp()
{
GetComponent<BoxCollider>().enabled = true;
this.transform.parent = null;
GetComponent<Rigidbody>().useGravity = true; //rétablissement des paramètres de base de l'objet lorsqu’on le relâche
}
}
https://youtu.be/FbuUPcRStn8