Проблема в том, что когда я запускаю игру и если курсор мыши находится за пределами окна просмотра игры в редакторе и немного вверху редактора, игра запускается нормально, игрок смотрит вперед. но если при запуске игры курсор мыши находится где-то посередине редактора, вид игрока падает, и игрок смотрит вниз.
Плеер состоит из капсулы и камеры на ее вершине:
Изображения скриншотов настроек плеера:

и

Скрипт, прикрепленный к плееру:
с использованием System.Collections; использование System.Collections.Generic; использование UnityEngine; общедоступный класс CharacterController: MonoBehaviour { общедоступное плавающее движение MoveSpeed = 10.0f; общедоступный float jumpForce = 2.0f; недействительный старт() { } // Обновление вызывается один раз за кадр недействительное обновление () { float translatioin = Input.GetAxis("Vertical") * moveSpeed; float straffe = Input.GetAxis("Horizontal") * moveSpeed; перевод *= Time.deltaTime; straffe *= Time.deltaTime; Transform.Translate(straffe, 0, translatioin); если (Input.GetKeyDown("escape")) { Cursor.lockState = CursorLockMode.None; } Transform.Translate(0, jumpForce * Input.GetAxis("Jump") * Time.deltaTime, 0); } } Основные настройки камеры

К камере прикреплены два скрипта:
с использованием System.Collections; использование System.Collections.Generic; использование UnityEngine; общедоступный класс camMouseLook: MonoBehaviour { Мышь Vector2Look; Вектор2 SmoothV; чувствительность публичного плавающего режима = 5,0f; публичное сглаживание плавающего числа = 2.0f; public bool mouseDown = false; public bool курсорLock = false; общедоступный HandleMouseCursor handleMouseCursor; персонаж GameObject; // Используйте это для инициализации недействительный старт() { если (cursorLock == false) { Cursor.lockState = CursorLockMode.None; } еще { Cursor.lockState = CursorLockMode.Locked; } персонаж = this.transform.parent.gameObject; } // Обновление вызывается один раз за кадр недействительное обновление () { если (Input.GetMouseButton(0) && mouseDown == правда) { Мышиный взгляд(); } еще { если (mouseDown == ложь) { Мышиный взгляд(); } } } частная пустота MouseLook() { если (cursorLock == false) { Cursor.lockState = CursorLockMode.None; } еще { Cursor.lockState = CursorLockMode.Locked; } var md = new Vector2(Input.GetAxisRaw("Мышь X"), Input.GetAxisRaw("Мышь Y")); md = Vector2.Scale(md, new Vector2(чувствительность * сглаживание, чувствительность * сглаживание)); SmoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / сглаживание); SmoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / сглаживание); mouseLook += SmoothV; mouseLook.y = Mathf.Clamp(mouseLook.y, -90f, 90f); Transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right); персонаж.transform.localRotation = Quaternion.AngleAxis(mouseLook.x,character.transform.up); } } и
с использованием системы; использование System.Collections; использование UnityEngine; пространство имен UnityStandardAssets.Utility { публичный класс DragRigidbody: MonoBehaviour { public bool useMouseHoldDown = true; [SerializeField] частная камера mainCamera; const float k_Spring = 50.0f; const float k_Damper = 5.0f; const float k_Drag = 10.0f; const float k_AngularDrag = 5.0f; const float k_Distance = 0,2f; const bool k_AttachToCenterOfMass = false; частный SpringJoint m_SpringJoint; частный bool isDraging; частная пустота Пробуждение() { if (!mainCamera) mainCamera = GetComponent(); если (!mainCamera) mainCamera = Camera.main; } частное недействительное обновление() { if (!Input.GetMouseButtonDown(0) || isDragged) return; // Убедитесь, что пользователь нажал кнопку мыши если (!Input.GetMouseButtonDown(0)) { возвращаться; } // Нам нужно действительно попасть в объект RaycastHit hit = новый RaycastHit(); если ( !Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition).origin, mainCamera.ScreenPointToRay(Input.mousePosition).direction, выходное попадание, 100, Physics.DefaultRaycastLayers)) { возвращаться; } // Нам нужно попасть в твердое тело, которое не является кинематическим if (!hit.rigidbody || hit.rigidbody.isKinematic) { возвращаться; } если (!m_SpringJoint) { var go = new GameObject("Перетаскиватель твердого тела"); Тело Rigidbody = go.AddComponent(); m_SpringJoint = go.AddComponent(); body.isKinematic = правда; } m_SpringJoint.transform.position = hit.point; m_SpringJoint.anchor = Vector3.zero; m_SpringJoint.spring = k_Spring; m_SpringJoint.damper = k_Damper; m_SpringJoint.maxDistance = k_Distance; m_SpringJoint.connectedBody = hit.rigidbody; StartCoroutine("DragObject", hit.distance); } частный IEnumerator DragObject (расстояние с плавающей запятой) { isDragged = правда; вар oldDrag = m_SpringJoint.connectedBody.drag; вар oldAngularDrag = m_SpringJoint.connectedBody.angularDrag; m_SpringJoint.connectedBody.drag = k_Drag; m_SpringJoint.connectedBody.angularDrag = k_AngularDrag; если (useMouseHoldDown == true) { в то время как (Input.GetMouseButton(0)) { вар луч = mainCamera.ScreenPointToRay(Input.mousePosition); m_SpringJoint.transform.position = луч.GetPoint(расстояние); выходной возврат нулевой; } } еще { в то время как (!Input.GetMouseButton(0)) { вар луч = mainCamera.ScreenPointToRay(Input.mousePosition); m_SpringJoint.transform.position = луч.GetPoint(расстояние); выходной возврат нулевой; } } если (m_SpringJoint.connectedBody) { m_SpringJoint.connectedBody.drag = oldDrag; m_SpringJoint.connectedBody.angularDrag = oldAngularDrag; m_SpringJoint.connectedBody = ноль; } isDraging = ложь; } } }