_rUBEN__
Messages postés7Date d'inscriptionsamedi 2 mars 2024StatutMembreDernière intervention14 février 2025
-
6 nov. 2024 à 14:52
Bonjour, je suis en train de créer un fps sur Unity.
J'ai un personnage, avec des mains placés en enfant de la caméra du joueur, et une simple capsule pour le corps (qu'on ne voit donc pas à la caméra). J'ai essayé d'ajouté un collider aux mains, un autre sur le joueur, un autre sur son corps... N'import où cela ne fonctionne pas, il n'y a que le collider de la capsule qui est pris en compte j'ai l'impression.
Par conséquent, quand je suis proche d'un mur, les bras rentre dedans, item pour quand je porte une arme, elle rentre dans les murs.
Sur la photo on voit les composants du player.
Si besoin voilà le script de déplacement du joueur (PlayerMovements sur l'image) :
using UnityEngine;publicclassPlayerMovements: MonoBehaviour
{[Header("To assign")]publicGameObjectarms;publicInventoryinventory;publicTransformcamera;[Header("Debug")][SerializeField]privateCameraplayerCamera;[SerializeField]privateCharacterControllercharacterController;publicAnimatorarmsAnim;[SerializeField]privatefloat walkingSpeed =4.0f;[SerializeField]privatefloat runningSpeed =5.6f;[SerializeField]privatefloat jumpSpeed =5.0f;[SerializeField]privatefloat gravity =20f;[SerializeField]privatefloat weight =60f;[SerializeField]privatebool canMove =true;[SerializeField]privatebool inVehicle =false;[SerializeField]privatebool isWalking =false;[SerializeField]privatebool isJumping =false;[SerializeField]privateVector3moveDirection;[SerializeField]privatefloat rotationX =0;[SerializeField]privatefloat rotationSpeed =2.0f;[SerializeField]privatefloat rotationXLimit =90.0f;// Start is called before the first frame updatevoidStart(){
Cursor.visible =false;
Cursor.lockState = CursorLockMode.Locked;
characterController = GetComponent<CharacterController>();
playerCamera = camera.GetComponent<Camera>();
armsAnim = arms.GetComponent<Animator>();}// Update is called once per framevoidUpdate(){Vector3forward = transform.TransformDirection(Vector3.forward);Vector3right = transform.TransformDirection(Vector3.right);//Est-ce qu'on appuie sur un bouton de direction ?float speedZ = Input.GetAxis("Vertical");float speedX = Input.GetAxis("Horizontal");float speedY = moveDirection.y;
isWalking =(speedZ !=0|| speedX !=0);if(inventory!=null){
armsAnim.SetBool("CarriesRifle", inventory.GetCarried()!=null&& inventory.GetCarried().GetComponent<Item>().itemData.type=="Firearm"&& inventory.GetCarried().GetComponent<Firearm>().firearmData.subtype=="Rifle");
armsAnim.SetBool("CarriesGrenade", inventory.GetCarried()!=null&& inventory.GetCarried().GetComponent<Item>().itemData.type=="Grenade");
armsAnim.SetBool("CarriesPistol", inventory.GetCarried()!=null&& inventory.GetCarried().GetComponent<Item>().itemData.type =="Firearm"&& inventory.GetCarried().GetComponent<Firearm>().firearmData.subtype=="Pistol");}// Multiplie la vitesse par la vitesse appropriée (course ou marche)float moveSpeed = walkingSpeed;//float percent = (inventory.GetWeight() / weight) * 100f;
speedX *= moveSpeed;
speedZ *= moveSpeed;//print($"{speedX}, {speedX * (100f-3*percent)/100f}");//speedX *= (100f-5*percent)/100f;//speedZ *= (100f-5*percent)/100f;//Calcul du mouvement
moveDirection =(forward * speedZ + right * speedX);// Est-ce qu'on appuie sur le bouton de saut (ici : Espace) et est au solif(Input.GetButton("Jump")&& characterController.isGrounded){
moveDirection.y = jumpSpeed;
isJumping =true;}elseif(characterController.isGrounded){
moveDirection.y =0;
isJumping =false;}else{// Applique la gravité
moveDirection.y = speedY;
moveDirection.y -= gravity * Time.deltaTime;}//Applique le mouvementif(canMove){
characterController.Move(moveDirection * Time.deltaTime);//Rotation de la caméra
rotationX +=-Input.GetAxis("Mouse Y")* rotationSpeed;
rotationX = Mathf.Clamp(rotationX,-rotationXLimit, rotationXLimit);
playerCamera.transform.localRotation = Quaternion.Euler(rotationX,0,0);// Applique la rotation gauche/droite sur le Player
transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X")* rotationSpeed,0);}else{
moveDirection =newVector3(0,0,0);}}publicvoidSetInVehicle(bool iv){
inVehicle = iv;}publicboolIsInVehicle(){return inVehicle;}}
Si quelqu'un peut m'aider, car là je suis coincé pour détecter les collisions de balles c'est compliqué.