Посібник із багатокористувацьких ігор на одному ПК з розділеним екраном для Unity

У цьому підручнику я покажу, як створити розділений екран мультиплеєр у Unity.

Кроки

  • Відкрийте сцену з вашим рівнем (у моєму випадку це буде проста сцена з кубиками)

  • Створіть новий GameObject і назвіть його "Player 1"
  • Створіть новий куб і перемістіть його всередину об’єкта "Player 1" (видаліть його компонент Box Collider)
  • Створіть ще кілька кубів для очей і рота (також видаліть їхні компоненти Box Collider)

  • Перемістіть головну камеру всередину об'єкта "Player 1" і наведіть її на куб

  • Створіть новий сценарій, назвіть його "RigidbodyPlayerController" і вставте в нього наведений нижче код:

RigidbodyPlayerController.cs

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]

public class RigidbodyPlayerController : MonoBehaviour
{

    public enum PlayerControls { WASD, Arrows }
    public PlayerControls playerControls = PlayerControls.WASD;
    public float movementSpeed = 3f;
    public float rotationSpeed = 5f;

    Rigidbody r;
    float gravity = 10.0f;

    void Awake()
    {
        r = GetComponent<Rigidbody>();
        r.freezeRotation = true;
        r.useGravity = false;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        // Move Front/Back
        Vector3 targetVelocity = Vector3.zero;
        if ((playerControls == PlayerControls.WASD && Input.GetKey(KeyCode.W)) || (playerControls == PlayerControls.Arrows && Input.GetKey(KeyCode.UpArrow)))
        {
            targetVelocity.z = 1;
        }
        else if ((playerControls == PlayerControls.WASD && Input.GetKey(KeyCode.S)) || (playerControls == PlayerControls.Arrows && Input.GetKey(KeyCode.DownArrow)))
        {
            targetVelocity.z = -1;
        }
        targetVelocity = transform.TransformDirection(targetVelocity);
        targetVelocity *= movementSpeed;

        // Apply a force that attempts to reach our target velocity
        Vector3 velocity = r.velocity;
        Vector3 velocityChange = (targetVelocity - velocity);
        float maxVelocityChange = 10.0f;
        velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
        velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
        velocityChange.y = 0;
        r.AddForce(velocityChange, ForceMode.VelocityChange);

        // We apply gravity manually for more tuning control
        r.AddForce(new Vector3(0, -gravity * r.mass, 0));


        // Rotate Left/Right
        if ((playerControls == PlayerControls.WASD && Input.GetKey(KeyCode.A)) || (playerControls == PlayerControls.Arrows && Input.GetKey(KeyCode.LeftArrow)))
        {
            transform.Rotate(new Vector3(0, -14, 0) * Time.deltaTime * rotationSpeed, Space.Self);
        }
        else if ((playerControls == PlayerControls.WASD && Input.GetKey(KeyCode.D)) || (playerControls == PlayerControls.Arrows && Input.GetKey(KeyCode.RightArrow)))
        {
            transform.Rotate(new Vector3(0, 14, 0) * Time.deltaTime * rotationSpeed, Space.Self);
        }
    }
}
  • Додайте сценарій RigidbodyPlayerController до "Player 1" (Ви помітите, що він додасть ще 2 компоненти, Rigidbody та Capsule Collider)
  • Налаштуйте Capsule Collider, щоб він відповідав розмірам Cube.

Нижче наведено кроки, щоб створити розділений екран для двох гравців:

  • Скопіюйте об’єкт "Player 1" і перейменуйте його на "Player 2".
  • У RigidbodyPlayerController змініть елементи керування гравцем на "Arrows".

  • Змініть значення Viewport Rect "Player 1" Camera на X: 0 Y: 0,5 W: 1 H: 0,5

  • Змініть значення Viewport Rect "Player 2" Camera на X: 0 Y: 0 W: 1 H: 0,5

Крім того, ви можете налаштувати вертикальний розділений екран, встановивши значення нижче:

X: 0 Y: 0 W: 0,5 H: 1 для камери 1

X: 0,5 Y: 0 W: 0,5 H: 1 для камери 2

Джерело
📁Split-Screen.unitypackage27.74 KB
Рекомендовані статті
Модульний внутрішній дворик – міцна основа для віртуальних середовищ
Як створити ретро-графіку, схожу на PS1, в Unity
Створення симуляторів польотів в Unity
Створення ефекту фільтра стрічки VHS в Unity
Вибір правильних моделей мечів для вашого проекту Unity
Створення екрану завантаження в Unity
Обов’язкові розширення для вдосконалення дизайну рівнів в Unity