برنامج تعليمي متعدد اللاعبين على نفس الشاشة المنقسمة على جهاز الكمبيوتر من أجل Unity

في هذا البرنامج التعليمي، سأوضح كيفية إنشاء شاشة مقسمة multiplayer في 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" (ستلاحظ أنه سيضيف مكونين إضافيين، Rigidbody وCapsule Collider)
  • قم بتعديل مصادم الكبسولة حتى يتطابق مع أبعاد المكعب.

فيما يلي خطوات إنشاء شاشة مقسمة للاعبين:

  • قم بتكرار الكائن "Player 1" وأعد تسميته إلى "Player 2".
  • في RigidbodyPlayerController، قم بتغيير عناصر تحكم المشغل إلى "Arrows".

  • تغيير قيم Viewport Rectible لـ "Player 1" الكاميرا إلى X: 0 Y: 0.5 W: 1 H: 0.5

  • تغيير قيم Viewport Rectible لـ "Player 2" الكاميرا إلى 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