خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه کدنویسی یک کنترلر کاراکتر مبتنی بر فیزیک در Unity3D

با کمک کد فیزیک داخلی Unity، پخش کننده خود را به حرکت درآورید.

یک کنترلر کاراکتر می تواند به شما کمک کند فیزیک حرکتی ساده را در بازی خود پیاده سازی کنید.

شما می توانید از چندین زاویه به کنترل کننده های کاراکتر Unity3D نزدیک شوید. اگر از کتابخانه ای با کلاس ها و توابع قدرتمند استفاده می کنید، ایجاد یک کنترلر شخصیت مبتنی بر فیزیک می تواند مکانی سرگرم کننده برای شروع توسعه بازی شما باشد.

مرحله 1: یک صحنه با اشیاء بازیکن و زمین ایجاد کنید

فضای سه بعدی کنترل کاراکتر وحدت

هنگامی که Unity باز شد و یک پروژه جدید ایجاد کردید، می توانید با اضافه کردن چند شی به صحنه خود شروع کنید. شما می توانید این اشیاء را به هر ترتیبی که دوست دارید ایجاد کنید، اما مراقب باشید که از تنظیمات صحیح استفاده کنید. در حالی که این پروژه ابتدایی است، اما یک راه عالی برای شروع با Unity است.

یک شی هواپیمای سه بعدی برای زمین

اولین چیزی که باید به صحنه خود اضافه کنید یک هواپیما است. در داخل صفحه سلسله مراتبی کلیک راست کرده، ماوس را روی 3D Object ببرید و Plane را از لیست انتخاب کنید. شما می توانید اندازه هواپیما را تنظیم کنید تا یک منطقه آزمایش بزرگتر ارائه دهید، اما نیازی به انجام کار دیگری برای آن ندارید.

یک مدل پخش کننده شیء مکعبی

در مرحله بعد، زمان اضافه کردن یک مکعب به صحنه است تا به عنوان یک مدل بازیکن عمل کند. در داخل صفحه سلسله مراتبی کلیک راست کرده، ماوس را روی 3D Object ببرید و Cube را از منوی کشویی انتخاب کنید. مکعب جدید را طوری قرار دهید که بالای صفحه‌ای که اضافه کرده‌اید قرار گیرد. شما همچنین باید یک جزء صلب را اضافه کنید تا مکعب را به یک شی فیزیک تبدیل کنید.

مکعب را انتخاب کنید و به Inspector بروید. روی Add Component در پایین صفحه کلیک کنید، rigidbody را جستجو کنید و وقتی ظاهر شد Rigidbody را از لیست انتخاب کنید. تیک تیک Use Gravity را بزنید و بقیه تنظیمات را همان طور که هستند رها کنید.

می‌توانید دارایی‌های Unity را به صورت آنلاین پیدا کنید تا پروژه خود را تقویت کنید.

دوربین سوم شخص

صحنه شما باید از قبل دارای دوربینی باشد که بتوانید از آن به عنوان دوربین سوم شخص خود استفاده کنید. دوربین را طوری قرار دهید که در موقعیت سوم شخص راحت بالای مکعب شما قرار گیرد. قبل از کشیدن و رها کردن دوربین روی مکعب به صفحه سلسله مراتب بروید تا یک رابطه والد-فرزند ایجاد کنید. با انجام این کار، دوربین به طور خودکار مکعب شما را دنبال می کند.

مطلب مرتبط:   اسناد به عنوان کد: رویکرد توسعه به مستندات

یک تست سریع

در حالی که صحنه شما هنوز هیچ کدی ندارد، می توانید کارهایی را که تاکنون انجام داده اید آزمایش کنید. روی دکمه Play در بالای صفحه کلیک کنید تا بازی خود بارگیری شود. شما باید ببینید که مکعب می افتد و روی هواپیما فرود می آید، و دوربین باید مکعب را در حین سقوط دنبال کند.

مرحله 2: یک فایل C# تنظیم کنید

اکنون زمان ایجاد یک فایل سی شارپ است تا بتوانید برنامه نویسی را شروع کنید. به بخش Project بروید، کلیک راست کنید، نشانگر را روی Create نگه دارید و Folder را از لیست انتخاب کنید. نام پوشه را Scripts یا چیزی شبیه آن بگذارید.

در پوشه جدید خود حرکت کنید و این فرآیند را تکرار کنید، اما C# Script را از لیست انتخاب کنید. شما می توانید به این فایل هر نامی بدهید، اما این نام تابع اصلی درون آن نیز خواهد بود. مطمئن شوید که سی شارپ جدید شما به این شکل باشد.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

مرحله 3: از سی شارپ برای ایجاد حرکت رو به جلو و عقب با سرعت استفاده کنید

قبل از افزودن به توابع در فایل اسکریپت خود، برخی از متغیرهای عمومی را اعلام کنید. ابتدا یک Rigidbody برای ذخیره مدل پخش کننده است. همچنین یک شناور برای پیگیری سرعت حرکت اعلام کنید. این متغیرها خارج از هر توابعی در کلاس اصلی قرار می گیرند.

public Rigidbody rigidbody;
public float speed;

در مرحله بعد، زمان اضافه کردن یک خط کد به تابع Start است. این از یک اعلان GetComponent برای تخصیص مولفه rigidbody Cube به متغیر rigidbody استفاده می کند.

void Start() {
    rigidbody = GetComponent < Rigidbody > ();
}

اکنون می توانید کدی اضافه کنید که مدل پخش کننده شما را به حرکت درآورد. این کد زیبا و ساده است. شما فقط به دو دستور if نیاز دارید، یکی برای حرکت رو به جلو و دیگری برای حرکت به عقب. می‌توانید از Input.GetKey برای تعیین زمان فشار دادن یک کلید استفاده کنید. در این حالت شما به دنبال فشار دادن کلیدهای W و S هستید.

با فشار دادن هر یک از این کلیدها با استفاده از rigidbody.AddForce، نیرویی به جسم صلب مکعب اضافه می شود. می توانید جهت و سرعت نیروی اضافه شده را با ضرب موقعیت محور Z (transform.forward) در متغیر سرعت محاسبه کنید. هیچ کلاس transform.backward وجود ندارد که بتوانید از آن برای حرکت رو به عقب استفاده کنید، اما این با ضرب transform.forward در -1 قابل دستیابی است.

if (Input.GetKey("w")) {
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

فایل C# را ذخیره کرده و به Unity برگردید. اسکریپت را در پنجره Project پیدا کنید و آن را روی Cube مدل کاراکتر در سلسله مراتب بکشید و رها کنید تا اسکریپت را به آن شی اختصاص دهید. وقتی Cube را انتخاب می کنید، باید اسکریپت را به عنوان یک جزء در پنجره Inspector ببینید. داخل کادر متغیر rigidbody کلیک کرده و rigidbody مکعب خود را انتخاب کنید.

مطلب مرتبط:   12 تک لاینر مفید پایتون که باید بدانید

اکنون می توانید از دکمه Play برای راه اندازی بازی و آزمایش کد خود استفاده کنید. اما صبر کن! مشکلی وجود دارد؛ مکعب شما به جای حرکت مستقیم به جلو، غلت می زند. به بازرس Cube برگردید، جزء Rigidbody را پیدا کنید و قبل از اجرای مجدد بازی، کادرهای Freeze Rotation را در محور X و Z علامت بزنید. حالا باید کار کند.

مرحله 4: از C# برای ایجاد چرخش چپ و راست با گشتاور استفاده کنید

بر خلاف حرکت به عقب و جلو، چرخاندن مدل پخش مکعب شما به نیرویی به نام گشتاور نیاز دارد. برای این کار به متغیر دیگری نیاز دارید: یک شناور عمومی برای تعیین مقدار گشتاور.

public float torque;

کد چرخش چپ و راست در این اسکریپت بسیار شبیه به کدی است که برای حرکت به جلو و عقب نیز استفاده می شود. برای هر جهت یک عبارت if وجود دارد که به دنبال فشار دادن کلید D (چرخش به راست) یا A (چرخش به چپ) است.

اولین مرحله در هر دستور if این است که جهت چرخش را با استفاده از روش Input.GetAxis تعیین کنید و نتیجه را به یک متغیر شناور اختصاص دهید. پس از این، از rigidbody.AddTorque برای اعمال نیروی چرخشی به مدل کاراکتر Cube با ضرب گشتاور، چرخش و محور Z مکعب استفاده کنید.

if (Input.GetKey("d")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

کد خود را ذخیره کرده و به Unity برگردید تا آن را آزمایش کنید. می توانید سرعت و زمان افزایش چرخش مدل پخش کننده خود را با انتخاب مکعب و ویرایش متغیرهای جرم، کشیدن و گشتاور بدنه صلب در اسکریپت خود تنظیم کنید. این پروژه نمونه بر روی 1 جرم، 1 درگ و 2 گشتاور استقرار دارد.

مرحله 5: از سی شارپ برای برنامه نویسی Jumping استفاده کنید

به عنوان عنصر نهایی این کنترلر کاراکتر Unity، زمان آن رسیده است که پرش خود را ایجاد کنید. با توجه به اینکه یک پرش باید ارتفاع محدودی داشته باشد، ایجاد یک پرش نسبت به سایر کنترل‌های اساسی که روی آنها کار کرده‌اید پیچیده‌تر است. با افزودن یک متغیر بولی خصوصی برای پیگیری اینکه آیا بازیکن در حال پریدن است یا خیر، شروع کنید.

private bool isJumping = false;

این متغیر بدون بیانیه ای برای آزمایش آن کاری انجام نمی دهد. در این مورد، یک دستور if اولیه برای بررسی اینکه آیا متغیر نادرست است، کار را انجام می دهد. افزودن همان شرط به سایر حرکات اگر در حین پرش ها حرکت بازیکن را متوقف می کند.

if (!isJumping) {
}

افزودن همان شرط به سایر حرکات اگر در حین پرش ها حرکت بازیکن را متوقف می کند.

if (Input.GetKey("w") && !isJumping) {
    rigidbody.AddForce(transform.forward * speed);
}

در دستور !isJumping if، به دستور if دیگری نیاز دارید، این بار برای بررسی فشار دادن کلید دکمه پرش. تنظیم متغیر isJumping روی true اولین کاری است که باید در این دستور if انجام داد و به دنبال آن یک اعلان rigidbody.angularVelocity برای حذف نیروهای اعمال شده به مکعب انجام می شود.

مطلب مرتبط:   10 ترفند CSS باورنکردنی برای تغییر طرح‌بندی وب شما

اکنون می توانید از اعلان rigidbody.AddForce برای اضافه کردن نیرو به مکعب در محور Z آن استفاده کنید و حرکت پرش به سمت بالا را ایجاد کنید. در نهایت، زمان استفاده از اعلان فراخوانی برای فراخوانی یک تابع دیگر پس از 0.8 ثانیه است.

if (!isJumping) {
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

این تابع متغیر isJumping را به false برمی‌گرداند تا حرکت/پرش یک بار دیگر امکان‌پذیر باشد، و تاخیر 0.8 ثانیه‌ای از شروع خیلی زود آن جلوگیری می‌کند.

void Move_Setter() {
    isJumping = false;
}

مرحله 6: کد کنترل کاراکتر خود را تست کنید

فایل خود را ذخیره کنید و دوباره به Unity بروید تا کدی که نوشته اید را آزمایش کنید. مانند بسیاری از کامپایلرها، Unity اطلاعاتی در مورد خطاها و سایر مسائل مربوط به کد شما ارائه می دهد تا راحت تر ببینید چه چیزی ممکن است نیاز به تغییر داشته باشید. می توانید کد کامل این پروژه را در صفحه GitHub ما مشاهده کنید.

ایجاد کنترل کننده های کاراکتر Unity

هنگام ایجاد یک کنترلر کاراکتر در Unity، می توانید از بین روش های مختلفی انتخاب کنید. استفاده از فیزیک یک گزینه است، اما در صورت تمایل می توانید از سیستم کنترل کاراکتر داخلی نیز استفاده کنید.

کاوش گزینه های مختلف مانند این یک راه عالی برای یادگیری ابزارهایی مانند Unity است.