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; }