Как в Unity реализовать вид от первого лица и возможность видеть другого игрока с его точки зрения?

У меня возникла проблема: я импортировал модель игрока и настроил для неё камеру. Однако, когда игрок поворачивает камеру от первого лица, он видит свою собственную модель, но нужно сделать так, чтобы он не видел себя. При этом другие игроки должны иметь возможность видеть его. Как это можно реализовать?
  • 28 марта 2025 г. 8:14
Ответы на вопрос 3
Чтобы реализовать вид от первого лица в Unity и избежать визуализации своей модели с точки зрения первого лица, вам нужно выполнить несколько шагов. Вот общее руководство:

### 1. Настройка камеры и модели

1. **Модель игрока**: Убедитесь, что ваша модель игрока настроена правильно, и у нее есть все необходимые компоненты (например, Rigidbody для физики).
2. **Камера**: Создайте пустой объект (например, `CameraHolder`), который будет выступать контейнером для камеры от первого лица. Поместите камеру в этот объект. Настройте позицию камеры так, чтобы она находилась на уровне глаз.

### 2. Скрипт для управления камерой

Создайте новый скрипт, который будет управлять камерой от первого лица. Обычно это будет просто следование мыши для вращения и перемещение игрока. Например, вот базовый скрипт:

```csharp
using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    public float sensitivity = 2.0f;
    public Transform playerBody;

    private float xRotation = 0f;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Вращение камеры
        float mouseX = Input.GetAxis("Mouse X") * sensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * sensitivity;

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        Camera.main.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * mouseX);
    }
}
```

### 3. Скрытие модели игрока от камеры

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

#### Способ 1: Скрытие объекта

1. **Создайте второй объект** во время игры (например, `PlayerCamera`), который будет копией модели игрока, но без рендеринга. Это можно сделать, добавив компонент `MeshRenderer` и отключив его, возможности в вашем коде.
2. Алиас для скрытия можно создать в вашем скрипте камеры:

```csharp
void Start() {
    GetComponent<MeshRenderer>().enabled = false; // Отключить отображение модели
}
```

#### Способ 2: Используйте слои и камеры

1. Создайте два слоя: `PlayerLayer` (для модели игрока) и `CameraLayer` (для камеры).
2. На модели игрока установите слой `PlayerLayer`.
3. На камере установить отрисовку только `CameraLayer`, отключив `PlayerLayer` в маске отрисовки.

### 4. Сетевой аспект (если это онлайн-игра)

Если вы делаете многопользовательскую игру, вам может понадобиться использовать сетевые библиотеки (например, Mirror или Photon), чтобы другие игроки могли видеть модель вашего персонажа. Будьте уверены, что модель игрока видима только у других.

### Резюме

В итоге, вам нужно создать систему, где камера правильно следит за вашим персонажем, а сам персонаж не визуализируется с точки зрения игрока. Либо отключите рендеринг у модели, либо используйте слои для управления видимостью. 
Для 1 лица мы используем полную модель только для создания тени а сам мэш выключаем. 
Если же это там надо для мп, то делаем так при инициализации игрока и только у владельца условно
using Unity.Netcode;
using UnityEngine;

public class Owner : NetworkBehaviour
{
    [SerializeField]MeshRenderer _mR;

    private void Start()
    {
        if (IsOwner) HideModel();
    }

    void HideModel() 
    {
        _mR = GetComponent<MeshRenderer>();
        _mR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly;
    }
}
Похожие вопросы