/
Lexan97
/
Cowbeat
Обзор
Документация
Войти
/
Lexan97
/
Cowbeat
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Assets/Scripts/Player/AimController.cs
112 строк
3 KB
Lexa97
Final Commit gor present
26 май 2026, 23:40
26 май 2026, 23:40
70e9bdb
Код
Авторство
О чём код?
using UnityEngine; using Unity.Cinemachine; using System.Collections.Generic; public class AimController : MonoBehaviour { [Header("Cameras")] public CinemachineCamera thirdPersonVirtualCam; public CinemachineCamera firstPersonVirtualCam; public Transform mainCameraTransform; [Header("Weapon & UI")] public GameObject revolverObject; public GameObject crosshairUI; [Header("Visibility")] public List<GameObject> bodyPartsToHide = new List<GameObject>(); private Animator animator; private CharacterController characterController; private PlayerStats playerStats; public bool isAiming { get; private set; } void Start() { animator = GetComponent<Animator>(); characterController = GetComponent<CharacterController>(); playerStats = GetComponent<PlayerStats>(); if (mainCameraTransform == null) mainCameraTransform = Camera.main.transform; UpdateVisibility(false); // Блокируем курсор сразу при старте игры Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } void Update() { if (playerStats != null && playerStats.isDead) return; if (Input.GetKeyDown(KeyCode.E)) { if (PlayerInventory.Instance != null && !PlayerInventory.Instance.hasRevolver) { Debug.Log("У меня нет оружия!"); return; } if (characterController != null && characterController.isGrounded) { ToggleAim(); } } if (isAiming) { RotatePlayerHorizontal(); } } private void ToggleAim() { isAiming = !isAiming; CinemachineCamera targetCam = isAiming ? firstPersonVirtualCam : thirdPersonVirtualCam; if (targetCam != null && mainCameraTransform != null) { targetCam.ForceCameraPosition(mainCameraTransform.position, mainCameraTransform.rotation); targetCam.OnTargetObjectWarped(transform, transform.position - targetCam.transform.position); } if (firstPersonVirtualCam != null) firstPersonVirtualCam.Priority = isAiming ? 15 : 5; if (thirdPersonVirtualCam != null) thirdPersonVirtualCam.Priority = isAiming ? 5 : 15; if (crosshairUI != null) crosshairUI.SetActive(isAiming); if (animator != null) animator.SetBool("isAiming", isAiming); UpdateVisibility(isAiming); // УБРАЛИ ЛОГИКУ ПЕРЕКЛЮЧЕНИЯ КУРСОРА. // Теперь он всегда заблокирован и невидим. } public void CancelAim() { if (isAiming) { ToggleAim(); } } private void RotatePlayerHorizontal() { if (mainCameraTransform == null) return; transform.rotation = Quaternion.Euler(0, mainCameraTransform.eulerAngles.y, 0); } private void UpdateVisibility(bool aiming) { foreach (GameObject part in bodyPartsToHide) { if (part != null) { Renderer r = part.GetComponentInChildren<Renderer>(); if (r != null) r.enabled = !aiming; } } if (revolverObject != null) revolverObject.SetActive(aiming); } }