Détection collisions Unity ne marche pas
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; public class PlayerMovements : MonoBehaviour { [Header("To assign")] public GameObject arms; public Inventory inventory; public Transform camera; [Header("Debug")] [SerializeField] private Camera playerCamera; [SerializeField] private CharacterController characterController; public Animator armsAnim; [SerializeField] private float walkingSpeed = 4.0f; [SerializeField] private float runningSpeed = 5.6f; [SerializeField] private float jumpSpeed = 5.0f; [SerializeField] private float gravity = 20f; [SerializeField] private float weight = 60f; [SerializeField] private bool canMove = true; [SerializeField] private bool inVehicle = false; [SerializeField] private bool isWalking = false; [SerializeField] private bool isJumping = false; [SerializeField] private Vector3 moveDirection; [SerializeField] private float rotationX = 0; [SerializeField] private float rotationSpeed = 2.0f; [SerializeField] private float rotationXLimit = 90.0f; // Start is called before the first frame update void Start() { Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; characterController = GetComponent<CharacterController>(); playerCamera = camera.GetComponent<Camera>(); armsAnim = arms.GetComponent<Animator>(); } // Update is called once per frame void Update() { Vector3 forward = transform.TransformDirection(Vector3.forward); Vector3 right = 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 sol if (Input.GetButton("Jump") && characterController.isGrounded) { moveDirection.y = jumpSpeed; isJumping = true; } else if (characterController.isGrounded) { moveDirection.y = 0; isJumping = false; } else { // Applique la gravité moveDirection.y = speedY; moveDirection.y -= gravity * Time.deltaTime; } //Applique le mouvement if (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 = new Vector3(0, 0, 0); } } public void SetInVehicle(bool iv) { inVehicle = iv; } public bool IsInVehicle() { return inVehicle; } }
Si quelqu'un peut m'aider, car là je suis coincé pour détecter les collisions de balles c'est compliqué.
Merci
- Détection collisions Unity ne marche pas
- Cle usb qui ne se detecte pas - Guide
- Detection materiel pc - Guide
- Touslesdrivers detection - Télécharger - Pilotes & Matériel
- Mon téléphone ne détecte pas mes écouteurs filaire - Forum Mobile
- Pourquoi mon téléphone ne détecte pas mon casque bluetooth - Forum Casque et écouteurs