Unity Slider

۴- تغییر سرعت و رنگ یک موضوع با سلایدر

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

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

در این پروژه یه چیز جدیدی که اضافه میشه استفاده از سلایدره که در مراحل زیر توضیح میدم. برای اینکه سلایدر خیلی هم ساده نباشه یه تصویر به پروژه اضافه کردم که برای تمرین می‌تونید ازش استفاده کنید.

۱- اول مدل فن رو از پوشه‌ی Assets > Models بندازید داخل قسمت Hierarchy  بعد دوربین اصلی صحنه رو جوری تنظیم کنید که فن رو کامل نشون بده

۲- در قسمت Hierarchy کلیک راست رو بزنید و از دسته‌بندی UI روی Slider کلیک کنید تا یه سلایدر ساخته بشه

۳- برید داخل گیم آبجکت Canvas در پنجره‌ی Hierarchy و اسم Slider رو به SpeedSlider تغییر بدید. این سلایدر قراره سرعت مدل فن رو کنترل کنه

۴- بعد اینکه اسمش رو تغییر دادید داخلش گیم آبجکت Fill Area رو باز کنید و روی Fill کلیک کنید و در قسمت Inspector رنگ گزینه‌ی Color رو سیاه کنید

۵- حالا Handle Slide Area رو باز کنید و روی Handle کلیک کنید و بعد از قسمت Assets > Models > Slider تصویر slider-button بگیرید و بندازید داخل Source Image در پنجره‌ی Inspector

۶- تا اینجا یه سلایدر ساخته شد حالا روی اسم سلایدر در Canvas کلیک کنید و از طریق گزینه‌های PosX و PosY در قسمت Inspector یه جای دلخواه براش مشخص کنید

۷- سلایدر SpeedSlider رو انتخاب کنید و ازش سه تای دیگه کپی کنید با همون کنترل سی کنترل وی

۸- اسم سه تای بعدی رو به ColorGreen, ColorBlue و ColorRed تغییر بدید

۹- داخل این سه سلایدر گیم آبجکت Handle رو انتخاب کنید و رنگ گزینه Color رو در پنجره‌ی Inspector به رنگ‌های قرمز و سبز و آبی تغییر بدید

Sliders

۱۰- یه فایل سکریپت بسازید و یه اسم دلخواه بهش بدید که من گذاشتم SpeedControlSlider

۱۱- روش دابل کلیک کنید تا داخل ویژوال استودیو باز بشه

۱۲- اول متغیرهای زیر رو بهش اضافه کنید

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

public class SpeedControlSlider : MonoBehaviour
{
    public float speedControl = 1.0f;
    public float red;
    public float green;
    public float blue;
    Renderer myFan;

از متغیر اول برای کنترل سرعت چرخش استفاده می‌کنیم که دسترسیش از نوع public ﻪ. در مورد انواع دسترسی هم در نوشته‌های قبلی توضیح دادم. اینکه از نوع اعشاری یا float ﻪ هم به این علته که چون بعدن می‌خوایم داخل متد Rotate ازش استفاده کنیم و این متد تنها اعداد اعشاری رو به عنوان پارامتر قبول می‌کنه.

خط ۸، ۹ و ۱۰ هم متغیرهای کنترل کننده‌ی رنگ‌های قرمز و سبز و آبی هستن. چون مقدارشون بین صفر و یک تنظیم میشه باید اعشاری باشن مثلا مقدار صفر برای قرمز، صفر برای سبز ولی یک برای آبی رنگ کامل آبی تولید می‌کنه و یا مقدار صفر برای آبی، مقدار ۰.۵ برای سبز و قرمز رنگ زرد تولید می‌کنه.

متغیر خط ۱۱ رو هم در نوشته اول توضیح دادم و برای تغییر رنگ متریال متصل به مدل فن ازش استفاده می‌کنیم.

۱۳- کدهای زیر رو بعد از متدهای Start و Update اضافه کنید

void Start()
{

}

void Update()
{

}

public void speedSlider(float sliderSpeed)
{
    speedControl = sliderSpeed;
}

public void redSlider(float newRed)
{
    red = newRed;
    UpdateColor();
}

public void greenSlider(float newGreen)
{
    green = newGreen;
    UpdateColor();
}

public void blueSlider(float newBlue)
{
    blue = newBlue;
    UpdateColor();
}

public void UpdateColor()
{
    myFan.material.color = new Color(red, green, blue);
}

اینجا ما پنج متد جدید تعریف کردیم که چهارتای اول قراره به سلایدرهای ما وصل بشه و پنجمی تنها کارش اینه مقداری که از سلایدرها گرفته رو بعنوان رنگ جدید ببره و رنگ متریال مدل فن رو باهاش تغییر بده. اگه دقت کنید داخل پرانتزهای متد اول تا چهارم یه چیزی اضافه شده که در متدهایی که در نوشته‌های قبلی ازشون استفاده کردیم نبود البته در این لینک توضیح دادم. اینها که هر چهارتاشون از نوع عدد اعشاری هستند بهشون پارامتر متد می‌گن. کارشون اینه که مقداری رو وارد متد کنن مثلا اینجا پارامتر float sliderSpeed در متد اول مقداری که در سلایدر اول تنظیم کردیم رو می‌گیره و میریزه داخل متغیر speedControl که اول کار برای کنترل سرعت و جهت چرخش تعریف کردیم. سه تای دیگه مثل float newRed مقدار سلایدر قرمز رو که بین صفر و یکه رو می‌گیره و میریزه داخل متغیر red که اول کار برای تعیین میزان قرمز تعریف کردیم، بقیه هم به همین ترتیب.

یه سوال اینکه چرا متد UpdateColor رو داخل چهار متد اول قرار دادیم؟ علتش اینه که وقتی داریم سلایدر رو چپ و راست می‌کنیم در لحظه مقدار رنگی اون سلایدر برای متریال تغییر کنه یعنی رنگ رو آپدیت کنه.

۱۴- خطهای زیر رو به متدهای Start و Update اضافه کنید

    void Start()
    {
        myFan = GetComponent<Renderer>();
        myFan.material.color = new Color(red, green, blue);
    }
    
    void Update()
    {
        transform.Rotate(0f, 0f, speedControl * Time.deltaTime);
    }

در مورد خط ۱۴ در نوشته‌های اول و دوم قبلا توضیح دادم که خلاصه‌ش میشه اینکه به چیزهایی در کامپوننت رندرر اشاره می‌کنه که یکیش متریاله. حالا کدوم کامپوننت؟ کامپوننت مدلی که سکریپت بهش وصله. در خط بعدی می‌گیم که در کامپوننت رندرری که در خط قبلی بهش اشاره کردیم برو رنگ متریال اون رو با این رنگ جدید تغییر بده. این رنگ جدید چیزی نیست جز عددهای پیشفرض داخل سلایدرها که صفره. چرا این دو خط رو گذاشتیم داخل متد Start برای اینکه اول شروع بازی رنگ مدل با مقدارهای پیشفرض سلایدرها تنظیم بشه اگه نه می‌بینید که اول شروع بازی رنگ مدل سفیده و همین که یه سلایدر رو تغییر میدید رنگ مدل یهویی تغییر می‌کنه. سه مقدار داخلش باید اعداد اعشاری باشه که به جای اونها متغیرهای اعشاری که اول کار تعریف کردیم رو گذاشتیم که اونها هم خودشون مقدارهاشون رو از سلایدرها می‌گیرند. چطوری؟ با متدهایی که برای هر کدوم تعریف کردیم.

در زیر الگوی کلی متد Color رو یه نگاهی بندازید. سه تای اول برای رنگ‌های قرمز، سبز و آبی ﻪ و آخری مربوط به alpha ست که میزان شفافیت رنگ رو کنترل می‌کنه که مقدار یک یعنی رنگ کاملن ماته و صفر کاملن شفافه

public Color(float r, float g, float b, float a); 

خط داخل متد Update رو هم در نوشته‌ی قبلی کامل توضیح دادم.

۱۵- فایل رو ذخیره کنید و برگردید یونیتی

۱۶- مدل Fan رو انتخاب کنید و سکریپت رو بندازید زیر آخرین کامپوننت در پنجره‌ی Inspector

۱۷- مرحله آخر وصل کردن سلایدرها به متدهای مربوط به خودشونه. سلایدر اول رو که اسمش SpeedSlider رو انتخاب کنید و در پنجره Inspector روی علامت + در قسمت On Value Changed کلیک کنید و مدل فن رو از پنجره‌ی Hierarchy بندازید در قسمتی که نوشته‌ی None (Object) داره. حالا مثل تصویر زیر سلایدر رو به متد مربوط به خودش وصلش کنید.

Slider functions

۱۸- این کار رو برای بقیه سلایدرها هم تکرار کنید

حالا اگه دکمه‌ی Play رو بزنید می‌بینید که سلایدر سرعت چرخش درست کار نمی‌کنه. علتش اینه که مقدار حداقل و حداکثر سلایدرها موقع ساخت بین صفر و یکه. پس سلایدر SpeedSlider رو انتخاب کنید و در پنجره‌ی Inspector مقدارهای Min Value و Max Value رو به ترتیب ۵۰۰- و ۵۰۰ بزارید. با مقدار حداقل منفی می‌تونید جهت چرخش رو عوض کنید.

اگه سوالی داشتید پایین بپرسید.

۲ دیدگاه

    • یه پکیجی بود به اسم Bolt که الان جزئی از یونیتی شده به اسم ویژوال سکریپتینگ که حالت گرافیکی داره و کار کردن باهاش ساده‌ست مخصوصن برای کسایی که ترجیح میدن به جای تایپ کردن کدهاشون رو گرافیکی ببین.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *