Exemplo n.º 1
0
        private void Start()
        {
            _colliderObject       = new GameObject("PlayerCollider");
            _colliderObject.layer = LayerMask.NameToLayer("PlayerMovement");
            _colliderObject.transform.SetParent(transform);
            _colliderObject.transform.rotation      = Quaternion.identity;
            _colliderObject.transform.localPosition = colliderOffset;
            _colliderObject.transform.SetSiblingIndex(0);

            // Water check
            _cameraWaterCheckObject       = new GameObject("Camera water check");
            _cameraWaterCheckObject.layer = gameObject.layer;
            _cameraWaterCheckObject.transform.position = viewTransform.position;

            SphereCollider _cameraWaterCheckSphere = _cameraWaterCheckObject.AddComponent <SphereCollider> ();

            _cameraWaterCheckSphere.radius    = 0.1f;
            _cameraWaterCheckSphere.isTrigger = true;

            Rigidbody _cameraWaterCheckRb = _cameraWaterCheckObject.AddComponent <Rigidbody> ();

            _cameraWaterCheckRb.useGravity  = false;
            _cameraWaterCheckRb.isKinematic = true;

            _cameraWaterCheck = _cameraWaterCheckObject.AddComponent <CameraWaterCheck> ();

            prevPosition = transform.position;

            if (viewTransform == null)
            {
                viewTransform = Camera.main.transform;
            }

            if (playerRotationTransform == null && transform.childCount > 0)
            {
                playerRotationTransform = transform.GetChild(0);
            }

            _collider = gameObject.GetComponent <Collider> ();

            if (_collider != null)
            {
                GameObject.Destroy(_collider);
            }

            // rigidbody is required to collide with triggers
            rb = gameObject.GetComponent <Rigidbody> ();
            if (rb == null)
            {
                rb = gameObject.AddComponent <Rigidbody> ();
            }

            allowCrouch = crouchingEnabled;

            rb.isKinematic = true;
            rb.useGravity  = false;
            rb.angularDrag = 0f;
            rb.drag        = 0f;
            rb.mass        = weight;


            switch (collisionType)
            {
            // Box collider
            case ColliderType.Box:

                _collider = _colliderObject.AddComponent <BoxCollider> ();

                var boxc = (BoxCollider)_collider;
                boxc.size = colliderSize;

                defaultHeight = boxc.size.y;

                break;

            // Capsule collider
            case ColliderType.Capsule:

                _collider = _colliderObject.AddComponent <CapsuleCollider> ();

                var capc = (CapsuleCollider)_collider;
                capc.height = colliderSize.y;
                capc.radius = colliderSize.x / 2f;

                defaultHeight = capc.height;

                break;
            }

            _moveData.slopeLimit = movementConfig.slopeLimit;

            _moveData.rigidbodyPushForce = rigidbodyPushForce;

            _moveData.slidingEnabled       = slidingEnabled;
            _moveData.laddersEnabled       = laddersEnabled;
            _moveData.angledLaddersEnabled = supportAngledLadders;

            _moveData.playerTransform = transform;
            _moveData.viewTransform   = viewTransform;
            _moveData.viewTransformDefaultLocalPos = viewTransform.localPosition;

            _moveData.defaultHeight   = defaultHeight;
            _moveData.crouchingHeight = crouchingHeightMultiplier;
            _moveData.crouchingSpeed  = crouchingSpeed;

            _collider.isTrigger = !solidCollider;
            _moveData.origin    = transform.position;
            _startPosition      = transform.position;

            _moveData.useStepOffset = useStepOffset;
            _moveData.stepOffset    = stepOffset;
        }