- Home /
strange behaviour with gameObject
hi, i am making a first-person shooter(unity 2019.4) and i made a script that if the player collides with a gun, it will message it in the console. in order to do that, i made a rigidbody for gravity and a mesh collider. when i entered playmode, it returned and error that said something like "non vertex mesh collider and non kinematic rigidbody are not supported any longer." so i enabled the vertex option on the mesh collider, and then when i entered playmode, the guns crept along the ground! i tried enabling the kinematic option, but the guns didn't have gravity. can anyone tell me whats going on, or a different option?
here are my scripts if it makes any difference: player movement script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerMovement : MonoBehaviour
{
public CharacterController controller;
public float speed = 12f;
public float gravity = -9.81f;
public float jumpHeight= 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
Vector3 velocity;
bool isGrounded;
void Update()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if (isGrounded && velocity.y < 0) {
velocity.y = -2f;
}
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);
if (Input.GetButtonDown("Jump") && isGrounded) {
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
void OnCollisionEnter(Collision col){
if (col.gameObject.tag == "gun"){
Debug.Log("you hit gun lol");
}
}
}
and my gun script:
using System.Collections;
using UnityEngine;
public class gun : MonoBehaviour
{
public float damage = 10f;
public float range = 100f;
public float recoilTime = 0.1f;
public Camera fpsCam;
public ParticleSystem muzzleFlash;
public Animator animator;
public Transform weaponsHolder;
void Update()
{
if(Input.GetButtonDown("Fire1"))
{
if (gameObject.transform.parent == weaponsHolder)
{
Shoot();
}
}
void Shoot()
{
muzzleFlash.Play();
StartCoroutine(Recoil());
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Target target = hit.transform.GetComponent<Target>();
if (target != null)
{
target.TakeDamage(damage);
//target.setForce();
}
}
}
IEnumerator Recoil ()
{
animator.SetBool("isShooting", true);
yield return new WaitForSeconds(recoilTime);
animator.SetBool("isShooting", false);
}
}
}
-elz50
Answer by MurphyMurph_21 · Nov 21, 2020 at 12:38 PM
@elz50 I would not use a mesh collider if I were you. But I think as long as is kinematic is checked you don't need to check the vertex option enabled. box or capsule collider should work just fine. it doesn't need to be perfect. You can always create empty children gameobjects and set the parent as your gun transform and add different shaped colliders to the empty children for more accuracy.
thank you extremely much! i think you are right, it doesn't need to be perfect, and it works normally now as well.
Answer by Llama_w_2Ls · Nov 21, 2020 at 06:54 PM
If you set the mesh collider to IsTrigger, and use void OnTriggerEnter()
instead, you shouldnt get that error, and collision detection should work as normal @elz50