درود مهمان گرامی! ثبت نام

آموزش ساخت بازی در #C آموزش UDK آموزش مدل سازی در Maya
آموزش ساخت بازی در VB آموزش Unity - پروژه محور آموزش مدل سازی با 3Ds Max
آموزش برنامه نویسی اندروید آموزش Unity - ساخت منو آموزش متحرک سازی در 3Ds Max
آموزش ساخت بازی حدس تصویر آموزش Unity - متحرک سازی مجموعه آموزش های ساخت بازی
● آموزش های رایگان ● تبلیغات دیجیتال هوشمند ● استخدام در فرادرس

امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش گام به گام ساخت بازی های دو بعدی در یونیتی
#1
«اعوذ با... من الشیطان الرجیم»
«بسم ا... الرحمن الرحیم»

-
به خاطر درخواست زیاد دوستان و همچنین برای پیشرفت خودم تصمیم دارم متون کاربردی برای بازیسازی دو بعدی در یونیتی رو ترجمه کنم.امیدوارم به اذن خداوند،موفق بشم تا خدمتی ناچیز به همه ی دوستان اینترنتی خودم کرده باشم و امیدوارم شما هم تلاش کنید و نمونه بازی های دو بعدی خودتون رو توی پرومیکرز به نمایش بگذارید تا تشویقی بشه برای پیشرفت همه ی بچه های ایران و ... .
-
resim
منبع:بعد از ترجمه اعلام می کنم انشاءا...

مرحله ی 1:
یک پرژه جدید new کنید:
resim
5 تا پوشه animations و prefabs و scenes و scripts و spite-sheets ایجاد کنید برای نظم بیشتر.

مرحله ی 2 :
این برگه ی اسپرایت (sprite sheet) رو دانلود کنید و دو پوشه ی sprite-sheet ایجاد شده در کادر پروژه اضافه کنید(با ماوس بگیرید و توش رها کنید):
http://s6.picofile.com/file/8187809426/k..._sheet.png
resim
اولین باری که فایل برگه ی اسپرایت رو در پوشه ی sprite-sheet کپی کردید اگه روش کلیک کنید خصوصیاتی در پنجره ی inspector نمایان میشه:
resim
بعضی از این خصوصیات رو بق نیاز باید تغییر بدیم.

‘Sprite Mode’ رو بذارید روی ‘Multiple’ (دلیلش اینه که اسپرایت ما شامل انیمیشن یا چند فریم هست):
resim
نکته:
اگه sprite mode پیدا نشد باید قبلش اسپرایت رو انتخاب کنیم سپس texture type روی sprite بذاریم:
resim

نکته :
اگه پروژه شما سه بعدی بود باید روی حالت دو بعدی تنظیم کنید.
برای این منظور مسیر Edit > Project Settings >Editor رو طی کنید و Mode پیشفرض رو روی 2d بذارید.

حالا به ویاریشگر اسپرایت (sprite editor) می ریم :
resim
پاسخ
 سپاس شده توسط Mehrdad ، Xaniar ، Microsoft2 ، TNT ، shakala ، Indie-Man ، spark ، Shervin Akh ، fakhtigamer ، aminblog76 ، GM1998.Factory ، Amirns ، shervin_akh ، mqt ، game10000 ، Anti ، H.P ، AMIN9213 ، SinatoR ، Ali-reza8448 ، mdc ، Alilolo ، matin710 ، asajadi84 ، hamedzal
#2
مرحله ی 3: برش یا slice اسپرایت :
روی slice در sprite editor کلیک کنید :
resim
اگه حالت اتواتیک/Automatic رو بذارید خودش خودکار برش می زنه و اگه حالت grid بزنید می تونید خودتون برش بزنید.(grid به معنی سیم هست)
resim
گزینه ی pivot به معنی لولا هست.مثل گیم میکر اونجا می تونستید center کنید که لولا روی مرکز اسپرایت باشه.
resim
اینجا هم می تونید bottom و left و right و top right و top left و ... بدید که pivot تنظیم بشه.
معمولا خودم روی center میذارم.
resim

وقتی از تنظیمات راضی شدید ‘Apply’ کنید.

نکته : معمولا اسپرایت ها رو بهتره خودتون توسط ابزارهایی مثل Flash یا Texture Packer پک کنید توی یک تکستچر و بینشون سعی کنید فاصله مناسب بذارید که یونیتی بتونه خوب شاسایی کنه اونا رو.
ابزار texture packer رو می تونید اینجا مورد تحقیق قرار بدید :
resim
https://www.codeandweb.com/texturepacker

بعد از apply کردن می بینید اسپرایت توی پنل Project تیکه تیکه میشه به قسمت های دلخواه :
resim

استقبال کنید تا مرحله ی 4 رو بگم
پاسخ
 سپاس شده توسط Microsoft2 ، TNT ، Xaniar ، Indie-Man ، spark ، Shervin Akh ، fakhtigamer ، qwerty13 ، Amirns ، game10000 ، a3eman ، H.P ، AMIN9213 ، Ali-reza8448 ، Ali360 ، loosari ، Fear ، asajadi84 ، hamedzal ، MOHAMAD ALI ، amir hesam
#3
چشم انشاءا... از الان تا پاسی از شب رو بیدار می مونم و ادامه شو ترجمه خواهم کرد.به خاطر استقبال شما ممنونم.
مرحله ی 4 : ایجاد انیمیشن از برش های Sprite Sheet :
اجازه بدید تا Idle animation (انیمیشن حالت عادی) رو با فریم های 0 تا 9 ایجاد کنیم. فریم های دلخواه رو انتخاب کرده و drag کنید به scene.(یعنی بگیرید با ماوس و توی صحنه رها کنید.scene همون صحنه یا مرحله ی ما هست.
resim
پس از این کار پیامی برای ذخیره ی نام انیمیشن دریافت خواهید کرد. می تونید اسم انیمیشن رو برای ذخیره وارد کرده و تایید کنید.(پسوند این فایل ، .anim خواهد بود)
resim

انیمیشن های دیگه رو به ترتیب زیر نام گذاری و فریم گذاری کنید :

idle = frames 0 to 9
walk = frames 10 to 20
hadooken = frames 21 to 31
crouch = frames 32 to 37
jump = frames 38 to 48

پس از عملیات فوق 5 انیمیشن در پوشه ی project > animation خواهیم داشت. معنیشون فکر کنم این میشه :
idle = ایستادن
walk = دویدون
hadooken = پرتاب نیرو با دست
crouch = خم شدن
jump = پریدن
پاسخ
 سپاس شده توسط Microsoft2 ، Indie-Man ، Xaniar ، TNT ، spark ، fakhtigamer ، Amirns ، game10000 ، soheil18 ، a3eman ، H.P ، Ali-reza8448 ، Fear ، ali.j.amd
#4
اسپرایت دیگه هم میشه این فقط واسه اموزش اولیه هست.
ادامه:
-----

اگر دقت کنید می بینید که unity، کنترلر های لازم رو در پوشه ی مربوط به هر انیمیشن ایجاد می کنه.
در صورتی که بخواید می تونید کنترل های اضافی رو به دلخواه حذف کنید.
زمانیکه ما یک ‘Master Animation Controller’ برای کاراکتر Ken ایجاد می کنیم فایل های انیمیشن دار(مطابق شکل زیر) رو حذف نکنید.
resim
resim
شما باید همه ی انیمیشن ها رو همچنین در صحنه اضافه کنید. وقتی که اجرا می گیرد همه ی انیمیشن ها رو یکبار می بینید.همه ی انیمیشن ها رو از صحنه حذف کنید.
پاسخ
 سپاس شده توسط Xaniar ، Indie-Man ، spark ، Microsoft2 ، TNT ، fakhtigamer ، qwerty13 ، Amirns ، game10000 ، H.P ، Fear ، Alilolo ، hamedzal
#5
دارم ترجمه می کنم چشم.به خاطر استقبال ممنون.
پارامترهای size و filed of view(میدان دید) و projecttion(حالت ارتوگرافیک=دوبعدی و حالت پرسپکتیو=سه بعدی) و near(نزدیکی دوربین) رو هم می تونید تنظیم کنید که دوربین اسپرایت رو از نزدیک تر بگیره.
resim
در ادامه به اذن پروردگار مهربان و عزیز ، تنظیم انیمیشن ها و سوئیچ بینشون رو یاد خواهم داد انشاءا... .
resim
ایجاد کامپوننت player:

یک گیم آبجکت empty ایجاد کنید که برای player استفاده خواهیم کرد.( ‘GameObject > Create Empty’)
نامش را Player بگذارید.
یک کامپوننت Sprite Renderer بدان بیفزایید.
player را در hierarchy انتخاب کرده و روی دکمه ‘Add Component’ کلیک کنید.
resim
حالا باید به این sprite renderer بگید که کدوم اسپرایت رو قراره استفاده کنیم.(فقط یک اسپرایت)teeth
در مثال ما از یکی از اسپرایت های Idle animation استفاده می کنیم.
ما دو روش داریم.
اسپرایت رو از پنل project به پنل Component بکشیم.
resim
روش دیگه اینه که روی دایره کوچیک کنار پارامتر sprite کلیک کنیم و اپرایت دلخواه رو از لیست انتخاب کنیم:
resim
حالا شما یک اسپرایت رو به player اتچ (attach) کردید و در صحنه قابل نمایش هست.
افزودن انیمیشن به player:
ابجکت Player برای مدیریت انییشن های بازیکن نیاز به یک Animator component(کاپوننت انیماتور) داره.
در پنل insector از Player می تونید روی دکمه ی ‘Add Component’ کلیک کنید و اونو اضافه کنید.(هم می تونید مسیر ‘Miscellaneous > Animator’. رو طی کنید هم می تونید تایپ کنید animator تا بیاد بعدش از توی لیست انتخابش کنید)
کامپوننت انیماتور نیاز به یک کنترلر داره که توی پارامتر ‘Controller’ به عنوان وردی باید بهش معرفی کنید.
این پارامتر به انیماتور می گه کدوم انیمیشن باید اجرا بشه.
اجازه بدید بریم تا انیمیشن خودمون رو ایجاد کنیم.

ایجاد یک Animation Controller اصلی :
برای کنترل انیمیشن های مختلف Unity3D دارای قابلیتی به نام Animation Controller است.(بهش ماشین حالت یا state manager یا state machine هم گفته شده)
ما می تونیم در پنجره ی انیماتور انیمیشین ها رو با ماوس بگیریم و رها کنیم و اونا رو مدیریت کنیم و با استفاده از متغیرهایی که ایجاد می کنیم و بررسی مقدارشون و شرط هایی که میذاریم تعیین می کنیم که کدوم انیمیشن باید play بشه و کدوم stop .
resim
معمولا وقتی انیمیشن هارو همونطوری که قبلا دیدیم ایجاد کردیم یونیتی خودش کنترلرهایی رو برای هر انیمیشن در پوشه ی مربوط در کادر پروژه ایجاد می کنه که اگه نیاز بهشون نباشه حذفشون می کردیم.

تنظیم انیمیشن ها در پنجره ی Animator:
انیمیشن ها رو بگیرید توی پنجره ی انیماتور رها کنید :
resim
resim

تنظیم انیمیشن پیشفرض یا default animation :
این انیمیشن به طور پیشفرض و در حالت عادی(idle) اجرا خواهد شد. در اینجا ما انیمیشن Idle رو به عنوان انیمیشن Default در نظر می گیریم.
در پنجره ی Animator انیمیشن ها رو اضافه کنید سپس روی انیمیشن idle راست کلیک کرده و ‘Set As Default’ رو بزنید تا انیمیشن پیشفرض بشه.(رنگ انیمیشن پیشفرض نارنجی خواهد شد)

سپس بای transition یا ارتباط بین انیمیشن ها رو ایجاد کنید.
همه کار با رات کلیک انجام میشه.روی هر کدم که می خواید راست کلیک کرده و ‘Make Transition’ رو انتخاب کنید.

از انیمیشن idle به انیمیشن walk و بلعکس فلش(جهت) ایجاد کنید(تا بتونیم از هرکدوم به دیگری سوئیچ کنیم):

resim

باقی ارتباطات رو طبق شکل زیر ایجاد نمایید :
resim

سعی کنید در ایجاد ارتباط های خود اندیشه کنید.
پاسخ
 سپاس شده توسط Microsoft2 ، Indie-Man ، Shervin Akh ، spark ، fakhtigamer ، craft ، qwerty13 ، Amirns ، game10000 ، H.P ، Ali-reza8448 ، hamedzal ، ali.j.amd
#6
تعریف پارامترها و متغیرهای شرطی برای سوئیچ بین انیمیشن ها و تغییر وضعیف در پنجره ی انیماتور:
برای ایجاد متغیرهای دلخواه در قسمت ‘Parameters’ روی نماد '+' کلیک کرده و یک متغیر از نوع ‘Int’ با نام ‘state’ ایجاد کنید.
resim

تنظیم transition conditions یا شرط سوئیچ بین انیمیشن ها:
حالا به انیماتور باید بگیم که بر حسب مقدار تغیر ‘state’ چه کاری انجام بده.در اصطلاح می گیم انیماتور داره گوش یا listen می کنه به state.
(این فراید یا پروسه یکم خسته کننده هست و نیاز به مقدار کمی زمان برای بررسی دقیق reaol-Time داره تا ببینیم همه چی درست داره انجام میشه یا خیر)
قبل از هرچیز بذارید مقدار مربوط به سوئیچ برای هر انیمیشن رو به طور دلخواه در نظر بگیریم :

ken_idle = 0
ken_walk = 1
ken_crouch = 2
ken_jump = 3
ken_hadooken = 4

سپس باید روی خطوط transition(انتقال) در پنجره ی Animator کلیک کنیم(فلش های ارتباطی سفید رنگ) و خصوصیت state خودمون رو تنظیم کنیم.(در اصطلاح می گیم map کنیم)

روی خط انتقال از حالت ken_idle به ken_walk کلیک کنید(وقتی انتخاب بشه رنگش آبی میشه)

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

resim

** نکته : بعضی اوقات محتوای این سربرگ با انتخاب transision ها درست نمایش داده نمی شه.چنانچه ‘conditions’(شرط ها) رو خوب نمی بینید پنل رو reSize یا بزرگ کنید.

در سربرگ فرعی ‘Conditions’ شرط ها رو تعریف می کنیم. مثلا می گیم مقدار متغیر state برابر(equal) با فلان اگه بود کاری انجام بشه یا اگه مقدارش بیشتر یا کمتر از ... بود فلان کار رو کنه و الی آخر... .

شرط ها رو مثل عکس زیر ایجاد کنید :
resim

مقادیر کلیدی شرطی ما به این صورت خواهند بود :
ken_idle to ken_walk when state equals 1
ken_idle to ken_crouch when state equals 2
ken_idle to ken_jump when state equals 3
ken_idle to ken_hadooken when state equals 4

ken_walk to ken_idle when state equals 0
ken_walk to ken_crouch when state equals 2
ken_walk to ken_jump when state equals 3

ken_crouch to ken_idle when state equals 0
ken_jump to ken_idle when state equals 0
ken_hadooken to ken_idle when Exit Time
Exit Time به معنی اینه که وقتی انیمیشن به پایان رسید به حالت عادی یا idle بره.

یعنی اگه توی حالت فلان بود و متغیر state مقدارش دستکاری شد برو به فلان حالت.

سوئیچ بین انیمیشن ها در زمان اجرا:

از اونجایی که یونیتی خیلی عالی هست به ما این اجازه رو میده که به صورت real-time بدون نیاز به ورودی keyboard بین مقادیر متغیر state تجدید نظر کنیم.(جلوتر روی آن بحث خواهیم کرد)

به سادگی بازی رو اجرا کرده و در پنجره ی Animator پارامتر ها رو به هر مقداری که می خواید تغییر داده و شاهد نتیجه باشید.
resim

برای ادامه استقبال کنید لطفا.با فشردن دکمه ی تشکر
پاسخ
 سپاس شده توسط Xaniar ، spark ، Microsoft2 ، Indie-Man ، fakhtigamer ، qwerty13 ، agame ، raamz110 ، game10000 ، a3eman ، H.P ، Ahoora Gh ، Ali-reza8448 ، rezasg78 ، hamedzal ، MOHAMAD ALI ، saeed3ds ، ali.j.amd
#7
بخش آخر: سوئیچ بین انیمیشن ها از طریق فشردن کلیدهای کیبورد
resim
در بخش های قبلی یادگرفتیم انیمیشن های دو بعدی player رو با استفاده از sprite و sprite editor ایجاد کنیم و همینور کنترلر انیمیشن و سازماندهی انیمیشن ها در پنجره ی Animator و همچنین تنظیم شرط یا Condition ها و پارامترهای انیمیشن رو.
حالا سعی می کنیم با کدنویسی این بخش رو به پایان ببریم.در این بخش قصد داریم کدهای لازم برای بکار گیری کیبورد جهت سوئیچ بین انیمیشن های مختلف رو تمرین کنیم.

نکته ی مهم :
قبل از ادامه ، انیمیشن crouch رو از پنجره ی Project انتخاب کنید و چک باکس Loop Time رو در کادر خصوصیات inspector غیر فعال کنید(این کار از تکرار انیمیشن جلوگیری می کنه). اینکار باعث میشه کاراکتر ken از حالت crouching (خیزان) و ادامه ی حالت standing up (ایستاده) Stop کنه.
در پنجره ی Animator یک transition جدید از انیمیشن های ken_crouch به ken_walk با شرط ‘state Equals 1′ ایجاد کنید.

افزودن پس زمینه یا Background Graphic به صحنه :

در پنجره ی Project از پوشه ی spritesheets ، تکستچر ken-sprite-sheet را باز کنید و 'ken-sprite-sheet_49' رو که یک background graphic هست انتخاب کنید و با ماوس بگیرید و Drag کنید توی صحنه.سپس توی صحنه انتخابش کنید و خصوصیت Order in layer رو بذارید روی منفی یک(-1) تا زیر لایه های دیگه قرار بگیره.(order در اینجا همون مفهوم depth یا عمق در گیم میکر رو داره) در یونیتی هر چی عمق یک تکستچر کمتر باشه در لایه ی زیرتر قرار می گیره . پس عمق پس زمینه باید کتر از بقیه باشه.
position رو روی 0, 0, 0 تنظیم کنید.
کلا تصویر بک گراند رو طوری تنظیم کنید که دقیقا جلوی دوربین و پشت اسپرایت های دیگه باشه و دوربین صحنه رو کامل نمایش بده.

سپس screen resolution رو روی 16:9 تنظیم کنید(در سربرگ game و از لیست پایین رونده):
resim
این رزولوشن فقط یه مثال بود و روی گوشی های مختلف باید تنظیم نزدیک تر رو انجام بدید.
resim

ایجاد C# Script برای player:
یک اسکریپت سیشارپ(با راست کلیک در کادر پروژه) ایجاد کنید و اونو به PlayerController تغییر نام بدید.
کد زیر رو Copy Paste کنید داحل اسکریپت و ذخیره کنید:
کد php:
//PlayerController.Cs
using UnityEngine;
using System.Collections;
 
public class 
PlayerController MonoBehaviour {
 
    public 
float walkSpeed 1// player left right walk speed
    
private bool _isGrounded true// is player on the ground?
 
    
Animator animator;
 
    
//some flags to check when certain animations are playing
    
bool _isPlaying_crouch false;
    
bool _isPlaying_walk false;
    
bool _isPlaying_hadooken false;
 
    
//animation states - the values in the animator conditions
    
const int STATE_IDLE 0;
    const 
int STATE_WALK 1;
    const 
int STATE_CROUCH 2;
    const 
int STATE_JUMP 3;
    const 
int STATE_HADOOKEN 4;
 
    
string _currentDirection "left";
    
int _currentAnimationState STATE_IDLE;
 
    
// Use this for initialization
    
void Start()
    {
        
//define the animator attached to the player
        
animator this.GetComponent<Animator>();
    }
 
    
// FixedUpdate is used insead of Update to better handle the physics based jump
    
void FixedUpdate()
    {
        
//Check for keyboard input
        
if (Input.GetKeyDown (KeyCode.Space))
        {
            
changeState (STATE_HADOOKEN);
        }
        else if (
Input.GetKey ("up") && !_isPlaying_hadooken && !_isPlaying_crouch)
        {
            if(
_isGrounded)
            {
                
_isGrounded false;
               
//simple jump code using unity physics
               
rigidbody2D.AddForce(new Vector2(0250));
                
changeState(STATE_JUMP);
            }
        }
        else if (
Input.GetKey ("down"))
        {
            
changeState(STATE_CROUCH);
        }
        else if (
Input.GetKey ("right") && !_isPlaying_hadooken )
        {
            
changeDirection ("right");
            
transform.Translate(Vector3.left walkSpeed Time.deltaTime);
 
            if(
_isGrounded)
            
changeState(STATE_WALK);
 
        }
        else if (
Input.GetKey ("left") && !_isPlaying_hadooken)
        {
            
changeDirection ("left");
            
transform.Translate(Vector3.left walkSpeed Time.deltaTime);
 
            if(
_isGrounded)
            
changeState(STATE_WALK);
 
        }
        else
        {
            if(
_isGrounded)
            
changeState(STATE_IDLE);
        }
 
        
//check if crouch animation is playing
        
if (animator.GetCurrentAnimatorStateInfo(0).IsName("ken_crouch"))
            
_isPlaying_crouch true;
        else
            
_isPlaying_crouch false;
 
        
//check if hadooken animation is playing
        
if (animator.GetCurrentAnimatorStateInfo(0).IsName("ken_hadooken"))
            
_isPlaying_hadooken true;
        else
            
_isPlaying_hadooken false;
 
        
//check if strafe animation is playing
        
if (animator.GetCurrentAnimatorStateInfo(0).IsName("ken_walk"))
            
_isPlaying_walk true;
        else
            
_isPlaying_walk false;
 
    }
 
    
//--------------------------------------
    // Change the players animation state
    //--------------------------------------
    
void changeState(int state){
 
        if (
_currentAnimationState == state)
        return;
 
        switch (
state) {
 
        case 
STATE_WALK:
            
animator.SetInteger ("state"STATE_WALK);
            break;
 
        case 
STATE_CROUCH:
            
animator.SetInteger ("state"STATE_CROUCH);
            break;
 
        case 
STATE_JUMP:
            
animator.SetInteger ("state"STATE_JUMP);
            break;
 
        case 
STATE_IDLE:
            
animator.SetInteger ("state"STATE_IDLE);
            break;
 
        case 
STATE_HADOOKEN:
            
animator.SetInteger ("state"STATE_HADOOKEN);
            break;
 
        }
 
        
_currentAnimationState state;
    }
 
    
//--------------------------------------
    // Check if player has collided with the floor
    //--------------------------------------
     
void OnCollisionEnter2D(Collision2D coll)
     {
         if (
coll.gameObject.name == "Floor")
         {
             
_isGrounded true;
             
changeState(STATE_IDLE);
 
         }
 
     }
 
     
//--------------------------------------
     // Flip player sprite for left/right walking
     //--------------------------------------
     
void changeDirection(string direction)
     {
 
         if (
_currentDirection != direction)
         {
             if (
direction == "right")
             {
             
transform.Rotate (01800);
             
_currentDirection "right";
             }
             else if (
direction == "left")
             {
             
transform.Rotate (0, -1800);
             
_currentDirection "left";
             }
         }
 
     }
 

یک ابجکت empty به نام ‘Floor’ برای زمین ایجاد کنید و یک کالیدر دو بعدی از مسیر Physics2D > Box Collider 2D بهش بدید تا player روی اون بتونه بایسته.

افزودن RigidBody2D و Collider به Player:
یک فیزیک دو بعدی به کاراکتر player بدید.(از مسیر Physics2D > Rigid Body 2D ).
بقیه تنظیمات رو به حالت پیشفرض بذارید باشه.
اگه همه چیز رو درست تنظیم کرده باشید باید از نتیجه ی کار خودتون خوشتون بیاد.(گاهی هم به علت برخی زا اشتباهات ممکنه دچار خطاهایی بشید که به error ختم میشن)

کلیدهایی که کدنویسی کردیم عبارتند از :
Up = Jump
Left/Right = Walk
Down = Crouch
Space Bar = Hadoooooooken
resim

نکته ی مهم : در آموزشی که دادیم ممکن است چار مشکلاتی شوید که نتوانید آن را حل کنید.سعی کنید در اون مورد بحث و پرس و جو کنید.
-
پایان
پاسخ
 سپاس شده توسط Xaniar ، spark ، Microsoft2 ، Indie-Man ، fakhtigamer ، H.P ، Ali-reza8448 ، rezasg78 ، MOHAMAD ALI
#8
آموزش سه بعدی گذاشتن برای بازی های ساده مشکلی نیست.اما برای ساخت بازی های خوب مشکل اصلی انیمیشن و مبحث Rigging(استخوان های انیمیشن داری که هر مدلی رو بتونیم سوارش کنیم)هست. Rigging با دست کار بسیار مشکلی هست و بسیار اذیت کننده و خسته کننده هست.به همین دلیل فعلا اون بخش اولویت نداره و ممکنه بعا بی انگیزه بشید.پس تا یه چیزی رو خوب تمرین نکردید و مسلط نشدید سراغ هدف دیگه ای نرید.
راستی یه نکته:کیا آموزش رو انجام دادن؟ به خطا برنخوردید؟ من خودم هنوز یه مشکلی دارم : وقتی RigigdBody میدم کاراکتر میره هوا teeth
جلوگیری از به هوا رفتن کاراکتر با غیر فعال کردن گزینه ی Apply Root Motion در کامپوننت Animator از Player:
اگر دیدید کاراکتر به هوا میره پارامتر Apply Root Motion رو برای کامپوننت Animator غیر فعال کنید.
resim
پاسخ
 سپاس شده توسط Xaniar ، Indie-Man ، fakhtigamer ، qwerty13 ، GM1998.Factory ، Microsoft2 ، H.P ، hamedzal ، AMIN9213
#9
راستی Texture Packer کرکش کمیابه و گشتم نبود.
ولی ساختم هست.
خودم براش کرک ساختم اگه کسی خواست پ.خ بده چون اینجا نمی تونم بذارم.wink

ضمنا به جای texture packer خیلی ساده توی فتوشاپ می تونید عکس ها رو توی یک تصویر بدون پس زمینه(transparent) بذارید.
-
ضمنا این شیوه ی انیمیشن سازی که با اسپرایت های رندر شده کار کردیم دیگه توصیه نمیشه. در سیستم جدید اسپرایت ها با اجزای جدا در فتوشاپ ساخته و سپس در یونیتی انیمیت می کنیم.سوالی بود در بخش پرسش.wink
-----------
همچنین در مورد انیمیشن:
در سیستم جدید انیمیشن ها رو با خود یونیتی می سازیم و اسم میدیم.
اسپرایت ها هم همه میاد توی صحنه(دست+پا+سر+بدن+ران+زانو+بازو+ساعد) بعدش همش رو می ذاریم زیر یک گیم ابجکت empty به اسم مثلا Player . حالا این player رو از منوی window->animation انیمیت می کنیم و انیمیشن های دویدن،پریدن،بالا آوردن تفنگ یا شمشیر زدن رو اجرا می کنیم)
بعد از ایجاد انیمیشن ها اونا رو با اسم دلخواه ذخیره می کنیم بعدشم یک animator controller در کادر پروژه با راست کلیک و create->animator controller ایجاد و سپس یک animator component با زدن دکمه add component در inspector میدیم به player و animator controller رو به animator component ربط می دیم و سپس player رو انتخاب می کنیم و انیمیشن ها رو در کادر animator controller شرط گذاری می کنیم که اگه فلان متغیر مقدارش مثلا 1 شد انیمیشن پرش و اگه 2 شد انیمیشن دویدن و بعد از پایان بدون شرط بره به مثلا به حالت انیمیشن عادی(idle) .
برای تغیرر انیمیشن ها هم player رو انتخاب کرده و در کادر animation انیمیشن ها میاد که با انتخاب اسم هر انیمیشن میتونیم ویرایش کنیم position و rotation و بقیه خصوصیات رو. و خود یونیتی یه چیز استاندارد و هوشمندی هست که خیلی جلوتون می اندازه.
به هر حال بازم می گم تا عملا درگیر این مباحث نشید و هی این شاخه اون شاخه کنید زیاد یاد نمی گیرید.
-
مثلا الان یونیتی کار زیاد داریم توی یونیتی خودش تخصص های زیادی می خواد یکی متخصص انیمیشن /یکی برنامه نویس/یکی متخصص رندر و نور پردازی و الی آخر....
--
اگه میخواید یاد بگیرید تخصصی بشینید مثلا همین انیمیشن رو تمرین کنید و از روی فیلم ها نیگا کنید سعی کنید انیمیشن های طبیعی دو بعدی رو در بیارید بعدش ملحق بشید به تیم و گروهی کار کنید.wink
پاسخ
 سپاس شده توسط Fear
#10
سوال:
میخواستم بگم من میخوام حرفه ای با یونیتی کار کنم ...
یکمی سیشارپ بلدم و یکمم با ادیتور یونیتی ور رفتم ولی خیلی مبتدی
میخواستم ببینم باید چه کار کرد تا سطحمون بره بالا و اینا ؟
مثلا از پس ایده هامون بربیایم و بتونیم الگوریتم بازیمونو پیاده کنیم ؟
در ضمن من هدفم بازیهای دوبعدی هست smiley
ممنون میشم راهنماییم کنید

پاسخ:
برای یاد گیری یک بازی دو بعدی ساده رو شروع کن به ساختن. بعدش از خودت سوال بپرس. گیم پلی چطوری هست. منو.ی بازی چطوی باید باشه. پلتفرم چیه؟(اندروید/پی سی/آی او اس/....)
توصیه می کنم شروع کنی به ساخت یه بازی ساده برای پی سی و اول یه کاراکتر اماده از نت بگیر و ببر تو فتوشاپ دست و پا و غیره رو جدا کن و اجزاشو جدا از هم توی یک فایل png با پس زمینه ی transparent بذار. بعدش ببر توی یونیتی و نوع اسپرایت رو بذار روی multi و apply کن و sprite editor رو باز و auromatic slice کن تا اجزا جدا بشه.بعدش apply و پنجره و ببند.
سپس تمام اجزا رو زیر شاخه ی یک گیم ابجکت empty به نام player کن و سپس انتخابش کن براش انیمیشن بساز(window->animation)
انیمیشن هایی به نام run و jump و idle رو ایجاد کن.
یک animator component بده به پلیر.
یک animator controller از طریق راست کلیک توی کادر پروژه ایجاد کن و بازش کن و انیمیشن ها رو بهش اضافه کن و در قسمت پارامتر متغیر تعریف کن و سپس با راست کلیک و make transition بین انیمیشن ها ارتباط ایجاد کن و سپس روی هر ارتباط کلیک کرده و در قسمت condition در inspector شرط انتقال از حالت اول به دوم رو انتخاب کن(مثلا متغیری که ایجاد کرده بودی رو انتخاب کن و شرط مساوی Equals رو انتخاب کن و مقداری بده که بگی اگه این متغیر از توی کدی که بعدا می نویسیم مساوی این مقدار شد سوئیچ بین انیمیشن اول و دوم انجام بگیره)

سپس یک اسکریپت بساز و بده به player.
داخل این اسکریپت :
تعریف کن :
کد php:
xScale transform.localScale.x;
yScale transform.localScale.y

شرط بذار که اگه فلش چپ زدیم متغیر تعریف شده در انیمیاتور مثلا 1 بشه.(حالت انیمیشن راه فتن) و رو کردن به چپ:
کد php:
    transform .localScale = new Vector2 (-xScale,yScale);//face left 

شرط بذار که اگه فلش راست زدیم متغیر تعریف شده در انیمیاتور مثلا 1 بشه.(حالت انیمیشن راه فتن) و رو کردن به راست :
کد php:
transform .localScale = new Vector2 (xScale,yScale);//face right 
شرط بذار اگه کلیدی زده نشد(!Input.anyKey) متغیر تعریف شده در انیمیاتور مثلا 0 بشه. (حالت idle)

به طور کلی شروطی مثل زیر تعریف کن:
کد php:
        if(grounded && !Input.anyKey)//if we are on ground and no key pressed
        
{
            
anim.SetInteger("state",1);//play idle animation
            
rb2d.velocity = new Vector2 (0,0);//stop(x,y)
        
}
        if (
Input.GetKey (KeyCode.LeftArrow))//if Left
        
{
            
anim.SetInteger("state",2);//play Run animation
            
rb2d.velocity = new Vector2 (-speed ,rb2d.velocity.y);//move left
            
transform .localScale = new Vector2 (-xScale,yScale);//face left        
        
}
        if (
Input.GetKey (KeyCode.RightArrow))//if Right            
        
{            
            
anim.SetInteger("state",2);//play Run animation
            
rb2d.velocity = new Vector2 (speed ,rb2d.velocity.y);//move right
            
transform .localScale = new Vector2 (xScale,yScale);//face right
        

خوب راه رو پیدا می کنی و یه روز خوب میاد انشاءا... .
شروع و تحقیق کن و بپرس.
سوال:
ای بابا پس به یکی دیگه بگم؟ چرا بهم گیم میکر یاد نمی دی.من یونیتی واسم سخته وسط مدرسه ها و امتحانا هم موقع یادگیری نیست
پاسخ:
اولا اینکه یونیتی از گیم میکر هم آسونتره. وقتی یادش بگیری می فهمی چقدر بدبختی های توی گیم میکر+سایر گیم انجین هایی دیگه رو دیگه نداری. smiley
پاسخ
 سپاس شده توسط uBloo ، Ali-reza8448v2


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ساخت انیمیشن در یونیتی start777 1 59 20/7/1397، 09:40 صبح
آخرین ارسال: Clever Wise
  آموزش Splash و لوگو بازی به روش CW_System Clever Wise 0 48 11/7/1397، 12:31 عصر
آخرین ارسال: Clever Wise
  آموزش ساخت بازی شوتر اول شخص با هوش مصنوعی سرباز Clever Wise 1 138 6/7/1397، 10:13 عصر
آخرین ارسال: Clever Wise
  آموزش ساخت بازی پارکینگ Clever Wise 0 35 6/7/1397، 05:42 عصر
آخرین ارسال: Clever Wise
  آموزش ساخت هوش مصنوعی در یونیتی قسمت 1 taha_mct 6 3,768 22/6/1397، 10:43 صبح
آخرین ارسال: qwerty13



کاربرانِ درحال بازدید از این موضوع: 1 مهمان