Unity 汽车碰撞

protected void OnCollisionEnter(Collision collision)
    {
        if (isCollision)
        {
            return;
        }
        int layer = collision.gameObject.layer;
        if (CheckEnableCollision(layer))
        {
            ContactPoint[] contacts = collision.contacts;
            ContactPoint contact = contacts[0];
            Vector3 point = contact.point;
            if (moveCoroutine != null)
            {
                StopCoroutine(moveCoroutine);
            }
            animator.enabled = false;
            //Debug.Log("point==(" + point.x + "," + point.y + "," + point.z + ")" + ";\ntransform.position==(" + transform.position.x + "," + transform.position.y + "," + transform.position.z + ")"
            //        + ";\nmeshFilter.position==(" + meshFilter.transform.position.x + "," + meshFilter.transform.position.y + "," + meshFilter.transform.position.z + ")");
            Vector3 colliderPosition = new Vector3(point.x, colliderPos.position.y, point.z);
            GetMinDistanceFromVerticle(colliderPosition);
            Vector3 direction = (new Vector3(transform.position.x, colliderPosition.y, transform.position.z) - colliderPosition).normalized;
            float angleX = Vector3.Angle(new Vector3(direction.x, 0, direction.z), new Vector3(0, 0, 2));
            float angleZ = Vector3.Angle(new Vector3(direction.x, 0, direction.z), new Vector3(2, 0, 0));
            float rotateX = 0;
            float rotateZ = 0f;
            if (angleX > 90)
            {
                rotateX = -15f;
            }else if(angleX < 90)
            {
                rotateX = 15f;
            }
           if(angleZ > 90)
            {
                rotateZ = 15;
            }else if(angleZ < 90)
            {
                rotateZ = -15;
            }
            _rigibody.angularDrag = 0;
            _rigibody.AddForce(new Vector3(40 * direction.x, 80, 40 * direction.z),ForceMode.Impulse);
            _rigibody.angularVelocity = new Vector3(rotateX, 0, rotateZ);
            GameManager.Instance.vehicleCrashEffect.transform.position = point;
            GameManager.Instance.vehicleCrashEffect.SetActive(true);
            GameManager.Instance.vehicleCrashEffect.GetComponent<ParticleSystem>().Play();
            GameAudioManager.Instance.PlayCarContact();
            MMVibrationManager.Haptic(HapticTypes.HeavyImpact);
            isCollision = true;
            if (!isArrivedLineEnd)
            {
                GameEventManager.SendOnVehicleArrivedLineEndEvent(colorIdx);
                if (this.vehicleType == VEHICLELTYPE.NORMAL)
                {
                    GameManager.Instance.ArrivedLineEndCnt += 1;
                    isArrivedLineEnd = true;
                }
            }
        }
    }

 

posted @ 2020-06-10 19:43  三里路异乡客  阅读(497)  评论(0)    收藏  举报