امتیاز موضوع:
  • 6 رأی - میانگین امتیازات: 4.67
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
کلمات کلیدی
برنامه نویسی و راهکارهایی در یونیتی

برنامه نویسی و راهکارهایی در یونیتی
#11
این مباحث رو یاد بگیرید و تمام کنید بعدش پ.خ کنید مشکلات خودتون رو و اینجا نپرسید چون اینجا باید اشاره کنم به منابع دیگه و راهکارهای کاربردی
آموزش استفاده از مدل مرغ ریگ شده ی قبل در unity :
resim
http://cordinc.com/blender/tutorials/mec...index.html
لینک شیلتر نیست اگه بود بگید آپ کنم یه جا دیگه. مرغ رو دانلود کنید(توی قسمت قبل لینک دانلود مدل انیمیت شده مرغ در بلندر رو گذاشتم) و طبق اموزش جلو برید و مشکلات رو پ.خ کنید سادستwink
با استفاده از همین ایده می تونید اولین بازی سه بعدی خودتون رو برای عظیمت از game maker به unity بسازید.
اسکریپت js برای دکمه ی x و z و چرخش 20 درجه منفی و مثبت به چپ و راست حول محور UP(همون محور Y) بسازید و این کد رو بریزید توش و بدید به مدل مرغ که گفتم دانلود کنید :
کد php:
//char controller simple.js
function Update () {

  if (
Input.GetKey (KeyCode.Z)) {

    
transform.RotateAround (Vector3.zeroVector3.up20 Time.deltaTime);

  } else if (
Input.GetKey (KeyCode.X)) {

    
transform.RotateAround (Vector3.zeroVector3.up, -20 Time.deltaTime)

  }


کد بالا هیچی نداره .
تابع RotateAround سه پارامتر می گیره و الگوش اینه:
کد php:
RotateAround(pointVector3axisVector3anglefloat): void
point : نقطه ی چرخش که اگه Vector3.zero باشه به معنی نقطه ی مرکزی صفر ( دقیقا وسط ابجکت) حساب می شه.
دومین پارامتر axis یا بردار یا محور چرخش مدل هست که محور y هست و با دستور Vector3.up تنظیمش کردیم.
سومی هم زاویه چرخش هست.

(KeyCode.Z) فشردن کلید Z رو بررسی می کنه و (KeyCode.X) فشردن کلید X رو . اگه روی صفحه کلید نگاه کنید می بینید Z سمت چپ X هست .پس X باید باعث چرخش به راست و Z باعث چرخش به چپ بشه(یعنی حول محور Y) که توی کد فوق باید به وضوح ببینید.
البته در کد فوق احتمالا با کلید Z مرغ به راست می چرخه و با X به چپ که خودتون می تونید توی اسکریپت -20 رو با +20 در قسمت دلخواه تغییر بدید.

اگه یه نفر هم موفق بشه و نمونه کارشو بعد از این اموزش ها بذاره من ایده های دیگه و راهکارهای دیگه و ترفندهای زیادی یاتون میدم که مطمئن باشید با استفاده از همین چیزا می تونید بازی های خوبی بسازید که در حین گرافیک کم ایده های جالبی میشه ساخت wink
ساخت یک بازی پینگ پونک دو بعدی در یونیتی
resim
این اموزش رو بخونید و جاهایی که سوال دارید پ.خ کنید:
http://noobtuts.com/unity/2d-pong-game
ایده :
مدل یک خرس را یا بسازید یا دانلود کرده و سپس ریگ کنید و در unity به همراه نوار سلامت طراحی کنید.
resim
راهنما: http://noobtuts.com/unity/

سوال نپرسید بلکه بسازید و نمونه کار رو بذارید

ساخت بازی آرکانوید در یونیتی از نمای دو بعدی دوربین

resim
راهنما:http://noobtuts.com/unity/2d-arkanoid-game
سوال نپرسید و افرادی که ساختن نمونه سورس رو بذارن تا مشکلات رو بهشون بگمwink
راهنمای ساخت بازی جاروکش مین:
resim
وب پیج راهنما: http://noobtuts.com/unity/2d-minesweeper-game
افرادی که ساختن نمونه رو بهم پ.خ کنن.
به زودی منتظر آموزش های پیشرفته و پیشرفت پرومیکرز و بچه هاش به شرطی که ببینم چقدر پیشرفت داشتید تا بازم راهکار بدمwink
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#12
ایده طراحی محیط :
ابتدا نقشه دو بعدی از نمای بالا توی فتوشاپ یا ... بکشید و سپس بندازید روی plane (به صورت تکستچر) در یونیتی و سپس مدل ها رو بندازید روش.
معمولا نقشه های google رو با استفاده از city engine و روش های ترکیبی مثل همین روشی که یاد دادم میشه استفاده کرد برای ساخت محیط های مهندسی شده در بازی ها teeth
resim
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#13
سعی کنید از طبیعت الهام بگیرید و روش های جدید رو بیاموزید.
مثال : به این تصویر shading بر حسب تکنیک های فیزیک در یونیتی 5 نگاهی بیندازید :
resim
و همینطور این:
resim

در یونیتی 5 می تونید با ادغام PBS و Enlighten GI نورهای خود را در تمام صحنه به سرعت ایجاد کنید.

البته من خودم هنوز از یونیتی 4.5 استفاده می کنم چون ورژن 5 هنوز در حال آزمایش خطایابی beta هست.

به تحته ها نگاه کنید. برچستگی ها رو می بینید؟ چیز خاصی نیستن. با نرمال مپ و کمی zbrush ترکیب شدن. نرمال مپ هم چیزی نیست و اموزش هاش توی انجمن هست.
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#14
ساخت پیانو
resim
یک cube ایجاد کنید.

انتخابش کنید و یک audio source بهش نسبت بدید(component->audio-audio source)

یک فایل mp3 شامل اکتاو پیانو از اینجا دانلود و به پروژه اضافه کنید :
https://www.freesound.org/people/pinkyfi...acks/4409/

سپس cube رو از hierarchy بکشید و توی projects رها کنید تا یک prefab ازش ساخته بشه.

فایل mp3 رو از توی projects بکشید روی prefab رها کنید.

سپس cube رو از hierarchy حذف کنید.

یک اسکریپت سیشارپ به نام pianoScript ایجاد کنید با این کد:
کد php:
//pianoScript.cs
using UnityEngine;
using System.Collections;

public class 
pianoScript MonoBehaviour {
    
// Use this for initialization

    
        
public float semitone_offset=0;        
        

        
void Start(){
        }
        
void Update(){
        }
        
    
void OnMouseDown () {
        
PlayNote ();
    }
    
void PlayNote(){
    
        
audio.pitch=Mathf.Pow(2f,semitone_offset/12.0f);
        
audio.Play ();
    }

    } 
این اسکریپت رو بندازید روی prefab ایجاد شده .
حالا prefab رو بندازید توی صحنه یا hierarchy و سه تا کپی بگیرید و طوری بچینید توی صحنه که دوربین بتونه اونو خوب ببینه.
یک نور مستقیم هم به صحنه اضافه کنید(رنگ نور رو سبز دادم که مهم نیست)

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

روی هر دکمه که کلیک کنید صدای خودشو میده.

سوالی بود پ.خwink
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#15
سلام

خیلی خوبه سجاد جان،کاربردی و مفید،ادامه بدهcool
شما فکر کنم فعالترین عضو هستین

موفق باشیدsmiley
[align=left][url=http://tootsiah.ir/][img]http://tootsiah.ir/wp-content/uploads/2015/03/Berry_Logo.png[/img][/url][/align]
[color=#A9A9A9][align=left][color=#696969]هر آموزش که دنبالشی[/color][/align][/color]
[align=left][b][ [color=#9400D3][url=http://promakers.ir/showthread.php?tid=408]لوکیشن مافیا UDK[/url][/color] ]
[ [color=#9400D3][url=http://promakers.ir/showthread.php?tid=638&pid=5537#pid5537]ماشین سمند UDK[/url][/color]][/b][/align]
پاسخ
#16
استاد AliScan نظرت واسم خیلی با ارزش بود و خیلی خوشحال شدم و روحیه دادی بهم. خدارو شکر هنوز می تونم فرد مفیدی برای انجمن پرومیکرز باشم. همیشه تلاشم این بوده که از زیر سنگم شده چیزای جدید پیدا کنم و بذارم واسه انجمن. به امید روزی که همه ی بچه ها هرچند به میزان ذره ای به آرزوهاشون نزدیک بشن و لذت ببرن از چیزای تازه و کاربردی.smiley التماس دعاwink
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#17
نکته: بعضی وقتا در فضای و بعدی ممکنه رویداد onMouseDown درست عمل نکنه و برای رفع این اشکال شما کافیه کدتون رو برای خطایابی در محیط 3d به جای 2d تست کنید.wink
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#18
نکته : اگر با خطایی مثل این مواجه شدید بدونید که اسم کلاس و اسم اسکریپت شما نباید همچین اسمی باشه و rename اش کنید چون اسم انتخابی شما جزو namespace هست یا به عبارت دیگه در فضای نام(حافظه ی توکار یونیتی برای ذخیره بعضی از سرنام ها) از قبل تعریف شده و شما مجاز نیستید به استفاده دوباره از این اسم در بعضی جاها.
کد:
The namespace `global::' already contains a definition for "یه اسم که واسه کلاستون گذاشتید"
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#19
تکنیک متحرک سازی اسپرایت های برش خورده ی دو بعدی بر حسب زمان :
resim

یک پروژه با نوع 2D ایجاد کنید.(موقع ایجاد type رو بذارید روی 2D)

و یک اسپرایت (عکس) PNG رو با فتوشاپ طراحی کردیم که 4 تا فریم برای راه رفتن کاراکتر دو بعدی از نمای بالا هست.
اگه بلد نیستید اینو دانلود کنید :

http://cdn3.raywenderlich.com/wp-content...zombie.png
resim

این png رو بکشید توی کادر پروژه.
من با paint این png رو باز کردم و با ctrl+E بهتون نشون دادم ابعاد این png رو :

resim

می بینید پهنای عکس ما 628 و ارتفاعش 102 پیکسل هست.

از اونجا که 4 تا فریم داریم پس اگه بخوایم توی یونیتی این تکه ها رو برش بزنیم باید 628 رو تقسیم به 4 کنیم که میشه 157

پس هر فریم باید ارتفاعش 102 (ارتفاع تغییر نکرد) و عرضش 157 باشه و الان می گم چطوری توی یونیتی باید این کار رو انجام بدیم.smiley

اسپرایت رو از داخل کادر پروژه انتخاب کنید.

می بینید یه آیتم برای ویرایش در اختیارتون قرار می گیره . روی sprite Editor در پنجره ی خصوصیات (inspector)کلیک کنید تا به پنجره ی ویرایش بریمwink

توی کادر Sprite Editor روی گزینه ی slice بزنید(slice به معنی برش هست)

Type روی Automatic هست و لولا(pivot) روی مرکز(center) . اگه روی دکمه Slice بزنید خودکار ایتم هایی که بینشون فاصله خالی هست رو پیدا و برش می زنه و اندیس گذاری می کنه(شروع از 0 هست)

منتها ما چون می خوایم اندازه رو دقیق بدیم Type رو بذارید روی Grid و pixel Size رو برای x و y همون 157 و 102 رو بدید.
من توی عکس نشون دادم:
http://s5.picofile.com/file/8153253668/s...editor.jpg
resim

بعد از برش زدن، پنجره sprite editor رو ببندید و Apply کنید.smiley

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

یه کپی از اون رو بکشید بندازید توی صحنه یا hierarchy(کادر اجزای صحنه/مرحله یا level هر چی دوست دارید بگید)

یه اسکریپت سیشارپ بسازید و اسمشو بذارید script1 و بازش کنید.

قبل از تابع Start متغیرها رو به این صورت تعریف کنید :

کد php:
    public Sprite[] sprites;
    private 
SpriteRenderer spriteRenderer;
    public 
float framesPerSecond

سپس باید نوع رندر کننده رو روی SpriteRenderer تنظیم کنیم. برای اینکار در تابع Start (که جکم رویداد create گیم میکر رو داره)این کد رو میذاریم:

کد php:
spriteRenderer renderer as SpriteRenderer

در تابع Update هم این کد رو بذارید :
کد php:
        int index = (int)(Time.timeSinceLevelLoad framesPerSecond);
        
index index sprites.Length;
        
spriteRenderer.sprite spritesindex ]; 
کد بالا سخت نیست ولی چون بعضیا گیج میشن توضیح میدم.
می دونید تابع upate لحظه به لحظه قراره اجرا بشه و باید بین فریم ها سوئیچ کنیم و این عمل رو تکرار کنیم.
ولی این کار ممکنه خیلی سریع باشه پس برای اینکه یه تاخیر یا delay ایجاد بشه یه فرمول کلی در آوردیم.
دستور Time.timeSinceLevelLoad هم یه دستور تعریف شده ی یونیتی هست که هر تغییری که ایجاد میشه آخرین زمان رو میده و هی داره عددش زیاد میشه و یه اعدد اعشاری از نوع float هست که حالا زیاد مهم نیست روش بحث کنیم(ما فقط قسمت صحیح رو جدا می کنیم با دستور int )
sprites.Length طول یا تعداد فریم ها رو میده که 4 تا هست ولی ما 6 تاش می کنیم که بعدا می گم واسه چی. شما هم از الان فرض کنید 4 تا هست.

علامت درصد برای محاسبه ی باقیمانده ی تقسیم متغیر index به sprite.Length بکار می ره(علامت درصد % دستوری از خانواده ی زبان C هست که برای محاسبه ی باقیمانده حاصل از تقسیم بکار می ره)

توی تقسیم فوق index مطمئن باشید عدد صحیح میشه و از 0 شروع میشه و بعدش 1 و ... و آخرش همون sprites.Length میشه و بازم از 0 تکرار میشه و تو خط بعدی یعنی
کد:
        spriteRenderer.sprite = sprites[ index ];
باعث میشه فریم set بشه روی رندر کننده ی اسپرایت.

حالا توضیح میدم چرا باید Length رو 6 تا فرض کنیم.
ما باید اندیس اسپرایت رو طوری تغییر بدیم که یه جوری به نظر بیاد که طرف فکر کنه داره راه میره. برای اینکار ابتدا باید فریم ترتیب تکرار رو در بخش design به تکنیک دلخواه تعریف کنیم. مثلا ابتدا فریم 0و1و2و3 رو اجرا و سپس فریم 2و 1 رو اجرا می کنیم و وقتی تموم شد بعد از 1 خودش طبعا باید بره روی فریم 0 و از اول. اگه یکم فکر کنید می بنید در حقیقت یه جور از اول به آخر رفتن و سپس یه جوری از آخر به اول اومدن هست و یه جور تکرار که انگار کاراکتر داره راه میره.

برای اینکار اسپرایت زامبی رو در صحنه ( hierarchy) انتخاب کنید . توی کادر inspector خصوصیت Sprites رو در زیرشاخه ی اسکریپت اضافه شده می بینید.

گزینه ی Size رو بذارید روی 6 تا 6 تا فریم که قبلا توضیح دادم ایجاد بشه (Eemen0 تا Element5)

سپس برش های 0 تا 4 رو روی Elemen0 تا Element4 بکشید رها کنید و همینطور برش 2 رو روی Element4 و برش 1 رو روی Element5 بکشید و رها کنید.
http://s5.picofile.com/file/8153261400/length.jpg
resim

تمام. پروژه رو اجرا کنید می بینید که اسپرایت دو بعدی شما خیلی زیبا راه میره و در جا میزنه.

گرچه هنوز کدنویسی راه رفتنش مونده که اونم یادتون خواهم داد ولی شما تا این مرحله یاد گرفتید یک اسپرایت رو مثل گیم میکر اما در unity متجرک سازی کنید.

خصوصیت Projection دوربین اصلی رو از حالت پرسپکتیو (perspective) سه بعدی بذارید روی ارتوگرافیک دو بعدی.

بعدش دوربین رو در ناحیه ای جابجا کنید که کاراکتر رو خوب نشون بده. ضمنا یک عکس هم می تونید به عنوان پس زمینه به پروژه اضافه کنید و تو صحنه پشت اسپرایت بذارید. با اینم اگه مشکل دارید توی کادر صحنه(scene) گزینه ای به اسم 2d هست که باهاش بین حالت سه بعدی و دو بعدی میشه سوئیچ کرد واسه جابجایی و راحت کاری.(مباحث دیگه ای مثل لایه ها هست که جزو این درس نیست اونا رو هم گام به گام بعدا یادتون میدم)

یادم رفت بگم سرعت حرکت حرکت بین فریم ها رو باید توی اسکریپت مقدار بدید. برای اینکار متغیر FramsePerSeconds رو تعریف کردیم که توی کادر inspector می تونید عدد 10 رو بهش بدید که یک سرعت نرمال و نسبتا خوبی هست که اگه تغییرش بدید نتیجه رو خواهید دید.
هر چی بیشتر باشه سرعت زیاد تر میشه و اگه کم بشه سرعت راه رفتن کم تر میشه. شما می تونید از این پارامتر ، برای تغییر سرعت راه رفتن و ایجاد حالت دویدن یا آرام راه رفتن استفاده کنید و خیلی کارای دیگهteeth
یادم رفت منبع رو بگم :
http://www.raywenderlich.com/61532/

ولی توضیحات رو خلاصه کردم و خیلی چیزا رو خودم توضیح دادم.

با اینکه تشکر کم بود ولی ادامه میدم. اگه سوالی بود پ.خ کنید.wink

حرکت کاراکتر و چرخش دقیق به سمت جایی که کلیک کردیم :
resim

این اسکریپت رو کپی کنید به جای کل اسکریپتی که برای انیمیشن کردن gif مون ساختیم :
کد php:
using UnityEngine;
using System.Collections;
    public class 
script1 MonoBehaviour {
    public 
Sprite[] sprites;
    public 
float framesPerSecond;
    public 
float moveSpeed;
    private 
Vector3 moveDirection;
    private 
SpriteRenderer spriteRenderer;
    public 
float turnSpeed;
    
// Use this for initialization
    
void Start () {

        
spriteRenderer renderer as SpriteRenderer;
        
moveDirection Vector3.right;
    }
    
    
// Update is called once per frame
    
void Update () {



        
int index = (int)(Time.timeSinceLevelLoad framesPerSecond);
        
index index sprites.Length;
        
spriteRenderer.sprite spritesindex ];

        
// 1
        
Vector3 currentPosition transform.position;
        
// 2
        
if(Input.GetMouseButtonDown(0)) {
            
// 3
            
Vector3 moveToward Camera.main.ScreenToWorldPointInput.mousePosition );
            
// 4
            
moveDirection moveToward currentPosition;
            
moveDirection.0
            
moveDirection.Normalize();
        
        }

        
        
Vector3 target moveDirection moveSpeed currentPosition;
        
transform.position Vector3.LerpcurrentPositiontargetTime.deltaTime );


        
float targetAngle Mathf.Atan2(moveDirection.ymoveDirection.x) * Mathf.Rad2Deg;
        
transform.rotation 
            
Quaternion.Slerptransform.rotation
                             
Quaternion.Euler00targetAngle ), 
                             
turnSpeed Time.deltaTime );
    }


با اسکریپت فوق هر جا کلیک کنید کاراکتر خیلی دقیق چرخش می کنه و در جهت نقطه ای میره کلیک کردیم.teeth
اجرا بگیرید و تشکر یادتون نره. اسکریپت ها رو خودم ترو تمیز می کنم ویلا روی هم کردن کمی وقت می بره و من راحت کردم کار شما رو.wink
https://telegram.me/gameoverblog

من به سرچشمه خورشید نه خود بردم راه/ذره ای بودم و مهر تو مرا بالا برد
من خسی بی سرو پایم که به سیل افتادم/او که می رفت مرا هم به دل دریا برد


پاسخ
#20
یه سوال فنی داشتم
برای قسمت دوبعدی یونیتی
سی شارپ قوی تره یا جاوا
در حال یادگیری...
پاسخ




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