«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
یونیتی+unity3d+uity2d+پکیج :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

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

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

۷۲۶ مطلب با موضوع «یونیتی+unity3d+uity2d+پکیج» ثبت شده است

منبع:gameover.blog.ir
گزینه ی interactable رو غیر فعال کنید.(البته قبلش دستگیره یا handle رو حذف کنید)
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ دی ۹۴ ، ۰۳:۳۲
مدیرکل

منبع:gameover.blog.ir

public Sprite spr1;
GetComponent<Image>().sprite =spr1;
۱ نظر موافقین ۰ مخالفین ۰ ۱۲ دی ۹۴ ، ۱۹:۴۵
مدیرکل

منبع:gameover.blog.ir

http://poopinmymouth.com/process/tips/dirt.jpg

توضیح:

اغلب اوقات ما یک مدل رو می سازیم و یادمون میره بهش جزئیات بدیم.

به سادگی می تونید با استفاده از عکس هایی که با گوشی می گیرید یا عکس های موجود و کمی فتوشاپ پیاز داغشو زیاد کنید.

سوالی بود از نحوه ی uv map یا غیره بپرسید.

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ دی ۹۴ ، ۲۰:۲۶
مدیرکل
منبع:gameover.blog.ir
bool forward = true;
         private Animator anim;
         
         void Start ()
         {
             anim = GetComponent<Animator>();
     
         }
         
         void Update ()
         {
             if (Input.GetMouseButtonDown (0)) {
                 if (forward){
     
                     anim.Play("firstAnimation");
     
                 } else {
     
                     anim.Play("secondAnimation_R");
     
                 }
                 forward = !forward;
             }
         }

http://answers.unity3d.com/storage/temp/26159-screen+shot1.png


روش دو:
gameObject1.animation["اسم انمیشن"].speed = -1;
 gameObject1.animation["اسم انیمیشن"].time = gameObject1.animation["اسم انیمیشن"].length;
 gameObject1.animation.Play("اسم انیمیشن");

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ دی ۹۴ ، ۱۰:۱۲
مدیرکل

منبع:gameover.blog.ir

داده های نوع static همیشه آخرین مقداری رو که بهشون می دیم تو کل برنامه یا تو کل بازی حفظ می کنن و دیگه صفر نمیشه مگه اینکه خودمون مقدارشو صفر  یا تغییر بدیم.


اگر یک متغیر final (نهایی) یک مرجع به یک ابجکت را نگه دارد،آنگاه وضعیت آبجکت ممکن است بوسیله ی عملیاتی روی ابجکت تغییر کند،اما متغیر همیشه به همان ابجکت رجوع می کند.این همچنین با آرایه ها بکار می رود.زیرا آرایه ها اشیا هستند.

اگر یک متغیر final یک رجوع به یک آرایه داشته باشد،آنگاه اجزای آرایه ممکن است است به وسیله ی عملیات روی آرایه تغییر کنند.،اما متغیر همیشه به همان آرایه مراجعه خواهد کرد.


کلاس های final :

یک کلاس نهایی، نمی تواند subclass شود.این حالت باعث ایجاد امنیت و مزایای موثری می شود.بنابراین تعدادی از کلاس های استانارد Java نهایی(final) هستند.مثل java.lang.System و java.lang.String . همه ی متدها در کلاس فاینال، final ضمنی هستند.

مثال :

public final class MyFinalClass {...}
public class ThisIsWrong extends MyFinalClass {...} // forbidden


sub class های محود اغلب به کلاس های "soft final" نامیده می شوند.

متدهای final:

یک method فاینال نمی تواند به وسیله ی sub class ها ovveride یا hidden شود.این به دلیل جلوگیری از رفتار غیر منتظره ی یک subclass (یا کلاس فرزند) برای تغییر متدی بکار می رود که ممکن است برای function یا استکام کلاس حیاتی باشد.

مثال:

public class Base
{
    public       void m1() {...}
    public final void m2() {...}

    public static       void m3() {...}
    public static final void m4() {...}
}

public class Derived extends Base
{
    public void m1() {...}  // Ok, overriding Base#m1()
    public void m2() {...}  // forbidden

    public static void m3() {...}  // OK, hiding Base#m3()
    public static void m4() {...}  // forbidden
}
یک تصور غلط عمومی این است که تعریف یک کلاس یا متد به عنوان کلاس final با اجازه به کامپایلر بهره وری را افزایش می دهد تا به طور مستقیم متد را در جاییکه فراخوانی یا call می شود درج کند.(اینجا رو بخونید: https://en.wikipedia.org/wiki/Inline_expansion) اما از آنجا که متد در لحظه ی اجرا لود می شود، کامپایلر ها قادر به اجرای این نیستند. فقط محیط اجرایی و کامپایلر JIT جی آی تی (https://en.wikipedia.org/wiki/Just-in-time_compilation) دقیقا می داند کدام کلاس لود شده است و فقط آنها می توانند در مورد زمان inline بودن تصمیم بگیرند خواه متد ،نهایی(final) باشد یا نباشد.

کامپایلرهای کد ماشین،که مستقیما کد اجرایی را تولید می کنند(platform-specific machine code) یک استثنا هستند. موقع استفاده از static linking (توضیحات بیشتر https://en.wikipedia.org/wiki/Static_linking ) کامپایلر می تواند به طور امن فرض کند که متدها و متغیرها در زمان کامپایل می توانند inline شوند.

Final variables:
یک متغیر فاینال از طریق یک initializer یا یک عبارت اختصاصی می تواند یکبار فراخوانی شود .نیاز نیست که در لحظه ی تعریف ، initialize شود: این یک متغیر "blank final" نامیده میشود. یک متغیر blank final instance از کلاس باید قطعا در هر constructor (سازنده)(یک کلاس همنام کلاس در خود کلاس) در جاییکه تعریف می شود اختصاص بیابد . در غیر اینصورت یک خطای زمان کامپایل در هر دو حالت رخ می دهد.(نکته: اگر متغیر یک رفرنس باشد این به این معنی است که متغیر نمی تواند بار دیگر به رفرنس ابجکت دیگری محدود شود.اما شی ای که آن رجوع می کند هنوز تغییر پذیر یا mutable است اگر هنوز به طور اصلی قابل تغییر باشد: https://en.wikipedia.org/wiki/Mutable_object)

بر خلاف مقدار یک constant(ثابت) ،مقدار متغیر نهایی (final) نیاز نیست در زمان کامپایل شناخته شود . این شیوه ی خوبی برای نمایش ثابت های final با حروف تمام بزرگ(uppercase) می باشد(به همراه خط زیر یا underline برای جداسازی کلمات)

مثال:
public class Sphere {

    // pi is a universal constant, about as constant as anything can be.
    public static final double PI = 3.141592653589793;

    public final double radius;
    public final double xPos;
    public final double yPos;
    public final double zPos;

    Sphere(double x, double y, double z, double r) {
         radius = r;
         xPos = x;
         yPos = y;
         zPos = z;
    }

    [...]
}
هر تلاشی برای اختصاص مجدد شعاع، xPos،yPos، یا zPos منجر به یک خطای کامپایلری خواهد شد.در واقع حتی اگر constructor(سازنده ی کلاس) یک متغیر نهایی را تنظیم نکند تلاش برای تنظیم آن در خارج از سازنده ی کلاس منجر به خطای کامپایلری می شود.

برای آنکه نشان دهیم finality تغییر ناپذیری را تضمین نمی کند:فرض کنید که ما سه متغیر موقعیت را با یکی نشان دهیم:
public final Position pos;
که pos شامل pos.x و pos.y و pos.z هست. pos نمی تونه اخصاص داده بشه اما سه خصوصیت اون می تونن مقداردهی بشن مگر اینکه اونا خودشون نهایی باشن.مثل تغییرناپذیری کامل( https://en.wikipedia.org/wiki/Immutability) استفاده از مزایای زیادی داره مخصوصا در بهینه سازی(optimization) . برای نمونه، Sphere احتمالا یک حجم بازگشتی (function returning its volume) خواهد داشت. اگه بدونیم شعاع ثابت هست به ما اجازه می ده تا حجم محاسبه شده رو در حافظه ذخیره کنیم. اگر ما Spheres های نسبتا کمی داشته باشیم و ما اغلب حجم آنها را نیاز داریم افزایش عملکرد ممکن است قابل توجه باشد. ساخت یک Sphere final به توسعه دهندگان و کامپایلرها اطلاع می دهد که انواع بهینه سازی در تمام کدی که از Sphere ها استفاده می کنند ممکن است. هر چند به نظر میرسد که اصل final نقض شده است عبارت زیر قانونی است :
for (final SomeObject obj : someList) {
   // do something with obj
}
از آنجا که متغیر obj با هر بار تکرار در حلقه از حوزه خارج می شود واقعا با هر تکرار مجددا تعریف می شود.
ترجمه:sajjad3011
مطالعه ی بیشتر:

https://en.wikipedia.org/wiki/Final_%28Java%29#cite_note-2
اینم یه منبع فارسی دیگه:
http://www.tahlildadeh.com/ArticleDetails/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-java-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-%D8%AC%D8%A7%D9%88%D8%A7

نکته بعدی: متغیرهای static متغیرهایی هستن که آخرین مقداری رو که بهشون می دیم همیشه حفظ می کنن.

۱ نظر موافقین ۰ مخالفین ۰ ۱۱ دی ۹۴ ، ۰۱:۰۹
مدیرکل

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

من فایل adad-client-3.2.jar سایت عدد که واسه تبلیغات برای یونیتی نوشته بودن رو بیرون ریختم.
اما باید کمک بدید ببینیم ازش چیزی می تونیم سر در بیاریم یا نه.

این سورسی که از فایل jar کشیدم بیرون واسه تمام فایلهای جاواشه :

http://s3.picofile.com/file/8230624650/adad_client_3_2_jar_source_from_JADX.zip.html

لطفا دانلود کنید و ببینید سر در میارید یا نه.
یه بخش token هم داره.
ببینید اینو میشه دستکاری کرد و با روشی دیگه یک پلاگین تبلیغات دیگه ساخت ؟depressed

۰ نظر موافقین ۰ مخالفین ۰ ۰۹ دی ۹۴ ، ۰۵:۳۲
مدیرکل

منبع:gameover.blog.ir

یک گیم ابجکت روی صحنه بذارید.

یک اسکریپت بسازید مثل این و بدید به گیم ابجکت.

//test.cs
//Author:Sajjad3011
//Drag ui->text using Drag Event
using
UnityEngine; using System.Collections; using UnityEngine.UI; public class test : MonoBehaviour { public Text text1; public void funcDrag(){ transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0); } }

کامپوننت Event trigger بدید بهش.

روی Add new event بزنید تا یک رویداد انتخاب کنید(شما باید در اینجا Drag رو انتخاب کنید. اگه دوست داشتید کلیک باشه PointerClick و ...)

ابجکتی که اسکریپت رو بهش دادید بکشید روی event trigger و رویدادی که ایجاد کردید.(اگه نوشته بود list empty یعنی لیست خالی هست اولش باید روی + پایینی کلیک بشه تا یک لیست بیاد براتون که بتونید گیم ابجکت رو بکشید روش)

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

http://s3.picofile.com/file/8230468534/drag.jpg

۱ نظر موافقین ۱ مخالفین ۰ ۰۸ دی ۹۴ ، ۱۱:۲۴
مدیرکل

منبع:gameover.blog.ir


[تصویر: screenOrientation.jpg]
برای اینکار باید Screen.orientation رو با مقادیر کلاس ScreenOrientation تنظیم کنیم.
مقادیر:

Variables
Portrait	Portrait orientation.
PortraitUpsideDown	Portrait orientation, upside down.
LandscapeLeft	Landscape orientation, counter-clockwise from the portrait orientation.
LandscapeRight	Landscape orientation, clockwise from the portrait orientation.
AutoRotation	Auto-rotates the screen as necessary toward any of the enabled orientations.


مثال :


// Start in landscape mode
    function Start () {
        Screen.orientation = ScreenOrientation.LandscapeLeft;
    }

منبع :help یونیتی
۴ نظر موافقین ۰ مخالفین ۰ ۰۸ دی ۹۴ ، ۱۰:۵۲
مدیرکل

منبع:gameover.blog.ir

یک ui->text روی صحنه بذارید (جایی که دید کافی داشته باشه)
در inspector خصوصیت پاراگراف (Paragraph ->Alignment رو برای حالت افقی و عمودی روی center) و overflow (سرریز) افقی(horizontal) وعمودی(vetical) رو روی overflow بذارید تا اگه متن بزرگتر شد کادر متن به اندازه اون بشه.

یک اسکریپ بسازید و توش یک تابع مثل func1 بنویسید و حتما از نوع public باشه. بعدش روی دکمه ی Add component بزنید و Event Trigger بدید به ui->text ایجاد شده روی صحنه و سپس ابجکتی که اسکریپت test رو بهش دادید بکشید روش و رویداد pointerClick رو انتخاب و تابع func1() رو از زیر شاخه ی اسکریپت test در همون لیست بهش ربط بدید تا قتی کلیک می کنیم روش تابع func1 اجرا بشه.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class test : MonoBehaviour {
    public Text text1;
    void Start () {
        text1.text = "salam";
    }

    public void func1(){
        text1.text = "clicked";
}
}

http://s6.picofile.com/file/8230461234/change_ui_text.jpg

اجرا:

http://s3.picofile.com/file/8230461834/clicked.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۰۸ دی ۹۴ ، ۱۰:۳۶
مدیرکل

منبع:gameover.blog.ir

در یونیتی 5 بعضی اوقات وقتی در پنجره ی build settings روی andoid  سوئیچ می کنیم و پروژه رو به apk بیلد می کنیم همچنان می بینیم روی گوشی نصب نمیشه(مثل گوشی huawei یا ....) و با خطایی مثل این مواجه میشیم:

application not installed android unity


برای رفع این مشکل به قسمت File->Build Settings رفته و روی android رفته و switch platform  رو بزنید. چند لحظه صبر کنید . سپس player settings رو بزنید و تنظیمات زیر رو وارد کنید.

Device Fil_t_e_r = FAT(AR Mv 7+x 86)
Install Location = Automatic

bundle identifier رو هم درست وارد کنید برای مثال : ir.esmeSherkat.esmeApp

http://s6.picofile.com/file/8230303092/application_not_installed_android.jpg


۹ نظر موافقین ۰ مخالفین ۰ ۰۷ دی ۹۴ ، ۱۲:۲۷
مدیرکل

منبع :gameover.blog.ir

نویسنده:sajjad3011
منابع:سایت یونیتی + سایت اندروید + منابع سیشارپ + ... .

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

کلاس جاوای اندروید در یونیتی نمایشی از یک موجودیت جنریک از java.lang.Class هست.(مبحث پیچیده هست اما زمانیکه با سورس هایی در سایت adad.ir یا غیره مواجه میشید اینا بهتون کمک می کنه تا موضوع تبلیغات از طریق ساخت این کلاس رو بهتر درک کنید.اگه هم سخته نگران نباشید جلوتر شاید بهش برسیم)

توضیح:
کلاس AndroidJavaClass از کلاس AndroidJavaObject مشتق میشه(یعنی خصوصیات AndroidJavaObject رو به ارث می بره.مثل توابع و متغیرها و ...)


اگه بخوام به زبون قابل فهم یادتون بدم یعنی دسترسی به کتابخانه ای که به زبان جاوا برای اندروید نوشته شده. مثال می زنم: سایت عدد (adad.ir) یا سایت های دیگه مثل بازار و غیره رو دیدید که میان پلاگین های اندرویدی با پسوند jar(یا java archive) به شما می دن می گن توی unity اضافه کنید بعدش فلان دستورات رو بکار بگیرید تا بتونید با استفاده از اونا توی دستگاه های اندرویدی تبلیغات برنامه نویسی شده توی اون کتابخونه jar رو استفاده کنید؟

این دقیقا همونه که با مثال یادتون میدم تا بهتر درک کنید که چه قدرت هایی درش نهفته هست.مثل همون DLL نویسی که توی سیشارپ می نوشتیم و توی یونیتی ازش استفاده می کردیم. این فرقش اینه که با eclipse یا android studio یا ... کتابخونه های جاوا رو برنامه نویسی کردن(یا خودمون هم اگه بخوایم می تونیم) بعدش به jar بیلد کردن و به یونیتی اضافه می کنن. حالا روش استفاده اش رو یاد می گیریم.

توابع این کلاس عبارتند از:

Call فراخوانی یک متد جاوا روی یک ابجکت (غیر استاتیک).
CallStatic فراخوانی یک متد استاتیک جاوا روی یک کلاس.
Dispose کل بک کردن IDisposable .(اگه فراموشم نشده باشه کل بک یعنی یک تابع رو به ورودی تابع دیگه بدیم)
Get دریافت مقدار یک فیلد در یک ابجکت(غیر استاتیک).
GetRawClass بازیابی اشاره گر jclass خام به کلاس جاوا.
GetRawObject بازیابی اشاره گر jobject خام به شی جاوا.
GetStatic دریافت مقدار یک فیلد استاتیک در نوع شی.
Set تنظیم مقدار یک فیلد در یک شی (غیر استاتیک).
SetStatic تنظیم مقدار یک فیلد استاتیک در نوع شی.

شکل کلی یا پوتوتایپ این کلاس به این صورت هست :

public AndroidJavaClass(string className);

اسم کلاسی از اندروید رو که میخوایم استفاده کنیم به صورت رشته ای(string) به ورودیش معرفی می کنیم.

مثال:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        AndroidJavaClass jc = new AndroidJavaClass("java.lang.System");// Try to collect som Java garbage..
        jc.CallStatic("gc");
    }
}



در مثال فوق یک نمونه از کلاس java.lang.System به نام jc ساختیم . gc مخفف garbage collector یا جمع کننده ی زباله هست.
یعنی قسمت های اشغالی حافظه رو از داده های موقت و بی استفاده پاک سازی و آزاد می کنه.

مثال بعدی:


using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        AndroidJavaClass jc = new AndroidJavaClass("android.os.Build"); // Retrieve the manufacturer of the product/hardware.
        string manufacturer = jc.Get<string>("MANUFACTURER");
    }
}

در این مثال با استفاده از کلاس اندروید android.os.Build اطلاعات سخت افزاری کارخانه ی سازنده ی دستگاه رو باز یابی و در متغیر رشته ای manufacturer ذخیره کردیم.

کل کلاس های اندرویدی جاوا رو میخواید بلد شید نیاز به حفظ نیست به این لینک سر بزنید :
http://developer.android.com/reference/classes.html
مثلا خصوصیات همین کلاس anroid.os.Build اینجا اومده:
http://developer.android.com/reference/android/os/Build.html
مثال :
Build.VERSION که ورژن سیستم عامل نصب شده ی اندروید روی گوشی رو به صورت رشته ای نشون میده.
Build.VERSION_CODES که کد شمارشی کدهای ورژن SDK رو بر می گردونه .
و الی آخر... .

کلاس AndroidJavaObject :
شکل کلی:
public AndroidJavaObject(string className, params object[] args);
className اسم کلاس
args آرایه ای از آرگومان ها یا پارامترهای ورودی به کانستراکتور(کلاس سازنده)
با این کلاس یک ابجکت اندروید رو مورد استفاده قرار می دیم.
مثال:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", "some string");
    }
}
در مثال فوق یک شی جاوا اندروید با قابلیت ذخیره رشته ایجاد کردیم.

مثال بعدی:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        int width = 300;
        int height = 150;
        AndroidJavaObject jo = new AndroidJavaObject("android/view/ViewGroup$LayoutParams", width, height);
    }
}
در مثال فوق عدد 300 و 150 رو به پارامترهای width و height از لی اوت(layout یا فرم اپلیکیشن اندرویدی) پاس کردیم که باعث میشه پهنا و ارتفاع لی اوت مون تنظیم بشه(برای درک لی اوت هم کافیه شما برنامه نویسی با b4a یا android studio یا eclipse رو بلد باشید تا مفهوم رو بهتر درک کنید)

امیدوارم کلیات رو درک کرده باشید.

حالا پلاگین عدد(adad.ir) اومده خودش یک کتابخونه ی اختصاصی نوشته و با دستور زیر ازش داره استفاده می کنه . مثلا تبلیغات رو اینطوری حذف می کنه :
AndroidJavaClass pluginClass = new AndroidJavaClass("ir.adad.AdadUnityPlugin");
pluginClass.CallStatic("setDisabled", new object[1] {"true"});
یک مدل از کلاس ir.adad.AdadUnityPlugin می سازه با نام pluginClass و سپس متد setDisabled رو با آرایه ای تک عضوی object با مقدار true مقدار میده. به همین سادگی با اندروید ارتباط می گیره و تبلیغات خودش رو به صورت توکار حذف می کنه.


من فقط اشاره کردم و هنوز خیلی مطالب برای یادگیری هست. توضیحات بیشتر انشاءا... باشه به حساب مطالعات آزاد شما.
کلاس AndroidJavaObject در یونیتی 5 قسمت 2 :

قبلا با دستور زیر در یونتی 5 آشنا شدیم :
AndroidJavaObject jo = new AndroidJavaObject("android/view/ViewGroup$LayoutParams", width, height);

اما سوال:
این استاندارد از کجا اومد و چطوری ما attribute یا خصوصیت های LayoutParams رو بدست آوردیم و از کجا فهمیدیم مسیر android/view/ViewGroup.LayoutParams.html هست.
پاسخ:
تمامی استاناردهای اندروید در سایت اندروید به آدرس http://developer.android.com/reference/ موجود هست.
مثال :

http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

نکته:
احتمالا سایت شیلتر باشه. شما با قند شکن بازش کنید.
۱ نظر موافقین ۰ مخالفین ۰ ۰۷ دی ۹۴ ، ۱۱:۱۷
مدیرکل

منبع : gameover.blog.ir

بعضی وقتا از این موردا پیش میاد. scene(صحنه) رو حذف و دوباره ایجاد کنید. mono editor رو هم بندید و اسکریپت دیگه ای ایجاد کنید بعد از چند لحظه مشکل حل میشه. موفق باشید.

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ دی ۹۴ ، ۰۹:۵۷
مدیرکل
منبع:gameover.blog.ir

http://s3.picofile.com/file/8230104834/dllClass_make.jpg


به لینک زیر برید و چند ثانیه صبر کرده پس رد تبلیغ رو بزنید:
نکته برای unzip حتما باید برنامه 7Zip داشته باشید.(آموزش رو هم با fireFox باز کنید)

http://opizo.com/LjL6yJ

۰ نظر موافقین ۰ مخالفین ۰ ۰۶ دی ۹۴ ، ۱۱:۴۶
مدیرکل

منبع:gameover.blog.ir

اگر دیدید کاراکتر به هوا میره پارامتر Apply Root Motion رو برای کامپوننت Animator غیر فعال کنید.

بعضی اوقات معمولا کاراکتر حالت float in air(معلق یا شناور در هوا)پیدا می کنه.


برای حل این مشکل،خصوصیات is kinematic از Rigidbody و apply root motion از animator رو غیر فعال کنیم(توی Animator و Rigid body)

http://s3.picofile.com/file/8188091142/Apply_Root_Motion.jpg

نکته ی مهم دوم:
بعضی وقتا کلید بالا رو می زنیم کاراکتر نمی پره و تمام موارد فوق رو هم رعایت کردیم. در این حالت باید به کلایدر (Collider) هایی که در inspector به کاراکتر دادیم نگاه کنیم. در حقیقت بعضی اوقات علاوه بر اینکه به اجزای بدن یک کاراکتر تک تک میایم و polygon collider یا edge collider   می دیم علاوه بر اون باید به خود گیم ابجکت empy والد،یک کلایدر بدیم که مثل یک مستطیل دقیقا زیر پاهای کاراکتر باشه تا به هر طریقی کاراکتر حرکت کنه کج نشه یا یه جوری پاهاش از این کلایدر پایین تر نره(باید Edit کنید)



is kinematic یکی از خصوصیات RigidBody هست که به وسیله ی آن می توانیم کاراکتر را کنترل physic engine خارج کنیم و اگر نیاز به حرکت کاراکتر داریم با trasform آن را حرکت دهیم.
۱ نظر موافقین ۰ مخالفین ۰ ۰۵ دی ۹۴ ، ۱۱:۳۳
مدیرکل
منبع : gameover.blog.ir
نویسنده:sajjad3011
تغییر image یک panel روی canvas در یونتیی 5 با استفاده از کد سیشارپ :
یک ui->canvas و سپس یک ui->panel روی اون ایجاد کنید(اسم پنل رو بذارید Panel1 )
اسکریپت زیر رو به کانواس یا پنل ربط بدید و یک عکس رو بکشید روی متغیر background در قسمت اسکریپت ربط داده در inspector:
//changePanelImage.Cs
//Author:Sajjad3011
//Change image of panel
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class changePanelImage : MonoBehaviour {
    public Sprite background;
    // Use this for initialization
    void Start () {
        GameObject.Find ("Panel1").GetComponent<Image> ().sprite = background;
    }
    
    // Update is called once per frame

دقت کنید که حتما باید فضای نام using UnityEngine.UI; رو در بالای برنامه بیارید تا کتابخونه ی UI رو لینک کنه وگرنه دستور GetComponent<Image> ().sprite رو شناسایی نمی کنه.
http://s3.picofile.com/file/8229729284/changeImageOfPanel.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ دی ۹۴ ، ۰۶:۰۶
مدیرکل

منبع : gameover.blog.ir

ریسپانسیو کردن یو آی در یونیتی
هماهنگ شدن آیتم های واسط کاربری با رزولوشن های مختلف
اجرای ui روی resolution های مختلف گوشی های مختلف در یونیتی 5

برای این کار یک ui->canvas ایجاد کنید و سپس چند ui-button بذارید روش .
سپس پارامتر ها رو به صورت زیر تنظیم کنید:
ui scale mode=scale with screen size
scale match mode=Match width or Height
Mathc = اندازه ای که توی پنجره ی game بتونید تمام اجزا رو با رزولوشن دلخواه ببینید.

http://s3.picofile.com/file/8229723492/canvasScaler_RunOEveryResolution_unity5.jpg
۱ نظر موافقین ۱ مخالفین ۰ ۰۴ دی ۹۴ ، ۰۲:۵۱
مدیرکل
واسه کنترل ماشین car controller scripts زیاد ریحته. می گیری میندازی روی ماشین و بعدش wheel collider میدی به چرخ ها و شعاع اونا رو مساوی شعاع چرخ ها میدی و سعی می کنی دقیقا روی لاستیک ها و در مرکز اونا باشه.
بعدش یکی دو تا collider میدی به ماشین (مثل یک sphere collider در سطح دایره ای شکل بالای ماشین و یک کالیدر مربعی برای قسمت پایینی ماشین و همینطور یک empty object میذاری در مرکز ماشین وباید اونو به عنوان نقطه مرکز ثقل ماشین توی پارامترهای کنترلت بدی.
-
بقیه چیزا هم جرم mass لاستیک ها هست باید زیاد و کنی و پاراکترهای دیگه مثل اصطکاک و ....
-
یه دونه قبلا aminblog76 گذاشته بود که می تونی ازش استفاده کنی و فقط تنظمشون رو باید دستی کار کنی و اونقدر جلو عقب کنی تا درست در بیاد و ماشن توی سرعت بالا چپه نکنه یا ملق نزنه و از این حرفا.
بیشتر به دونستن پارامتر ها و یکم کار کردن و وقت گذشتن بیشتر هست.
-
بیشتر واسه زمانبر بودن و ایده ی تکراری هست که دنبالش نمی رم.
-
من اول تصمیم دارم علم بازی سازی رو خودمون بدست بیاریم یکم و بعدش با تکنیک های جانبی و ترو تمیز تر نظر بدیم و بسته بندی و کپسوله کنیم کارها رو و به صورت پکیج در کنار هم بذاریم خیلی راحت و منظم.
-
همه چیز رو پاک کن و از اول یه سورس تمیز رو پیدا کن بعدش ببین ان چیکار کرده و درک کن و واسه کدها توضیحات بذار و بعدش توی inspector ببین پارامتر های car controller و wheel collider ها چیه. اونا رو دونه دونه معنی کن.

http://opizo.com/Zf57yX


http://promakers.ir/showthread.php?tid=7424

منبع:
http://promakers.ir/showthread.php?tid=6879&page=2
۰ نظر موافقین ۰ مخالفین ۰ ۰۳ دی ۹۴ ، ۰۶:۰۹
مدیرکل

منبع:gameover.blog.ir

فرض کنید یک کره یا sphere داریم که شعاع اون 6000 باشه.
حالا فرض کنید بخوایم نقطه ی روی زمین واقعی رو که از GPS خوندیم حالا می خوایم تبدیل به مختصات نقطه ی سه بعدی روی این کره کنیم.

کدش شبیه این میشه:

// this gives you a point on a spehere
 const float kRadiusOfEarth = 6000;
 Vector3 pos = new Quaternion(lat, long, 0) * new Vector3(0, 0, kRadiusOfEarth + altitude);


http://answers.unity3d.com/questions/1011674/gps-coordinates-latlongaltitude-to-unity-3d-coordi.html

۰ نظر موافقین ۰ مخالفین ۰ ۰۱ دی ۹۴ ، ۰۴:۰۰
مدیرکل

منبع :gameover.blog.ir

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Renderer rend;
    void Start() {
        rend = GetComponent<Renderer>();
    }
    void OnMouseEnter() {
        rend.material.color = Color.red;
    }
    void OnMouseOver() {
        rend.material.color -= new Color(0.1F, 0, 0) * Time.deltaTime;
    }
    void OnMouseExit() {
        rend.material.color = Color.white;
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۸ آذر ۹۴ ، ۱۸:۰۶
مدیرکل

C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\AndroidManifest.xml

البته فایل AndroidManifest.xml رو برای کنترل بیشتر پروژه های اندرویدی به مسیر Assets->Plugins->Android از پروژه تون اضافه کنید و کدهای مختلف مثل دستری به اینترنت و غیره رو داخلش تنظیم کنید.

۰ نظر موافقین ۰ مخالفین ۰ ۲۸ آذر ۹۴ ، ۰۲:۴۱
مدیرکل

منبع :gameover.blog.ir

مترجم:گیم اور

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آذر ۹۴ ، ۰۴:۵۴
مدیرکل
منبع:gameover.blog.ir
کد حرکت اسپرایت به چپ و راست و بالا و پایین حول لولای خودش(با توجه به زاویه ای نگاه):
using UnityEngine;
using System.Collections;
//Author:Sajjad3011
public class player : MonoBehaviour {
    void Update () 
    {
        //Variables:
        float moveSpeed = 1.5f;
        //Moving codes:
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * (Time.deltaTime * moveSpeed),Space.Self); //move Right;
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * (Time.deltaTime * moveSpeed),Space.Self);  //move Left;
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * (Time.deltaTime * moveSpeed),Space.Self);    //move Up;
        if(Input.GetKey(KeyCode.DownArrow)) 
            transform.Translate(Vector3.down * (Time.deltaTime * moveSpeed),Space.Self);  //move Down;
        
    }
}

کد حرکت اسپرایت به چپ و راست و بالا و پایین حول دنیای واقعی(بدون توجه به زاویه ای نگاه که پلیر داره بهش رو می کنه):

using UnityEngine;
using System.Collections;

public class player : MonoBehaviour {
    void Update () 
    {
        //Variables:
        float moveSpeed = 1.5f;
        //Moving codes:
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * (Time.deltaTime * moveSpeed),Space.World); //move Right;
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * (Time.deltaTime * moveSpeed),Space.World);  //move Left;
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * (Time.deltaTime * moveSpeed),Space.World);    //move Up;
        if(Input.GetKey(KeyCode.DownArrow)) 
            transform.Translate(Vector3.down * (Time.deltaTime * moveSpeed),Space.World);  //move Down;
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۱۶ آذر ۹۴ ، ۰۳:۳۳
مدیرکل

منبع:gameover.blog.ir

http://s3.picofile.com/file/8226499542/targetFace.jpg

اسکریپت سیشارپ face2face زیر رو بدید به هر دو اسپرایت دلخواهتون.
سپس در inspector اسپرایت دشمن یا اسپرایتی که می خواید بهش نگاه بشه رو بکشید روی متغیر target .

//Author:Sajjad3011
//face2face.cs
using UnityEngine;
using System.Collections;

public class face2face: MonoBehaviour {

	public Transform target;
	private Vector3 v_diff;
	private float atan2;
	
	void Update()
	{
		v_diff = (target.position - transform.position);    
		atan2 = Mathf.Atan2 ( v_diff.y, v_diff.x );
		transform.rotation = Quaternion.Euler(0f, 0f, atan2 * Mathf.Rad2Deg -90);
	}
}


مثال بالا برای حالت top-down بود.



اما مثال(توضیح) زیر برای حالت platform یا از پهلو هست.

فرض کنید دو گیم ابجکت دو بعدی داریم می خوایم به هم نگاه کنن در هر حالتی.


هر شی اگه در سمت چپ بود به سمت راست وگرنه به چپ نگاه کنه.(به هر شی یک اسکریپت مشترک میدیم).


روش کار:

اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت


ببینید

شما x دو گیم ابجکت رو نسبت به هم مقایسه کنید

اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت

این کار رو برای هر دو گیم ابجکت  دو بعدی تکرار می کنیم

private float xScale,yScale;

void Start(){
xScale = transform.localScale.x;
yScale = transform.localScale.y;
}


سپس در FixedUpdate  یا Update یا OnGUI  کد زیر رو می ذاریم:( هر کدوم راحت ترید، فرقشون اینه که OnGUI بیشتر از FixedUpdate و FixedUpdate بیشتر از Update فراخوانی میشه تو هر فریم زمان و خب دقت اونی که بیشتر فراخانی میشه بیشتری اما از اونطرف هم سربار محاسبات داریم به خاطر اینکه هی پردازنده باید سیگنال بفرسته برای اجرای تابع یا رویدادی که بیشتر باید چک بشه)


signX = (x1<x2)? +1 : -1 ;
توضیح:

علامت سوال، عملگر شرطی هست، اگه x1 از x2 کمتر بود، علامت مثبت یک میره توش ویلا منفی یک.


علامت بدست اومده ضرب می شه در این فرمول:

_transform.localScale = new Vector2(signX * xScale,yScale);

۱ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۱۷:۵۰
مدیرکل

مشکل از build-tools هست. باید ورژن v21.0.2 رو کپی کنید داخل پوشه.
http://answers.unity3d.com/questions/834744/building-android-application-failed-re-package-res.html

یه آموزش هم قبلا گذاشته بودیم ببینید:

http://gameover.blog.ir/1394/09/13/%D8%B1%D9%81%D8%B9-%D9%85%D8%B4%DA%A9%D9%84-android-sdk-windows-%D8%AF%D8%B1-unity

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۹:۴۷
مدیرکل

منبع :gameover.blog.ir

اولا واسه خروجی apk گرفتن توی یونیتی هیچی نمی خواد به جز نصب همون چیزایی که واسه apk گرفتن توی game maer studio یادتون دادیم.
سپس:
یونیتی رو باز کنید(ورژن من 4 هست)
از منوی edit گزینه ی preferences رو برید و سپس External Tools و سپس روی دکمه ی جلو android sdk location بزنید و اونجا ازتون android sdk windows رو میخواد ولی شما به جاش آدرس sdk manager رو کپی paste کنید(واسه من اینه : C:\Users\user1\AppData\Local\Android\android-sdk و واسه شما به جای user1 ادرس یوزر خودتون رو بدید. اگه هم بلد نیستید کافیه روی sdk manager که یک ایک سبز داره راست کلیک کنید و از طریق open file location مسیر رو بدست بیارید)

بعدش روی select folder بزنید و پنجره رو ببندید .

[تصویر: preferences.jpg]

حالا از منوی file گزینه ی build settings رو برید(کلید میانبر ctrl+shift+B) و در قسمت android رفته و دکمه ی build رو بزنید تا پنجره ای باز بشه واسه ذخیره فایل apk در مسیر دلخواه شما.
در همین لحظه ممکنه خطا بده که اسم شرکت(کمپانی) و اسم محصول(productName) رو وارد کنید.
[تصویر: Bundle_identifier.jpg]

برای اینکار روی player settings کلیک کنید . و در قسمت bundle intentifier یک اسم به صورت gameover.Company.test وارد کنید. که اینجا اسم محصول رو من test دادم و اسم کمپانی رو gameover دادم و بینش کلمه ی Company بذارید باشه که چپ و راستش نقطه(.) می گیره
همه چی حله پروژه apk رو build کنید و حالشو ببرید:

[تصویر: apk.jpg]

هر چی واسه گیم میکر استادیو واسه خروجی گرفتن apk نصب کردید هموناست. (اگه واسه game maker studio همه چیز رو درست نصب کردید و موفق شدید apk بگیرید واسه یونیتی هم چیز جدیدی نمی خواد فقط این تنظیماتی که بالا گفتم رو انجام بدین حله)(چیز سختی نیست(


مشکل aip level 21 هم اینجا گفته شده :

http://gameover.blog.ir/tag/%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7%DB%8C%20%D9%84%D8%A7%D8%B2%D9%85%20%D8%A8%D8%B1%D8%A7%DB%8C%20%D8%AE%D8%B1%D9%88%D8%AC%DB%8C%20%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%20%D8%AF%D8%B1%20%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C


۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۷:۲۱
مدیرکل

منبع :gameover.blog.ir
Vector3 vectorToTarget = targetTransform.position - transform.position;
 float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
 Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
 transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * speed);

منبع اصلی:
http://answers.unity3d.com/questions/650460/rotating-a-2d-sprite-to-face-a-target-on-a-single.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۰۴:۲۱
مدیرکل
منبع:gameover.blog.ir
// Disable screen dimming
	Screen.sleepTimeout = SleepTimeout.NeverSleep;

۱ نظر موافقین ۰ مخالفین ۰ ۱۱ آذر ۹۴ ، ۲۳:۲۷
مدیرکل

منبع:gameover.blog.ir


Culling Mask

فرض کنید بعضی اوقات در کنار player اشیای دیگه ای داریم که نمی خوایم دوربین پشت player اونا رو رندر کنه.

برای اینکار کافیه به اون اشیا یه لایه نسبت بدیم و سپس دوربین رو انتخاب کرده و لایه ای رو که نمی خوایم رندر بشه از لیست Culling Mask غیر فعال یا unCheck کنیم.

http://s3.picofile.com/file/8225947618/cullingMask.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ آذر ۹۴ ، ۱۶:۳۷
مدیرکل

منبع:gameover.blog.ir

تعداد راس ها و face های مدل رو کم کن(مل رو low polygon بساز. به زبون خودمونی همون لو پلی)
Material ها رو minimize کن.
حجم تکستچرها و UV ها رو کم کن.
فضای خالی تکستچرها رو با تکنیک های Overlapping تا می تونی حذف ن(overlapping یعنی همپوشانی)
از Per-Platform Texture Settings استفاده کن.(یه سری تنظیمات برای فشرده سازی تکستچر در خود یونیتی تعبیه شده.وقتی تکستچر رو توی کادر پروژه انتخاب می کنیم تنظیمات و خصوصیاتی توی inspector میاد حالا دقیق یادم نیست کدومش هست برای تنظیم فشرده سازی که برای تنظیم و فشرده سازی تگستچر برای اجرا روی هر پلتفرمی مثل اندروید یا مک و ویندوز و ... تعبیه شده)
--
نکته ی دیگه ای برای بهینه سازی و بالارفتن performance(کارایی پردازنده):
وقتی از کلاس transform استفاده می کنیم یک سری کارها به صورت فانکشنال(functionality) یا تابعی باید اجرا بشن که نیاز به پردازش بیشتر داره. بهتره که از کش یا ارجاع استفاه بشه. یعنی یه اشاره گر یا متغیر از اون بسازیم. مثل این کد :

void Awake()
{
//Cache Transform (MyTransform is a class variable)
MyTransform = transform;
}
void Update(){
//Update position using cached transform
MyTransform.localPosition = MyPosition;
}

نکته ی بعدی برای افزایش کارایی اینه که تا می تونیم از تابع Update کمتر استفاده کنیم و همینطور توابع مثل LateUpdate و FixedUpdate . این توابع برای رویدادها و رفتارهایی بکار می رن که باید طی زمان تغییر کنن. پس بهتره اونا رو کمتر استفاده کنیم.
مثلا نازی نیست سلامتی دشمن(Enemy) رو توی هر فریم چک کنیم. بلکه کافیه فقط زمانی متغیر health رو چک کنیم که حمله ای صورت بگیره(رویدادهای برخورد OnCollisionEnter و OnCollisionEnter2D و یا ....) به طور خلاصه با بهینه سازی کد می تونیم زمان CPU و GPU رو بهبود بدیم.

نکته ی بعدی: Collider ها رو در حد امکان کاهش بدید.

نکته ی بعد برای افزاریش کارایی: از کلاس GUI و OnGUI کمتر استفاده کنید چون چند بار در هر فریم اجرا میشه و بهتره فقط برای منوهای ساده استفاده بشه نه complex و پیچیده.

نکته ی بعدی: از تکستچرهای اطلس استفاده کنید(تکستچرهای اطلس به تکستچرهایی می گن که ابعادشون توانی از 2 باشه.مثل 8 یا 16 یا 32 یا 64 یا 128 یا 256 یا 512 و ....)(چون اگه نباشه یونیتی مجبوره خودش تبدیلات رو انجام بده.)

مبحث بعدی استفاده از Object Pooling و Static Batching هست.
object pooling یه مبحث برنامه نویسی پیشرفته تری هست . مثلا وقتی اسلحه شلیک می کنه داریم به صورت runtime و داینامیک پریفب گلوله(bullet) رو instantiate می کنیم. به جاش می تونیم قبلا چند گلوله رو ایجاد و در بافر پشت صحنه ی جاری مخفی کنیم(offscreen buffer) و وقتی لازم شد این گلوله های از پیش تولید شده رو از حالت hide در بیاریم و نمایش بدیم.این عملیات باعث افزایش کارایی و پردازش کمتر برای اختصاص حافظه در حین اجرا میشه(dynamic memory allocation) و مخصوصا روی سیستم های موبایل کاربرد ویژه ای داره که بحث برنامه نویسیش کمی پیچیده هست.

Static batching هم یک گزینه هست. برای اون دسته از ابجکت هایی که در حین بازی به هیچ وجه حرکت نمیکنن تیک گزینه ی Static check box رو می زنیم.که در بالا و راست خصوصیات ابجکت در inspector میتونیم تنظیمش کنیم که باعث optimizations(بهینه سازی) میشه.

نکته ی بعدی Skyboxes هست که باید یه سری تنظیمات رو برای آسمان های پانورما و ... در بازی انجام بدیم که به جای اینکه realtime همه چیز تولید بشه یه سری شبیه سازی های از قبل برای ایجاد ستاره ها و غیره از قبل بسازیم و استفاده از تکنیک های parallax effects و .... .

نکته ی بعدی : از نورهای پویا و سایه ها( Dynamic Lights and Shadows) کمتر استفاده کنید.(میشه از Light mapping و تکنیک نورپردازی از قبل رندر شده ی Beast استفاده کرد که در خود یونیتی تعبیه شده و می تونیم نورهای نامحدود بذاریم و bake کنیم)

بقیه هم خودتون برید دنبالش....
۰ نظر موافقین ۰ مخالفین ۱ ۰۲ آذر ۹۴ ، ۱۳:۴۲
مدیرکل
یک برنامه نویس دو بعدی یونیتی برای کار گروهی لطفا پیام بذاره.زبان سیشارپ.
ما داریم یه بازی دو بعدی میسازیم و برنامه نویس سیشارپ مسل به یونیتی برای نوشتن گیم پلی نیاز هست.
۱ نظر موافقین ۰ مخالفین ۰ ۲۵ آبان ۹۴ ، ۰۲:۴۴
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
 using System.Collections;
 //sajjad3011
 public class Indiana2 : MonoBehaviour {
     
     public Vector3 target; // The point user picks for the character to follow
     public bool facingRight = false; // Check where the character is facing
     private int move=0; // Movement direction
     private float maxSpeed = 5f; // Speed of character movement
     private Animator anim; // Reference to the animator
     
     
     // Use this for initialization
     void Start () 
     {
         anim = GetComponent<Animator> ();
     }
 
     void FixedUpdate()
     {
         // Obtaining target point user clicked on screen
         if (Input.GetMouseButton (0))     
         {
             // After user has clicked left mouse button recording mouse position
             Vector3 mousePos = Input.mousePosition;
             // Converting mouse position into coordinate system connected to the camera.
             target = Camera.main.ScreenToWorldPoint (new Vector3 (mousePos.x, mousePos.y, 1f));
 
             // Set movement direction depending on target point
             if (target.x < transform.position.x)
                 move = -1;
             else if (target.x> transform.position.x)
                 move = 1;
             Debug.Log (move);
         }
                 
         // Flip the character if nessessary
         if (move ==1 && ! facingRight)
             Flip ();
         if (move == -1 && facingRight)
             Flip();
         
         // check if arrived to target point
         if (Mathf.Abs (target.x - transform.position.x) < 0.2f)     
         {
             move = 0;
         }
         
         anim.SetInteger ("Movement", Mathf.Abs(move));
         
         // apply velocity to actually make character move
         rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
         
         
     }
     
     
     void Flip()
     {
         Debug.Log ("In Flip");
         facingRight = !facingRight;
         Vector3 theScale = transform.localScale;
         theScale.x *= -1;
         transform.localScale = theScale;
     }
 }
کد بالا چیز خاصی نداره نقطه ی کلیک رو چک می کنیم اگه x اش بیشتر از پلیر بود move رو مثبت ویلا منفی می کنه.
بعد طبق این mov حرکت به چپ و راست می کنیم خیلی ساده.
تابع Flip() هم بر حسب این mov میاد و localscale رو برای x مثبت منفی می کنه که باعث میشه پلیر به چپ و راست نیگاه کنه.
خط          anim.SetInteger ("Movement", Mathf.Abs(move)); می گه برو تو انیماتور ببین اگه متغیر Movement بود اونو با 1 تنظیم کن که اونجا باس شرط بذارید روی خط انتقال انیمیشن ایستاده به انیمیشن راه رفتن، که اگه مثلا پارامتر Movement یک شد سوئیچ انجام بشه.
Mathf.Abs(move) قدر مطلش متغیر move رو می ده.
حالا چرا قدر مطلق گرفتیم،چون فرقی نداره پلیر به راست یا چپ بخواد بره. در هر دو حالت انیمیشن راه رفتن اجرا می کنیم. فقط localscale رو با کد اومدیم منفی کردیم جایی که حرکت به چپ هست.(یعنی move رو فقط موقع ارسال به انیماتور اومدیم با تابع قدر مطلق Abs مثبت ارسال کردیم)

همه چیزم تر و تمیز نوشتم حالیتون بشه.


واسه درک انیماتور هم اینو بخونید:
http://gameover.blog.ir/1394/04/05/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%DA%A9%D8%A7%D9%86%DB%8C%D9%85-%DB%8C%D8%A7-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D8%A7%D9%86%DB%8C%D9%85%D8%A7%D8%AA%D9%88%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-animator
منبع اصلی:
http://answers.unity3d.com/questions/895411/2d-character-controller-for-platformer-with-touch.html
۲ نظر موافقین ۰ مخالفین ۰ ۲۳ آبان ۹۴ ، ۲۳:۲۰
مدیرکل
منبع:GAMEOVER.BLOG.IR

using UnityEngine;
using System.Collections;
//csharp code
//Author:Sajjad3011
public class timer1 : MonoBehaviour {
    public Sprite[] sprArr=new Sprite[4];//set it in the inspector
    SpriteRenderer sprRndr1;
    private int i=0;
    // Use this for initialization
    void Start () {
        sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer
        InvokeRepeating("f1", 1.0f,1.0f);//call function f1() after 1 second


    }

    void  f1()
    {
        Debug.Log (i);
                sprRndr1.sprite = sprArr[i];
        i++;
        if (i > 3) i = 0;

    }//f1

}

بعد از اختصاص اسکریپت به یک 2d object->new sprite باید چهار تا عکس رو بندازید روی متغیرهای public که توی کد ساختیم(در inspector ظاهر میشه که به صورت ورودی مقدار می گیرن)
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ آبان ۹۴ ، ۱۵:۱۹
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ آبان ۹۴ ، ۱۳:۵۸
مدیرکل

منبع :gameover.blog.ir

مثال 1:

بررسی برخورد گیم ابجکت با تگ p2 به گیم ابجکت با تگ p1:

در اینجا اسکریپت رو میدیم به شی ای که تگ p1 داره.
بعدش به شی دوم تگ p2 می دیم.
یک تابع هم توش تعریف می کنیم مثلا برای صدمه خوردن به اسم ApplyDamage که عدد صدمه خوردن رو از ورودی می گیره و از میزان متغیر خون که نیاز به تعریفش هست کم می کنه و حالا روی ui text یا نوار خون نمایش میدیم با کد نویسی:


using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnCollisionEnter2D(Collision2D coll) {
        if (coll.gameObject.tag == "p2")
            coll.gameObject.SendMessage("ApplyDamage", 10);
        
    }
}



مثال2:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnCollisionEnter2D(Collision2D coll) {
        if (coll.gameObject.tag == "Enemy")
            coll.gameObject.SendMessage("ApplyDamage", 10);
        
    }
}

یه دونه هم اینجا گذاشته بودم قبلا :(بررسی برخورد اشیا در فاصله دلخواه روبرو)

http://gameover.blog.ir/1394/07/22/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A8%D8%B1%D8%AE%D9%88%D8%B1%D8%AF-%D8%A8%D8%A7-%D8%A7%D8%B4%DB%8C%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%AF%D8%B1-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D9%85%D8%A7-%D9%82%D8%B1%D8%A7%D8%B1-%D8%AF%D8%A7%D8%B1%D9%86%D8%AF-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آبان ۹۴ ، ۲۳:۰۷
مدیرکل

منبع :gameover.blog.ir

برای اینکار ابتدا یک دوربین توی صحنه داریم.
یک فایل تصویری به اسم screenShot.png در مسیر جاری داریم.
یک اسکریپت csharp برای ایجاد دکمه ی آپلود می سازیم به اسم test.cs می سازیم و ربطش می دیم به دوربین:
[تصویر: unity_design_script_upload.jpg]
سورس اسکریپت سیشارپ test.cs :

//test.cs
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
    
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        
    }
    
    void OnGUI()
    {
        GUI.Label(new Rect(100, 0, 500, 20), Application.dataPath);
        if (GUI.Button(new Rect(100, 100, 150, 20), "Upload"))
        {
            UploadFile("http://yourSiteName.pergig.ir/upload/upload_file.php");
        }
    }
    
    IEnumerator UploadFileCo(string uploadURL)
    {
        print ("file://" + Application.dataPath + "/screenShot.png");
        WWW localFile = new WWW("file://" + Application.dataPath + "/screenShot.png");
        yield return localFile;
        WWWForm postForm = new WWWForm();
        postForm.AddBinaryData("file", localFile.bytes, "screenShot.png", "image/png");
        WWW upload = new WWW(uploadURL, postForm);
        yield return upload;
        if (upload.error == null)
        {
            Debug.Log(upload.text);
        }
        else
        {
            Debug.Log("Error during upload: " + upload.error);
        }
    }
    
    void UploadFile(string uploadURL)
    {
        StartCoroutine(UploadFileCo(uploadURL));
    }
}

کد بالا رو ذخیره کنید و بکشید روی دوربین رها کنید.

به جای "http://yourSiteName.pergig.ir/upload/upload_file.php" آدرس فایل upload_file.php رو بدید.
اینم سورس upload_file.php که باید روی یک هاست php بذاریدش:

//upload_file.php
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  } else {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
    if (file_exists("upload/" . $_FILES["file"]["name"])) {
      echo $_FILES["file"]["name"] . " already exists. ";
    } else {
      move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//move uploaded file into "upload" folder in current dir
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
    }
  }
} else {
  echo "Invalid file";
}
?>

نکته: کد

<?php
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
?>

باعث میشه فایل یا عکس آپلود شده move بشه به پوشه ی دیگه ای به نام upload که روی سایت باید در مسیر upload_file.php ایجادش کرده باشید(علت این کار اینه که هر فایلی بعد از آپلود ابتدا توی یه پوشه ی موقتی روی سایت ذخیره میشه و حتما باید از تو پوشه ی temporary یا پوشه ی فایل های موقت ، انتقالش بدیم به جای دیگه وگرنه توسط موتورهای امنیتی سایت به طور خودکار حذف میشه. علتش هم سیاست های هر سایت هست که از درک این بحث خارجه)
[تصویر: upload_file.jpg]

شما می تونید روی pergig.ir یه هاست رایگان php بگیرید و توی پوشه ی htdocs یه پوشه به اسم upload بسازید و فایل upload_file.php و همچنین یک پوشه ی upload رو داخلش ایجاد کنید و آدرس رو به اسکریپت یونیتی بدید.
---
هرکی مشکل داشت بپرسه ازم
اینم یک شات از صحنه ی بعد از آپلود :
[تصویر: after_upload.jpg]
۱ نظر موافقین ۰ مخالفین ۰ ۲۲ آبان ۹۴ ، ۲۲:۳۹
مدیرکل

منبع :gameover.blog.ir

شکل کلی :

public void InvokeRepeating(string methodName, float time, float repeatRate);

توضیح :

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

دومین پارامتر زمان انتظار برای اولین شروع بر حسب ثانیه هست.

سومین پارامتر هم زمان تاخیر بین هر فراخوانی هست.

مثال: کد زیر بلافاصله(بعد از صفر ثانیه انتظار) تابع دلخواه رو اجرا می کنه و هر 1 ثانیه دوباره اونو اجرا می کنه:

InvokeRepeating("YOUR FUNCTION NAME", 0, 1.0f);

دقت کنید که حتما باید توی Start بذاریدش نه update. مثال :
void Start () {
InvokeRepeating("f1", 1.0f,1.0f);//call function f1() every 1 second
}
در مثال فوق تابع f1 هر ثانیه یکبار فراخوانی میشه.

تابع Invoke هم هست . این تابع برای اجرای یک تابع دیگه فقط یکبار بدون تکرار بکار می ره.
مثال:
 اگه بخوایم 2  ثانیه صبر کنیم بعدش تابعی رو اجرا کنیم این کد رو اجرا می کنیم:
Invoke("YOUR FUNCTION NAME", 2);

به جای YOUR FUNCTION NAME اسم تابعی که ساختیم رو می ذاریم.
دقت کنید که حتما باید توی Start بذاریدش نه update.

یه مثال دیگه میزنم:
اسکریپت سیشارپ زیر باعث میشه هر ثانیه یکی از 4 اسپرایت ورودی روی اسپرایت شما تنظیم بشه(یادتون نره 4 متغیر public که تعریف می کنیم در زیر، در inspector ظاهر خواهند شد و باید عکس اسپرایت ها رو بکشیم بندازیم روشون. بعد از اختصاص اسکریپت به new sprite ساخته شده در یونیتی 5):
using UnityEngine;
using System.Collections;
//Author:Sajjad3011
public class timer1 : MonoBehaviour {
	public Sprite[] sprArr=new Sprite[4];//set it in the inspector
	SpriteRenderer sprRndr1;
	private int i=0;
	// Use this for initialization
	void Start () {
		sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer
		InvokeRepeating("f1", 1.0f,1.0f);//call function f1() after 1 second


	}
	// Update is called once per frame
	void   Update () {

	}
	void  f1()
	{
		Debug.Log (i);
		sprRndr1.sprite = sprArr[i];
		i++;
		if (i > 3) i = 0;

	}//f1

}


سوالی بود بپرسید.
۳ نظر موافقین ۰ مخالفین ۰ ۲۲ آبان ۹۴ ، ۲۲:۳۳
مدیرکل

منبع:gameover.blog.ir
کد سیشارپ:
public class PostURL : MonoBehaviour {
 
     void Start () {
         string url = "http://example.com/script.php";
         WWWForm form = new WWWForm();
         form.AddField("var1", "value1");
         form.AddField("var2", "value2");
         WWW www = new WWW(url, form);
         StartCoroutine(WaitForRequest(www));
     }
     IEnumerator WaitForRequest(WWW www)
     {
         yield return www
         // check for errors
         if (www.error == null)
         {
             Debug.Log("WWW Ok!: " + www.data);
         } else {
             Debug.Log("WWW Error: "+ www.error);
         }    
     }

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ آبان ۹۴ ، ۰۰:۴۰
مدیرکل

منبع :gameover.blog.ir

متناسب کردن بازی با صفحات مختلف اندروید

داخل unity 5 در کادر هایرارکی(hierarchy یا کادر اجزای صحنه) دکمه ی create->ui رو بزنید و سپس یک button رو ایجاد کنید.
به صورت پیشفرض خودش یک کادر canvas ایجاد می کنه که باعث میشه همیشه دکمه یا اشیا ی واسط کاربری شما روی اون قرار بگیره.
بعدش حالت شناور بودن رو باید تنظیم کنید . مثل چپ چین،راست چین افقی یا عمودی و ....(در inspector قسمت rect transform ):
[تصویر: shenavar_ui_unity5.jpg]

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۴ ، ۱۲:۴۰
مدیرکل

مثلا << یا >> یا غیره :


https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۴ ، ۱۲:۳۸
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}

۰ نظر موافقین ۰ مخالفین ۰ ۱۸ آبان ۹۴ ، ۱۰:۴۰
مدیرکل

منبع:

gameover.blog.ir

این PDF رو از zip در آورده و با برنامه ی Adobe Reader بخونید

منبع : http://www.unity3d.com
به لینک pdf زیر برید چند ثنیه صبر کرده و سپس رد تبلیغ بزنید:

http://opizo.com/wSVgB8


نمی دونم چرا دوستان فقط چند نفر دانلود کردن.
توی این اموزش انواع فراخوانی تابع rayCast رو با مثال آوردم و کامل توضیح دادم. توی سایت اصلی unity3d.com هم برید وبسایت نویسان unity3d.com اشتباهاتی رو دارن که ممکنه جبران ناپذیر باشه. واسه همین اقدام به ترجمه و تغییر نوع آموزش سایت unity3d.com کردم.

توی این آموزش سعی کردم کاربران زیادی رو از گیجی در بیارم تا بدونن وقتی تابع Physics.Raycast یکبار به سه پارامتر و یکبار با دو پارامتر و یک بار با 4 پارامتر فراخوانی میشه یعنی چی و چه ورودی هایی رو باید بده.

کاربرد:

مثلا اشعه پرت می کنه تا موانع رو detect کنه.

به هر جهت می خوای تا فاصله مشخص ray می اندازی

برای باز شدنانیمیشن درب در صورت اینکه دوربین از روبرو ببینه.

شرط می ذاری اگه tag  مانع با تگ ما یکی بود کد بعدی رو اجرا کنه

بعدش انیمیشن اجرا کن(window=->Animation درب رو  رو انیمیت کن)

loop Time =false بذارید تا انیمیشن تکرار نشه و فقط یه بار درب باز شه.


مثال :تشخیص مانع روبرو با استفاده از تگ:


bool isOpen=false;
float distance=3f;
 void myRaycast(){
RaycastHit hit;
Ray myRay = new Ray(transform.position, Vector3.forward);
if(Physics.Raycast (myRay, out hit, distance)){
if(hit.collider.tag == "door" && isOpen==false){
Animation.Play("openDoor");
isOpen=true;
}//if internal
}//if external
}//myRaycast()
۶ نظر موافقین ۰ مخالفین ۰ ۱۸ آبان ۹۴ ، ۱۰:۲۷
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۱۸ آبان ۹۴ ، ۱۰:۱۴
مدیرکل
منبع:gameover.blog.ir

یک 2d object->sprite ایجاد و اسکریپت سیشارپ با نام changeSprite  (حتما باید همنام با کلاس داخل اسکریپت باشه) بسازید و بدید بهش:
//changeSprite runTime
//lang:csharp
//author:sajjad3011
//attach this script to your 2dobject sprite
using UnityEngine;
using System.Collections;

public class changeSprite : MonoBehaviour {
	public Sprite spr1;//set it in the inspector
	public Sprite spr2;//set it in the inspector
	SpriteRenderer sprRndr1;
	// Use this for initialization

	void Start(){
		sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer
	}
	// Update is called once per frame
	void Update () {
		if (Input.GetKey (KeyCode.Keypad1)||Input.GetKey (KeyCode.Alpha1)) {
			sprRndr1.sprite = spr1;
		}
		else
		if (Input.GetKey (KeyCode.Keypad2)||Input.GetKey (KeyCode.Alpha2)) {
			sprRndr1.sprite = spr2;
		}
	}
}
یادتون نره دو تا عکس بندازید روی پارامترهای spr1 و spr2 در ورودی اسکریپت(در inspector)
سپس اجرا کنید. با کلید 1 و 2 اسپرایت ها تعویض میشه.

روش دوم بدون متغیر public و با استفاده از مسیر فایل png :

نکته ی بسیار مهم :

ابتدا حتما باید پوشه ای به مسیر Assets/Resources ایجاد  کنید.


سپس پوشه ای که حاوی اسپرایت ها هست بریزید توش. مثل spritesFolder به مسیر Assets/Resources/spritesFolder

حال داخل پوشه ی Assets/Resources/spritesFolder یک فایل به اسم mySprite.png داریم که می خوایم با کد اونو در لحظه ی اجرا لود کنیم.

به زبان سیشارپ اینطوری می شه :

GetComponent<SpriteRenderer>().sprite = 
    Resources.Load<Sprite>("spritesFolder/mySprite");

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آبان ۹۴ ، ۱۳:۵۸
مدیرکل
منبع:gameover.blog.ir

روش یک:
دو متغیر از نوع Camera تعریف کنید که public باشن.
بعدش دو دوربین بذارید توی صحنه و هر دو رو درگ کنید روی متغیرهای cam1 و cam2 مثالمون.
بعدش کد مثل این رو داریم که اگه 1 یا 2 زدیم سوئیچ کنه بین دو دوربین:
public GameObject cam1,cam2;
void Update () {
    
     if(Input.GetKey("1")){
       Debug.Log("Using Camera 1");
      cam1.SetActive(true);
      cam2.SetActive(false);
      }
  if(Input.GetKey("2")){
       Debug.Log("Using Camera 2");
      cam2.SetActive(true);
      cam1.SetActive(false);
      }
     }


روش دو:
نکته: کد به زبان js هست. هرچند کد سیشارپ رو توصیه می کنم اما به علت کمبود وقت سرعتی کپی کردم.
شما سعی کنید حتما کد رو به سیشارپ تغییر بدید چون ساختار سیشارپ خیلی بهتر و استاندارد تر هست و م کلا js(جاوااسکریپت) رو توصیه نمی کنم.(اکثر حرفه ای ها هم بعد از مدتی به سیشارپ روی می آرن . شاید فکر کنید سخته اما من قول میدم بعدا می فهمید سیشارپ حتی از js آسونترم هست و لذت می برید)

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

Switching Cameras at runtime
[تصویر: camera_switch_runTime.jpg]
برای تغییر دوربین در بازی میخوام الگوریتم یا راهکاری رو برای حل این مسئله یاد بدم با توجه به تحقیقاتم.

اصل کار اینطوری هست :

کد js:
function Update(){
       if(Input.GetKey("1")){
      Debug.Log("Using Camera One");
      camSwap(1);
       }
    }
    function camSwap(currentCam : int){
     
    }
کد بالا یه کار تمیز هست فعلا کامل نیست . فقط اومده صورت مسئله رو ساده کرده و می گه اگه "1" زدیم عدد 1 رو بده به ورودی تابعی به نام camSwap که جلوتر کدهاشو میاریم واسه سوئیچ دوربین روی ابجکت دلخواه.

کد js:
function camSwap(currentCam : int){
     var cameras = GameObject.FindGameObjectsWithTag("cam");
     
     for (var cams : GameObject in cameras){
      cams.GetComponent(Camera).enabled = false;
     }
    }
ما فرض کردیم توی پروژه خودمون سه تا دوربین به اسم "cam" داریم و توی اسکریپت فوق با استفاده از GetComponent دوربین ها رو موقتا غیر فعال می کنیم.

حالا دوربین دلخواه رو کدی که در ادامه میاریم به عنوان دوربین جاری فعال می کنیم :
کد js:
var oneToUse : String = "Camera"+currentCam;
     gameObject.Find(oneToUse).GetComponent(Camera).enabled = true;
یادتون نره اسم دوربین ها رو Camera1, Camera2, Camera3 بذارید.

اینک اسکریپت کامل به دو زبان :
کد js:(توصیه نمی کنم)
//js


    function Update () {
     if(Input.GetKey("1")){
      Debug.Log("Using Camera One");
      camSwap(1);
     }
     if(Input.GetKey("2")){
      Debug.Log("Using Camera Two");
      camSwap(2);
     }
     if(Input.GetKey("3")){
      Debug.Log("Using Camera Three");
      camSwap(3);
     }
    }
     
    function camSwap(currentCam : int){
     var cameras = GameObject.FindGameObjectsWithTag("cam");
     
     for (var cams : GameObject in cameras){
      cams.GetComponent(Camera).enabled = false;
     }  
     
     var oneToUse : String = "Camera"+currentCam;
     gameObject.Find(oneToUse).GetComponent(Camera).enabled = true;
    }
کد csharp:

//csharp

    using UnityEngine;
    using System.Collections;
     
    public class camControl : MonoBehaviour {
     
     void Update () {
      if(Input.GetKey("1")){
       Debug.Log("Using Camera One");
       camSwap(1);
      }
      if(Input.GetKey("2")){
       Debug.Log("Using Camera Two");
       camSwap(2);
      }
      if(Input.GetKey("3")){
       Debug.Log("Using Camera Three");
       camSwap(3);
      }
     }
     
     void camSwap(int currentCam){
      GameObject[] cameras = GameObject.FindGameObjectsWithTag("cam");
     
      foreach (GameObject cams in cameras){
       Camera theCam = cams.GetComponent<Camera>() as Camera;
       theCam.enabled = false;
      }  
     
      string oneToUse = "Camera"+currentCam;
      Camera usedCam = GameObject.Find(oneToUse).GetComponent<Camera>() as Camera;
      usedCam.enabled = true;
     }
    }
منبع اصلی:
http://promakers.ir/showthread.php?tid=8769
www.unity3dstudent.com/2010/12/switching-cameras-at-runtime/
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آبان ۹۴ ، ۱۹:۱۶
مدیرکل
منبع:gameover.blog.ir
در کادر اجزای صحنه(hierarchy)(هایرارکی) راست کلیک و create->ui->text بزنید تا یک کادر متنی ایجاد بشه. خصوصیات عمودی و افقی (horizontal+vertical)رو در inspector روی overflow(سرریز چند خطی) تنظیم کنید بقیه خصوصیات مثل اندازه و نوع و رنگ فونت رو هم می تونید همونجا دستکاری کنید به علاوه ی چپ چین و راست چین و وسط چین افقی و عموی و...
http://s3.picofile.com/file/8220935542/ui_text_unity5.jpg
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آبان ۹۴ ، ۱۸:۰۷
مدیرکل
منبع:gameover.blog.ir
این کد سیشارپ رو بدید به هر اسپرایتی که می خواید(مثلا تک تک اسپرایت های player مثل دست و پا و .... . دقت کنید نباید به والد بدید و به تک تکشون باید بدید):
(با کلید R و A و G و B  مقدار Red و green و blue و alpha رو زیاد می کنید و نتیجه رو می بینید. رنک رو هم توی پارامتر color در inspector می تونید تنظیم کنید):
نظر یادتون نره:
using UnityEngine;
using System.Collections;

public class alpha : MonoBehaviour {
	
	public Color altColor = Color.black;
	public Renderer rend; 
	
	//I do not know why you need this?
	void Example() {         
		altColor.g = 0f;         
		altColor.r = 0f;        
		altColor.b = 0f;         
		altColor.a = 0f;     
	}      
	
	void Start ()
	{       
		//Call Example to set all color values to zero.
		Example();
		//Get the renderer of the object so we can access the color
		rend = GetComponent<Renderer>();
		//Set the initial color (0f,0f,0f,0f)
		rend.material.color = altColor;
	}      
	
	void Update() 
	{
		if (Input.GetKey (KeyCode.G)){  
			//Alter the color          
			altColor.g += 0.1f;
			//Assign the changed color to the material.
			rend.material.color = altColor;
		}
		if (Input.GetKey (KeyCode.R)){  
			//Alter the color           
			altColor.r += 0.1f;
			//Assign the changed color to the material. 
			rend.material.color = altColor;
		}
		if (Input.GetKey (KeyCode.B)){  
			//Alter the color            
			altColor.b += 0.1f;
			//Assign the changed color to the material. 
			rend.material.color = altColor;
		}
		if (Input.GetKey (KeyCode.A)){ 
			//Alter the color          
			altColor.a += 0.1f;
			//Assign the changed color to the material. 
			rend.material.color = altColor;
		}
	}         
}
منبع اصلی که از روش ویرایش هایی رو انجام دادیم:
http://answers.unity3d.com/questions/60453/fading-out-using-rendermaterialcolora-doesnt-work.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۲ آبان ۹۴ ، ۱۳:۵۲
مدیرکل

منبع:gameover.blog.ir


[تصویر: water_unity.jpg]
[تصویر: water2.jpg]
دو تا کلیپ از کار خودم توی یونیتی رو ببینید.(حجم هر کدوم نزدیک 1 مگ هست/زیاد نیست دان کنیدsmiley)
http://opizo.com/GQxLKX

http://opizo.com/GNXhGJ


نکته: باید به لینک های فوق بردی و چند صانیه صبر کنید بعدش رد تبلیغ رو بزنید.

Unity.Pro.v4.3.4f1 رو باز کنید و یک پروژه جدید رو ایجاد کنید و یک صحنه ی جدیدبسازید.
در PROJECT روی گزینه ی assets کلیک کنید و سپس در پنل راست، راست کلیک کرده و import package و سپس Water pro only رو بزنید.
[تصویر: importpackagewaterproonly.gif]
http://s5.picofile.com/file/8117441492/i...roonly.gif
در پنجره ی باز شده همه ی پکیج ها رو انتخاب کنید(دکمه ی All) و سپس import .
[تصویر: importPackage.gif]
http://s5.picofile.com/file/8117441942/i...ackage.gif
حالا در پنل project روی گزینه assets و سپس standart assets و سپس water pro only کلیک کنید.
سپس یک نمونه Daylight Water رو با ماوس بگیرید و بکشید توی صحنه و موقعیت اون رو در بخش position از inspector بذارید روی (0و0و0)
[تصویر: drag_water.jpg]
سپس روی دکمه ی play کلیک کنید(برای خروج دوباره روی Play بزنید و با هیچ کدوم از دکمه های pause و بقیه کار نکنید چون قاطی می کنه صحنه رو و کارتون موقع ذخیره به هم میریزه و undo میشه)
صحنه باید شبیه زیر بشه :
[تصویر: render1_water.jpg]
http://s5.picofile.com/file/8117444334/r..._water.jpg
البته من یه نور مستقیم(directional light) هم گذاشتم و یک cube با تکستچر خزه/چمنی(با R و E و W به ترتیب Scale و Rotate و Move کردم)
برای اینکه صحنه یا آب بهتری داشته باشید وارد پوشه ی Water4 بشید و Water4Example (Advanced) رو بکشید توی صحنه و مختصات position رو بذارید روی (0و0و0)
و دوباره Render بگیرید:
[تصویر: render2_water.jpg]
http://s5.picofile.com/file/8117444850/r..._water.jpg
البته بازم اگه می خواید بهتر بشه می تونید در Hierarchy ابجکت Daylight Water قبلی رو delete کنید:
و پس Play کنید:
[تصویر: water_lastRender.jpg]
http://s5.picofile.com/file/8117445250/water_lastRender.jpg
سوالی بود بپرسید.

رنگ آب و رنگ انعکاس(Reflection) رو هم می تونید در بخش Main color در inspector تغییر بدید.
[تصویر: green_water.jpg]
http://s5.picofile.com/file/8117450934/green_water.jpg
داخل یونیتی باشه یا نباشه بعضیا بلد نیستن.من خودم هم بلد نبودم اینو.حالا که یاد گرفتم بد کردم دارم یاد میدم ؟ شاید بعضیا مبتدی باشن بلد نباشن. بعدش یاد می گیرن خیلی خوشحال میشن.
اینم کل آموزش این صفحه که HTML رو save و zip کردم یه جا دانلود کنید:
http://s5.picofile.com/file/8117459218/water_unity_html_sajjad3011.zip.html

۳ نظر موافقین ۰ مخالفین ۰ ۱۲ آبان ۹۴ ، ۱۲:۰۲
مدیرکل

منبع:gameover.blog.ir

http://s6.picofile.com/file/8245131750/easyT.jpg

حرکت دو بعدی پلیر در یونیتی به وسیله ی easy touch version 3
حرکت دو بعدی player
ویرایش:1/26/2016:


۹ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۹:۲۶
مدیرکل
منبع:gameover.blog.ir
بعد از unzip فایل html رو با مروگر فایرفاکس باز بفرمایید.(نکته:کدنویسی گفته نشده اما سوالی بود پیام بذارید):
http://www.mediafire.com/download/58g2v6oj4xfw46o/level+selection+menu+unity5.zip
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۷:۴۳
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
using System.Collections;

public class DrawLine : MonoBehaviour
{
 //reference to LineRenderer component
 private LineRenderer line; 
 //car to store mouse position on the screen
 private Vector3 mousePos;
 //assign a material to the Line Renderer in the Inspector
 public Material material;
 //number of lines drawn
 private int currLines = 0;

 void Update ()
 {
  //Create new Line on left mouse click(down)
  if(Input.GetMouseButtonDown(0))
  {
   //check if there is no line renderer created
   if(line == null){
    //create the line
    createLine();
   }
   //get the mouse position
   mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   //set the z co ordinate to 0 as we are only interested in the xy axes
   mousePos.z = 0;
   //set the start point and end point of the line renderer
   line.SetPosition(0,mousePos);
   line.SetPosition(1,mousePos);
  }
  //if line renderer exists and left mouse button is click exited (up)
  else if(Input.GetMouseButtonUp(0) && line)
  {
   mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   mousePos.z = 0;
   //set the end point of the line renderer to current mouse position
   line.SetPosition(1,mousePos);
   //set line as null once the line is created
   line = null;
   currLines++;
  }
  //if mouse button is held clicked and line exists
  else if(Input.GetMouseButton(0) && line)
  {
   mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   mousePos.z = 0;
   //set the end position as current position but dont set line as null as the mouse click is not exited
   line.SetPosition(1, mousePos);
  }
 }
 
 //method to create line
 private void createLine()
 {
  //create a new empty gameobject and line renderer component
  line = new GameObject("Line"+currLines).AddComponent<LineRenderer>();
  //assign the material to the line
  line.material =  material;
  //set the number of points to the line
  line.SetVertexCount(2);
  //set the width
  line.SetWidth(0.15f,0.15f);
  //render line to the world origin and not to the object's position
  line.useWorldSpace = true;  

 }
}
منبع اصلی:
http://www.thegamecontriver.com/2015/05/how-to-draw-line-on-screen-in-unity-csharp.html
۲ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۷:۲۲
مدیرکل
منبع:gameover.blog.ir

http://opizo.com/AmxLMN


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

نکته: اگه  در uinity 5.1.0.f3 کار می کنید پکیج رو که import کردید پیام میده حتما yes بزنید یا go ahead
اگه no زدید منوی tool اضافه نمیشه باید asset ایمپورت شده رو انتخاب و حذف کنید و دوباره ایمپورت کنید.

برای افزودن هم منوی Tools->HedgehogTeam->EasyTouch->Extensions->Add a new joystick رو برید:http://s7.picofile.com/file/8245131284/EasyTouch.jpg
بعد از اجرا جوی استیک خودش اضافه میشه.

http://s6.picofile.com/file/8245131750/easyT.jpg



نمونه کد هم اینجاست :
http://gameover.blog.ir/1394/08/11/%DA%A9%D8%AF-%D8%AD%D8%B1%DA%A9%D8%AA-%D9%BE%D8%B1%D8%B4-%D8%AF%D8%A7%D8%A8%D9%84-%D8%AC%D8%A7%D9%85%D9%BE-%D8%B1%D8%A7%D9%87-%D8%B1%D9%81%D8%AA%D9%86-%D8%AF%D9%88-%D8%A8%D8%B9%D8%AF%DB%8C-player-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-Easy-touch-version-3-%D8%B3%DB%8C%D8%B4%D8%A7%D8%B1%D9%BE


دانلود پکیج کامل و تست شده ی کنترل فریک برای تاچ کامل اندروید به همراه آموزش PDF فارسی:
http://gameover.blog.ir/1395/08/07/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%BE%DA%A9%DB%8C%D8%AC-%DA%A9%D8%A7%D9%85%D9%84-%D9%88-%D8%AA%D8%B3%D8%AA-%D8%B4%D8%AF%D9%87-%DB%8C-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%81%D8%B1%DB%8C%DA%A9-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%A7%DA%86-%DA%A9%D8%A7%D9%85%D9%84-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-PDF-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C

۴ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۶:۵۶
مدیرکل
۱ نظر موافقین ۰ مخالفین ۰ ۰۴ آبان ۹۴ ، ۱۲:۵۱
مدیرکل
منبع:gameover.blog.ir

با تشکر از سجاد
با این کد می تونید با کلید shift چپ و راست رنگ پس زمینه دوربین رو عوض کنید.(در اینجا زرد. چون red=1 و green=1 و blue=0 است. بر حسب سیستم RGBA . یعنی اول شدت رنگ قرمز و سپس سبز و سپس آبی رو میدیم و بعدش اگه اشتباه نکنم آلفا یا شدت)


//change camera Background Color
// press Left or Rihgt shift
//csharp language
//unity 5.1final
//Author:Sajjad3011
using UnityEngine;
using System.Collections;

public class cameraBackgroundColor : MonoBehaviour {
    private Camera cam;
    private     Vector4 color1;
    // Use this for initialization
    void Start () {
    
        color1= Camera.main.backgroundColor;
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKey (KeyCode.LeftShift) || Input.GetKey (KeyCode.RightShift)) 
        {
            Camera.main.backgroundColor=new Vector4(1F, 1f, 0, 0.1f);//Red,Green,Blue,Alpha
        }
        else
            Camera.main.backgroundColor=color1;
    }
}

۱ نظر موافقین ۰ مخالفین ۰ ۰۳ آبان ۹۴ ، ۱۲:۵۳
مدیرکل

منبع:gameover.blog.ir

--

how to check animation is compelete in unity

how to check animation finihed in unity5

-

کد cs:

private IEnumerator WaitForAnimation ( Animation animation )
    {
        do
        {
            yield return null;
        } while ( animation.isPlaying );
    }

کد js:

function WaitForAnimation ( Animation animation )
    {
        yield; while ( animation.isPlaying ) yield;
    }

منبع:

http://answers.unity3d.com/questions/37411/how-can-i-wait-for-an-animation-to-complete.html

مثال بعدی:

function Die ()
 {
 animation.Play("die");
 yield WaitForSeconds (animation["die"].length);
 Destroy(this.gameObject); //destroys the object after animation ended
 }
animation["die"].length   میاد طول زمانی انیمیشنی به اسم die(مردن) رو بر حسب ثانیه در میاره.
yield WaitForSeconds می گه به تعداد ثانیه های ورودی صبر کن.
دستور بعدی هم میاد گیم ابجکت رو نابود می کنه.
-
حالا کل اون کد رو گذاشتیم توی یک تابع که به زبون سیشارپ اینطوری میشه:
کد :
void Die ()
 {
 
animation.Play("die");
 
yield WaitForSeconds (animation["die"].length);
ادامه ی کد

 

شرط می ذاریم مثلا وقتی تیر برخورد کرد به هدف، تابع Die() اجرا بشه.
والسلام.
۱ نظر موافقین ۰ مخالفین ۰ ۰۲ آبان ۹۴ ، ۲۰:۲۵
مدیرکل

منبع:gameover.blog.ir

این یک کلیپ آموزشی که برای شما ساختیم:

http://www.mediafire.com/file/jdywgx70f07s3nh/mp4_ui_button_click_go_level.zip


توی یونیتی 5.1 در hierarchy راست کلیک کن و create->ui->canvas رو بزن تا یک مستطیل ایجاد بشه. جابجاشم کنی فرقی نداره به جای صفحه ی اصلی موبایل جاساز میشه.

حالا می تونی button رو به همون طریق ایجاد کنی و بذاری روش: create->ui->button
بعدش تکستچر دکمه رو توی inspector عوض کن . خصوصیت شناور بودن هم می تونی تنظیم کنی (چپ چین و راست چین و ....)
اگه می خوای واسه کلیکش هم کد بنویسی ابتدا انتخابش کن بعدش توی inspector یک دکمه ی + مثبت هست اونو بزن یک فیلد اضافه میشه. گیم ابجکتی که می خوای رو بکش بنداز روش.
حالا می تونی تابع دلخواهی که داخل اسکریپت های اون گیم ابجکت وجود داره رو از لیست انتخاب کنی برای اجرا.
اینم ببینید:
http://answers.unity3d.com/questions/922045/unity-5-ui-button-onclick.html

+

http://answers.unity3d.com/questions/942622/how-do-you-call-a-function-with-a-button-unity-5-u.html




چند نکته :(زبان سیشارپ)

* برای کد نویسی هم می تونید public Button رو تعریف کنید و دکمه ها رو بکشید بندازید روشون.

* ضمنا باید فاضی نام using UnityEngine.UI رو هم در قسمت بالایی بیارید.

* کد نویسی هم توی تابع Start() باید باشه.

مثال :

یک دکمه برای خروج بسازید و اسکریپت زیر رو بدید به یک گیم ابجکت (مثال canvas) سپس دکمه رو بکشید بندازید روی متغیر btnExit :
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Move : MonoBehaviour {
	public Button btnExit;

	void Start ()
	{

		btnExit.onClick.AddListener(()=>{
			Application.Quit();

		});

}


نکته:
کامپوننت event system هم اگه نیاز شد باید اختصاص بدید بهش(با زدن دکمه Add component و تایپ event system و انتخاب از لیست)
برای کدنویسی رویداد ها(مثل نگه داشتن کلیک یا .....) باید اسکریپتی بنویسید که یک تابع از نوع public void مثلا داشته باشه.

 سپس یک Event Trigger component به دکمه اضافه کنیم (با زدن دکمه ی component در inspector بعد از انتخاب دکمه در hierarchy)، و add new event type رو می زنیم و نوع رویدادی که می خوایم کد رو اختصاص بدیم بهش از لیست انتخاب می کنیم مثل pointerClick ، مثل Drag یا غیره.

مثلا ما Drag رو انتخاب می کنیم.

 بعدش روی + می زنیم و دکمه رو می کشیم روی None(object) تا معرفی کنیم می خوایم از اسکریپت اختصاص داده بهش استفاده کنیم.



سپس از لیست no function ابتدا اسکریپتی که ساخته بودیم رو پیدا و از زیرشاخش تابعی که به صورت void public توی اسکریپت خودمون تعریف کرده بودیم انتخاب می کنیم(یادتون نره حتما نوع تابع باید از نوع public باشه ویلا توی لیست نمیاد)

http://s6.picofile.com/file/8219224792/ui_trigger_eventj.jpg
-
مثلا می تونید رویداد drag رو انتخاب کنید و یک اسکریپت برای حرکت بسازید و بهش اختصاص بدید:
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

	// Use this for initialization
public void move(){
		transform.position = Input.mousePosition;
	}
}


سوالی بود بپرسید.
۱۵ نظر موافقین ۰ مخالفین ۰ ۰۲ آبان ۹۴ ، ۲۰:۱۸
مدیرکل

منبع:gameover.blog.ir

http://s6.picofile.com/file/8218825350/2.gif


به لینک زیر برید و چند ثانیه صبر کنید سپس رد تبلیغ رو بزنید:

http://opizo.com/ID6SKq

۳ نظر موافقین ۰ مخالفین ۰ ۰۲ آبان ۹۴ ، ۰۳:۵۵
مدیرکل

منبع:gameover.blog.ir

با تشکر از سجاد به خاطر ارسال مطلب

موقعی که دارم خروجی apk می گیرم خطای زیر رو میده.این خطا برای چیه ؟

UnityException: Minimum platform required is Android 5.0 (API level 21)
[تصویر: android5_0_api_level_21.jpg]




اون خطاهایی رو که تو داری رو من قبلا با دانلود بعضی ابزارها از اینجا رفع کردم:
http://downloads.puresoftware.org/files/android/
--
الان نمی دوم دقیقا اندروید 5.0 (نه 5.01 نه 5.1 نه ...) رو می خواد api level 21
---
چند تا هم دانلود کردم یکی android-21_r02.zip بود بازش کردم دیدم توش یک پوشه هست به اسم android-5.0.1 و اونم کپی کردم توی پوشه platforms حل نشد.
تو لینکی که دادم پوشه ی platform-tools داره ولی platforms نداره.کلا گیج شدم دارم بازم پوشه ها رو می بینم.
پوشه هایی که توی \android-sdk\platforms می ریزیم داخلشون پوشه های data و images و skins داره یادتون نره.
پوشه هایی هم که توی android-sdk\build-tools می ریزیم داخلشون پوشه های libو renderscript داره .
--
من فکر کنم توی پوشه ی platform باید یه پوشه بریزیم به اسم android-5.0 که توش اون مشخصات که گفتم رو داشته باشه ولی android-5.0 (نه 5.1 نه 5.01 نه ...) رو که مشخصات گفته شده از لحاظ محتوا رو داشته باشه نمی دونم از کجا دانلود کنم.
یه سایتی هم هست اینه :
http://kaopu.so/pan/WINDOWS_TOOLS
روی platform-tools-21-windows.zip رفتم این باز شد :
http://pan.baidu.com/s/1o66xKuu#render-t...Fplatforms
زبونش چینی هست . با گوگل ترجمش کردم اینطوری میشه معنی دانلودش:
کد:
加速下载(推荐)=Acceleration Download (recommended)
---------------------
普通下载=Normal download  این گزینه رو بزنید واسه دانلود
---------------------
买会员享提速特权,下载速度最高 提升200%=Members enjoy the privilege to buy speed, download speeds of up to 200% lift
---------------------
立即提速= Now Speed

حالا فعلا دارم android-21.rar رو از لینک تولید شده می گیرم کپیش کنم توی پوشه platforms ببینم مشکل رفع میشه یا نه.

big grinبالاخره من موفق شدم تمام خطاها رو با اعتماد به خودم رفع کنم خروجی apk بگیرمlaugh

[تصویر: solved_2_android5_0_api_level_21.jpg]

http://promakers.ir/showthread.php?tid=12009

اینم یه آموزش دیگه برای رفع مشکل خروجی اندروید در یونیتی:
http://gameover.blog.ir/1394/09/13/%D8%B1%D9%81%D8%B9-%D9%85%D8%B4%DA%A9%D9%84-android-sdk-windows-%D8%AF%D8%B1-unity
۴ نظر موافقین ۰ مخالفین ۰ ۰۱ آبان ۹۴ ، ۱۸:۱۶
مدیرکل

gameover.blog.ir

دانلود پکیج های طناب دو بعدی و سه بعدی(UltimateRopeEditor+RopeScriptPackage)

(رایگان شد)

به لینک یر برید و پس از چند لحظه انتظار،دکمه رد تبلیغ رو بزنید

http://opizo.com/1GpDCL




RopeScriptPackage برای دو بعدی هست.


اینم آموزش سه بعدی UltimateRope برای ایجاد طاب سه بعدی:
http://s5.picofile.com/file/8284783992/rope3d.jpg

http://s8.picofile.com/file/8274543834/tut_Ultimate_Rope_Editor_1_10_sajjad.rar.html


اینم آموزش دو بعدی پکیج 2d rope system:(حجم:30 مگ کیفیت عالی. زبان اصلی):


http://s9.picofile.com/file/8274528600/ultimateRope.jpg

http://opizo.com/Qhn8Lo



۳ نظر موافقین ۰ مخالفین ۰ ۰۱ آبان ۹۴ ، ۰۵:۱۵
مدیرکل
این کد رو بدید به تیر:
//move to click point
//Author:Sajjad3011
//unity 5.1.final
using UnityEngine;
using System.Collections;
public class bullet_move_2d : MonoBehaviour {
	public float speed=10f;
	private Vector3 clickPos;
	float DeathTime=2f;
	Vector3 diff;
	void Start()
	{

		clickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
		clickPos.z = transform.position.z;
		Destroy(gameObject,DeathTime);
		//
		diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
		diff.Normalize();
	}
	void  Update  (){
		transform.position = Vector3.MoveTowards(transform.position, clickPos, speed * Time.deltaTime);
		//Lookat 2d Equivalent		
		float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
		transform.rotation = Quaternion.Euler(0f, 0f, rot_z );
	}
}

این کد رو بدید به جوی استیک مجازی ای که با پکیج easy touch version 3 ساختید.(اگه لینک پکیج رو ندارید بگید بذاریم)
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class joyStick_over_sajjad : MonoBehaviour {
	public GameObject pref_bullet;
	public GameObject player;
	private Vector3 clickPos;
	private bool over=false;

	void Update () {
		if (Input.GetMouseButtonDown(0)) 
		{
			EventSystem eventSystem = EventSystem.current;
			if (! (eventSystem.IsPointerOverGameObject ())){
				//over = true;
		Instantiate (pref_bullet, player.gameObject.transform.position, pref_bullet.transform.rotation);//ijdade tir
			}//if

		} //if
}//update
}//mono


۱ نظر موافقین ۰ مخالفین ۰ ۳۰ مهر ۹۴ ، ۰۷:۱۱
مدیرکل

توی sprite editor می تونیم لوله ی مکزی اسپرایت ها رو تنظیم کنیم.این لوله همون محور چرخش هست.

با وجو تنظیم ، وقتی E می زنیم تا rotate کنیم می بینیم حول لوله نمیچرخه بلکه حول مرکز خودش(center) می چرحخه.

برای عملکرد صحیح باید دکمه ی pivot به جای center فعال باشه:

http://answers.unity3d.com/storage/temp/41146-pivot.png

۰ نظر موافقین ۰ مخالفین ۰ ۲۷ مهر ۹۴ ، ۱۱:۴۱
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        Application.OpenURL("http://example.com/get.php?Scrore=9");
    }
}

متغیر Score و مقداری که دادیم دلخواه هست. اگه بخوایم متغیرهای دیگه هم ارسال کنیم می تونیم با علامت & از هم جدا کنیم مثل
Score=9&x=5

ضمنا باید اجازه دسترسی به اینترنت هم در مانیفست بدید.
مانیفست مسیرش اینجا گفتیم:
https://gameover.blog.ir/tag/%D8%AA%D9%86%D8%B8%DB%8C%D9%85%20%D9%85%D8%A7%D9%86%DB%8C%D9%81%D8%B3%D8%AA%20%D8%AF%D8%B1%20%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
۳ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۲۳:۰۵
مدیرکل

منبع:gameover.blog.ir

public class PostURL : MonoBehaviour {

     void Start () {
         string url = "http://example.com/script.php";
         WWWForm form = new WWWForm();
         form.AddField("var1", "value1");
         form.AddField("var2", "value2");
         WWW www = new WWW(url, form);
         StartCoroutine(WaitForRequest(www));
     }
     IEnumerator WaitForRequest(WWW www)
     {
         yield return www
         // check for errors
         if (www.error == null)
         {
             Debug.Log("WWW Ok!: " + www.data);
         } else {
             Debug.Log("WWW Error: "+ www.error);
         }    
     }

منبع خارجی:

http://answers.unity3d.com/questions/11021/how-can-i-send-and-receive-data-to-and-from-a-url.html

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۱۹:۳۸
مدیرکل
ابتدا اختلاف مختصات نقطه ی کلیک را از نقطه ی مرکزی دایره بدست می آوریم
dx = abs(x-center_x)
dy = abs(y-center_y)
R = radius
در کد فوق به جای x , y مختصات ماوس را بدهید.

سپس اختلاف هر یک را با شعاع دایره مقایسه می کنیم.اگر کمتر از آن بود یعنی در دایره نیست.
if dx>R then 
    return false.
if dy>R then 
    return false.


۰ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۰۳:۱۹
مدیرکل

توی سیشارپ و js هر دو از var استفاده میشه. توی js برای تعریف تمام متغیرها. در csharp برای تعریف متغیرهای variant یا متغیرهایی که نوعشون در لحظه ی اجرا تعریف میشه بعد از دریافت ورودی، از var استفاده می کنیم.

۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۲۳:۳۷
مدیرکل

منبع :gameover.blog.ir

using UnityEngine;
using System.Collections;

public class WWWFormImage : MonoBehaviour {

    public string screenShotURL= "http://www.my-server.com/cgi-bin/screenshot.pl";

    // Use this for initialization
    void Start () {
        StartCoroutine(UploadPNG());
    }
    
    IEnumerator UploadPNG() {
        // We should only read the screen after all rendering is complete
        yield return new WaitForEndOfFrame();

        // Create a texture the size of the screen, RGB24 format
        int width = Screen.width;
        int height = Screen.height;
        var tex = new Texture2D( width, height, TextureFormat.RGB24, false );

        // Read screen contents into the texture
        tex.ReadPixels( new Rect(0, 0, width, height), 0, 0 );
        tex.Apply();

        // Encode texture into PNG
        byte[] bytes = tex.EncodeToPNG();
        Destroy( tex );

        // Create a Web Form
        WWWForm form = new WWWForm();
        form.AddField("frameCount", Time.frameCount.ToString());
        form.AddBinaryData("fileUpload", bytes, "screenShot.png", "image/png");

        // Upload to a cgi script
        WWW w = new WWW(screenShotURL, form);
        yield return w;
        if (!string.IsNullOrEmpty(w.error)) {
            print(w.error);
        }
        else {
            print("Finished Uploading Screenshot");
        }
    }
}

به متغیر screenShotURL آدرس صفحه ی دریافت کننده php یا ... رو بدید.(اون پیشفرض pl داده که یه سایت رو معرفی کرده به زبان تحت سرور perl ساخته شده.پسوند فایل های پرل pl هستش)


۱ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۲۳:۳۶
مدیرکل
منبع:gameover.blog.ir
var USERNAME : String;
     var PASSWORD : String;
     
     function Start () {
     
     var form = new WWWForm();
     
     form.AddField("Username", USERNAME);
     form.AddField("Password", PASSWORD);
     
     var headers = form.headers;
     var rawData = form.data;
     var url = "your:url-goes-here";
     var secretKey : String = USERNAME + ":" + PASSWORD;
     headers["Authorization"]="Basic " + System.Convert.ToBase64String(
         System.Text.Encoding.ASCII.GetBytes(secretKey));
     var www = new WWW(url, rawData, headers);
     yield www;
     
         if(www.error) {
             print("There was an error: " + www.error);
         }else{
             print(www.text);
         }
     
     }

کد به زبان js هست و برای بررسی صحت یوزرنیم و پسود بکار می ره و بعدش محتوای وب رو به صورت متنی دریافت می کنه و نمایش میده.
با اندکی فکر روی کد می تونید به سیشارپ convert کنید اگه سیشارپ رو دوست دارید.


۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۲۳:۳۵
مدیرکل
منبع:gameover.blog.ir
نویسنده این مطلب:سجاد
اسکریپت زیر باعث میشه وقتی به پارتیکلی برخورد کردیم نیرویی در جهت direction به ما وارد بشه:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnParticleCollision(GameObject other) {
        Rigidbody body = other.GetComponent<Rigidbody>();
        if (body) {
            Vector3 direction = other.transform.position - transform.position;
            direction = direction.normalized;
            body.AddForce(direction * 5);
        }
    }
}

پارتیکل سیستم شوریکن( Shuriken particle system):
این message به اسکریپت اتچ(وصل) شده به پارتیکل سیستم و collider ای که با آن برخورد کرده ارسال می شود.
وقتی تابع OnParticleCollision  از یک اسکریپت وصل شده به gameobject دارای collider  فراخوانی(invoke) می شود پارامتر GameObject ، پارتیکل(ParticleSystem) سیستم را نمایش می دهد. Collider حداکثر یک پیام(message) را در پارتیکل سیستم دریافت می کند که در هر فریم با آن برخورد کرده است( حتی وقتی که پارتیکل سیستم با collider با چند پارتیکل سیستم در فریم جاری برخورد کند.)
برای اطلاعات بیشتر در مورد تمام کالیژن های رخ داده با پارتیکل سیستم، می توان از  ParticleSystem.GetCollisionEvents استفاده کرد تا آرایه ای از ParticleSystem.CollisionEvent را دریافت نماییم.(نکته : Collision event یعنی رویداد برخورد. یا تابعی که در لحظه ی برخورد صدا زده میشه)

نکته:
پیام های فقط زمانی ارسال می شن که توی پنل inspector گزینه ی /Send Collision Messages/ رو برای particle system collision module فعال کنیم.

OnParticleCollision می تونه یک co-routine باشه و خیلی ساده می تونید دستور yield رو برای انتظار اتمام کار تابع بکار بگیرم:
در مورد coroutine قبلا اینجا توضیح دادیم:
http://gameover.blog.ir/1394/07/04/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-StartCoroutine-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C

مثال:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public ParticleSystem part;
    public ParticleCollisionEvent[] collisionEvents;
    void Start() {
        part = GetComponent<ParticleSystem>();
        collisionEvents = new ParticleCollisionEvent[16];
    }
    void OnParticleCollision(GameObject other) {
        int safeLength = part.safeCollisionEventSize;
        if (collisionEvents.Length < safeLength)
            collisionEvents = new ParticleCollisionEvent[safeLength];
        
        int numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);
        Rigidbody rb = other.GetComponent<Rigidbody>();
        int i = 0;
        while (i < numCollisionEvents) {
            if (rb) {
                Vector3 pos = collisionEvents[i].intersection;
                Vector3 force = collisionEvents[i].velocity * 10;
                rb.AddForce(force);
            }
            i++;
        }
    }
}

منبع اصلی: سایت سازنده یونیتی
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۰۹:۰۵
مدیرکل

منبع:gameover.blog.ir

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public float duration = 1.0F;
    public Light lt;
    void Start() {
        lt = GetComponent<Light>();
    }
    void Update() {
        float phi = Time.time / duration * 2 * Mathf.PI;
        float amplitude = Mathf.Cos(phi) * 0.5F + 0.5F;
        lt.intensity = amplitude;
    }
}

روی اسکریپت فکر کنید متوجه نمیشید سوال کنید . سوال رو خصوصی نپرسید چون پاسخ نمیشه داد.
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۱۸:۵۵
مدیرکل

منبع :gameover.blog.ir

بررسی برخورد با اشیایی که در مقابل ما قرار دارند

sing UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۳:۲۱
مدیرکل

منبع :gameover.blog.ir

شکل کلی

public Vector3 TransformDirection(Vector3 direction);

برای تبدیل direction از فضای محلی(local space) به فضای جهانی(world space) بکار می رود.


مثال:

بررسی برخورد با اشیایی که در مقابل ما قرار دارند

sing UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۳:۲۱
مدیرکل

prefab چیست؟

 

پریفب یا prefab هم اگه نمی دونید بپرسید.

 

مثلا یک عکس یا asset یا مجموعه ای از چند گیم ابجکت(جسم بازی مثل مکعب،استوانه وغیره) یا هر چیزی رو خواستیم با ماوس می گیریم می کشیم می اندازیم روی یک جسم در کادر hierarchy(هایرارکی=کادر اجزای صحنه ی بازی ) و زیر شاخه ی یک ابجکت (تهی=empty )قرار می دیم.(نکته برای ایجاد یک جسم تهی یا امپتی،راست کلیک کنید تو کادر هایرارکی و یک جسم empty game object از همون قسمتا ایجاد کنید)

بعدش اون گیم ابجکت empty رو با تمام چیزایی که انداختیم روش و زیر شاخش شده (فقط همون جسم رو )می کشیم توی کادر پروژه تا یک prefab ازش ساخته بشه و تمام چیزایی که زیرشاخش بود هم یه نمونه زیر شاخش میسازه. بعدش می تونیم از کادر هایرارکی یا از صحنه حذفش کنیم. مثل تیر و اشیایی که می خوایم توی صحنه نباشن و با استفاده از کد اونا رو ایجاد کنیم.یا یک نمونه از این پریفب رو بکشیم توی صحنه یا هر چند تا ازش می خوایم بکشیم با ماوس بندازیم تو صحنه و فقط یکی رو از تو کادر پروژه تغییر بدیم تا رنگ همه عوض بشه یا خصوصیات دیگش رو بعد از انتخابش در کادر پروژه ،از طریق کادر inspector که بهش می گیم کادر خصوصیات جسم انتخابی،تغییر بدیم )

 

به همین سادگی. :| :| :|

۱ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۲:۴۵
مدیرکل
منبع:gameover.blog.ir
یه آرایه تعریف می کنیم و کل گیم ابجکت هایی که تگ(برچسب/tag)  دشمن(enemy) دارن رو لیست می کنیم.
اگه هیچ دشمنی وجود نداشته باشه پس هیچی لیست نمی شه و طبعا طول آرایه باید صفر باشه. دستور یا تابع رفتن به مرحله ی بعدی رو اجرا می کنیم. مثال:
GameObject[] enemyArray = GameObject.FindGameObjectsWithTag("enemy");
if(enemyArray .Length == 0) boroBeMarhaleBadi()

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۱:۳۴
مدیرکل

منبع:gameover.blog.ir

با تشکر از سجاد

یه تابع یا رویداد به اسم void OnCollisionEnter(Collision col){  داریم باهاش می تونید چک کنید با چیزی که تگ nardeban  داره برخورد داریم یا نه. بعدش کلید فلش بالا رو توش چک می کنید اگه فلش بالا زده شد یه آسانسور نامرعی زیرش هست میره بالا و پایین. در حقیقت یه plane یا کلایدر روی یک گیم ابجکت نامرعی میذارید. فلش پایین هم زده شد می یاد پایین . به همین سادگی. همچنین انیمیشن بالا رفتن و پایین رفتن رو می تونیم اجرا کنیم.

البته یادتون نره postion آسانسور نامرعی رو باید به طور اتوماتیک وقتی که player در نقطه بالا یا پایین نردبان هست تنظیم کنید تا وقتی player مثلا از یه نردبان دیگه می ره روی یه سقف و از نردبان دیگه بخواد بیاد پایین آسانسور بالا نباشه.

همچنین بهتره از توابع raycast استفاده کنید زیرا می تونید رودر رو  یا face to face بودن player در مقابل نردبان رو چک کنید و وقتی کاراکتر پشت کرده نتونه بره بالا و بقیه به عهده ی خودتون هست که باگ های احتمالی رو رفع کنید.

۱ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۱۰:۲۷
مدیرکل
منبع:gameover.blog.ir
با شیلتر باز کنید:

http://unity3d.com/unity/download/archive

بعدش اسم رو در کنار ورژن تو گوگل بزنید و سایت های آزاد رو باز کنید.
مثال: یونیتی 5.2.1 فاینال:
http://soft98.ir/software/3d-tools/14494-Unity-3D.html

اینم لیست تغییرات در یونیتی ورژن 5.2:
https://unity3d.com/unity/whats-new/unity-5.2
اینم واسه 5.2.1:
https://unity3d.com/unity/whats-new/unity-5.2.1
تغییرات هر ورژنی رو خواستید آخرش عدد ورژن رو دستکاری کنید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۹:۱۱
مدیرکل

منبع:gameover.blog.ir
کد به زبان سیشارپ در یونیتی 5.1 فاینال تست شده(حالت دو بعدی)

//shellik be jayi ke click kardim 2d mode
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
    
    public GameObject pref_Bullet;
    public int bulletSpeed=1000;
    float distance= 10.0f;
    
    void  Update (){
        if (Input.GetMouseButtonDown(0)) {            
            Vector3 position=new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            position = Camera.main.ScreenToWorldPoint(position);
            GameObject go= Instantiate(pref_Bullet, transform.position, Quaternion.identity) as GameObject ;
            go.transform.LookAt(position);    
            Debug.Log(position);
            go.AddComponent<Rigidbody2D>();
            go.gameObject.GetComponent<Rigidbody2D>().AddForce(go.transform.forward*bulletSpeed);
        }
    }
}

نکته: متغیر pref_Bullet از نوع public هست.پریفب نارنجک رو بدید بهش.

پریفب رو اگه نمی دونید بگم:

هر گیم ابجکت یا جسم بازی که می سازیم می ذاریم توی صحنه رنگش و متریال وخصوصیات دیگه رو تغییر می دید هر جور دوس دارید. یا زیر شاخش هر چی می خواید می ذارید(مثل ماشین با چرخ و درب و غیره)، سپس با ماوس  از کادر هایرارکی یا کادر اجزای صحنه ی بازی(hierarchy) می کشید توی کادر project یه نمونه ازش می سازه بهش می گیم prefab یا پریفب . حالا هر چی دلمون بخواد می تونیم ازش با ماوس بندازیم تو صحنه و فقط کافیه تغییر رو روی پریفب اصلی اعمال کنیم تا روی همشون اعمال بشه.

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۴:۱۸
مدیرکل

منبع:gameover.blog.ir

http://uupload.ir/files/27l_untitled.png

برای Animator Component تیک گزینه ی apply root motion رو غیر فعال کنید.

۱ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۳:۱۲
مدیرکل
منبع:gameover.blog.ir
با تشکر از سجاد
ایجاد سیستم ragdoll برای ولو شدن کاراکتر.
در یونیتی 5 مسیر gameobject->3d object->Ragdoll رو طی می کنیم تا پنجره ی Create Ragdoll باز بشه :
نکته : در یونیتی ورژن قدیمی مسیر game object->Create other->Ragdoll رو باید طی کنید.
سپس اجزای مختلف مدل رو می کشیم می اندازیم در فیلدهای مربوطه:
[تصویر: unity4_5_ragdoll.jpg]
کارکتر رو در قسمتی بالا تر بذارید و اجرا کنید تا کاراکتر ولو بشه:
[تصویر: ragdoll.jpg]
بیشتر توضیح نمی دم این کلیپ رو دانلود کنید:
http://www.mediafire.com/download/qnuor7xtbd7os3o/Ragdoll_unity_Tutorial.mp4

کیفیت عالی هست و زبان خارجی ولی مفهومه.
سیستم کد نویسی هم بعدا توضیح میدم چون باید خوب تحقیق کنم همینجوری مطلب بذارم کیفیت میاد پایین.

کاربرد : برخورد با موتور یا ماشین و پرتاب شدن. مشت زدن به حریف و ولو شدن. روی موتور سوار بودن و پس از برخورد با مانع پرتاب شدن از روی موتور و جدا شدن و .... . همش با کد و تکنیک می شه پیاده سازی کرد. مثلا فلان کامپوننت رو اضاف می کنید. فلان سیستم رو حذف می کنید. کاراکتر رو از زیرشاخه والد حذف می کنید . مثلا موتور والد کاراکتر ماست و کاراکتر ما فرزند اون هست و روش سواره . برای کارهای پیشرفته باید تکنیک های زیادی زد که می تونید در کنارش ragdoll رو بکار ببرید برای ولو شدن و بقیه رو خودتون پیاده سازی کنید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۰:۵۹
مدیرکل

منبع: gameover.blog.ir

نویسنده ی این مطلب:سجاد

web player+PC/Mac+LinUx+iOS+ANDRoid+BlackBerry+Windows Store+Windows Phone+Web GL+Xbox 360+ps3+ps4+samsung TV

http://s6.picofile.com/file/8216598492/unity5_platform_publish_formats.jpg


۰ نظر موافقین ۰ مخالفین ۰ ۱۹ مهر ۹۴ ، ۰۰:۰۱
مدیرکل
منبع:gameover.blog.ir
public var cameraObj : GameObject;
     public var specificVector : Vector3;
     public var smoothSpeed : float;
     
     function Start () { 
       cameraObj = GameObject.FindGameObjectWithTag("MainCam");
     }
     
     function Update () {
       specificVector = Vector3(transform.position.x, transform.position.y, cameraObj.transform.position.z);
       cameraObj.transform.position = Vector3.Lerp(cameraObj.transform.position, specificVector, smooth * Time.deltaTime);
     }

کد به زبان js هست و خیلی ساده. کد رو به دوربین بدید و یادتون نره تگ MainCam رو به دوربین اصلی بدید.
ابچکت player رو هم بندازید روی متغیر specificVector که قراره دوربین دنبالش کنه.

کد معادل برای مد سه بعدی:

var target : Transform;
var distance = 3.0;
var height = 3.0;
var damping = 5.0;
var smoothRotation = true;
var rotationDamping = 10.0;

function Update () {
var wantedPosition = target.TransformPoint(0, height, -distance);
transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping);

if (smoothRotation) {
var wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);
transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);
}

else transform.LookAt (target, target.up);
}


http://answers.unity3d.com/questions/897409/smooth-camera-follow-for-2d-platformer-game.html

http://imdaunity.blogspot.com/2011/02/camera-follow-script.html


۰ نظر موافقین ۰ مخالفین ۰ ۱۸ مهر ۹۴ ، ۰۲:۰۶
مدیرکل

منبع:gameover.blog.ir


فرض اسکریپتی به نام class1.cs داریم:

using UnityEngine;
using System.Collections;

public class class1: MonoBehaviour {
  public void hello(){
    Debug.Log ("hello world");
  }
}
حال اسکریپت دیگری به نامclass2.cs داریم.
برای دسترسی به اسکریپت بالا و تابع  hello() به این صورت عمل می کنیم:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class class2 : MonoBehaviour {
  void Start () {
    test t1 = new test ();
    t1.hello ();
  }

}


سوالی بود مطرح کنید. بی زحمت رو تبلیغاتی که میذاریم کلیک کنید بالای وبلاگ یا جاهای دیگه. ممنون از همه دوستان
۱ نظر موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۰۹:۰۷
مدیرکل
منبع:gameover.blog.ir

حرکت گلوله/حرکت تیر/حرکت گیم ابجکت/از محل ایجاد/از محل وجود به نقطه ای که با ماوس کلیک شود در یونیتی 5:
اسکریپت زیر باعث میشه گلوله به سمت نقطه ای که کلیک کنیم حرکت کنه و زیر 2 ثانیه نابود بشه.همچنین به سمت نقطه ی کلیک شونده نگاه کنه.اما وقتی به نقطه رسید حرکت متوقف می شه.



//move to click point and lookat2d Equivalent
//Author:Sajjad3011
//unity 5.1.final
using UnityEngine;
using System.Collections;
public class bullet_move_2d : MonoBehaviour {
    public float speed=10f;
    private Vector3 clickPos;
    float DeathTime=2f;
    Vector3 diff;
    void Start()
    {

        clickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        clickPos.z = transform.position.z;
        Destroy(gameObject,DeathTime);
        //
        diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        diff.Normalize();
    }
    void  Update  (){
        transform.position = Vector3.MoveTowards(transform.position, clickPos, speed * Time.deltaTime);
        //Lookat 2d Equivalent        
        float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rot_z );
    }
}
اسکریپت فوق بسیار کمیاب هست و خودم با تحقیق زیاد نوشتمش و باگ های زیادی داشت که برای یونیتی 5 حل کردم.
در روش فوق با استفاده از تابع آرک تانژانت(Atan) از کلاس ریاضی(Mathf) ، زاویه را بر حسب رادیان برای y/x بدست آوردیم.

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

نکته مهم:
یادتون نره لولای اسپرایت رو بذارید روی نوک گلوله از طریق sprite editor
یا توی inspector می تونید بذارید روی right بستگی داره به شکل گلوله. گلوله ی من به سمت راست بود.
[تصویر: sprite_center.jpg]
نکته: اسکریپت رو باید به گلوله بدید. و خود گلوله هم باید پریفب کنید یعنی توی صحنه نباشه بکشید بندازید توی پروژه. بعدش توی کد کلیک player کد ایجاد پریفب گلوله رو بدید.

۲ نظر موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۰۶:۵۳
مدیرکل
منبع : gameover.blog.ir

Vector3 diff Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
diff.Normalize();
float rot_z Mathf.Atan2(diff.ydiff.x) * Mathf.Rad2Deg;
transform.rotation Quaternion.Euler(0f0frot_z );

۰ نظر موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۰۶:۲۰
مدیرکل

نویسنده مقاله :
وھاب احمدوند
Vahab Ahmadvand

www.Persian-Designers.com

-

Bending Stiffness: که مقداری بین ٠ و ١ می باشد که میزان خمیدگی چند ضلعی ھای پارچه رو مشخص می کند.

اگر این مقدار بیشتر باشد پارچه خشک تر می شود و به آسانی خم نمی شود و اگر
مقدار آن کمتر باشد پارچه نرم تر می شود.


Stretching Stiffness :این پارامتر میزان کش دار بودن و کشیدگی چند ضلعی ھای پارچه را تعیین می کند. مقدار کم باعش شل بودن پارچه می شود.

Damping: تاثیر فشار ھوا بر حرکت جسم.


Thickness: میزان ضخامت و کلفتی پارچه را مشخص می کند.برای جلوگیری از تو رفتگی زیاد می توان مقدار آن را زیاد کرد ولی معمولا بین ٠.٣ تا ٠.۶ مقدار مناسبی است.


Use Gravity : با فعال کردن آن جاذبه زمین روی پارچه تاثیر دارد.


Self Collision: با فعال کردن آن پارچه با خودش برخورد دارد و توی ھم نمی رود.


Friction: میزان اصطحکاک سطح پارچه را تعیین می کند.


کامپوننت  Cloth Renderer
Materials :که بافت سطح رو مشخص می کنه .
Pause When Not Visible : با فعال کردن این گزینه وقتی پارچه در معرض دید دوربین نباشد غیر فعال است و محاسباتی روی آن انجام نمی شود.

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ مهر ۹۴ ، ۰۷:۱۵
مدیرکل

منبع:gameover.blog.ir

روی کادر پروژه راست کلیک و Create->Avatar Mask رو بزنید.

یه ماسک آواتار ایجاد میشه. می تونید برید گزینه ی Humanoid(ساختار انسانی) رو انتخاب کنید. بعدش هر جا رو خواستید ماسک کنید تا انیمیشن روش تاثیر بذاره.مثلا همه قسمت ها جز دست چپ.:

http://s6.picofile.com/file/8215595150/avatarMask.jpg

این فیلم رو ریختیم روی مدیافایر ببینید:

http://www.mediafire.com/download/onpdsvsab0gs4ca/Unity__tweaking_animations_using_Layers_in_Mecanim_%5BYT-f22%5D%5BrX9Trne1obs%5D.rar

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ مهر ۹۴ ، ۰۲:۴۰
مدیرکل

روش های زیای هست مثل raycast و oncollsionenter و .... اما اینم یکیش با تریگر.

using UnityEngine;
using System.Collections;

public class DoorActivator : MonoBehaviour {

    public Animator[] lights; 

    private Animator animator;

    void Awake () {
        animator = GetComponent <Animator>();
    }

    void OnTriggerEnter (Collider other) {
        if (other.gameObject.tag == "Player") {
            animator.SetBool ("Open", true);
            foreach (var light in lights) {
                light.SetTrigger ("Activate");
            }
        }
    }

    void OnTriggerExit (Collider other) {
        if (other.gameObject.tag == "Player") {
            animator.SetBool ("Open", false);
        }
    }
}


سوال :اصلا انیمیشن درب چیه ؟ چطوری انیمیشن ایجاد کنم؟


خیلی ساده توضیح میدم .

یونیتی 5 خودش ابزاری برای ساخت انیمیشن داره.به مسیر Window->Animation برید تا پنجره ای باز بشه.دکمه Create رو بزنید و انیمیشن رو با نام دلخواه ذخیره کنید.

روی دکمه ها برید یک توضیح میاد واسه هر دکمه. یکی از دکمه ها دایره قرمز هست اونو بزنید تا خودکار انیمیشن رو record کنه. روی نوار زمانی timeline روی صفر برید و توی صحنه کاراکتر رو روی یک position تنظیم کنید. سپس تایم لاین رو ببرید جلو و دوباره توی صحنه کاراکتر رو موقعیتش رو تغییر بدید.اینطوری انیمیشن ایجاد می شه و حرکت ذخیره میشه.

عدش می تونید انیمیشن رو بندازید روی پنجره animator cotroller که با راست کلیک توی پنجره ی پروژه ایجاد میشه و سپس انیماتور کنترلر رو بکشید بندازید روی کامپوننت Animator component که با دکمه ی add component به مدل دادید.

۱ نظر موافقین ۰ مخالفین ۰ ۱۳ مهر ۹۴ ، ۰۰:۱۶
مدیرکل
منبع:gameover.blog.ir

برای فعال سازی و غیرفعال سازی هاله از طریق اسکریپ سیشارپ از این کدها استفاده کنید:

Component halo = GetComponent ("Halo");
halo
.GetType().GetProperty("enabled").SetValue(halo, false, null); //غیرفعال
halo.GetType().GetProperty("enabled").SetValue(halo, true, null);//فعال

 



۰ نظر موافقین ۰ مخالفین ۰ ۱۱ مهر ۹۴ ، ۰۲:۵۲
مدیرکل

منبع:gameover.blog.ir

مترجم:گیم آور دات بلاگ دات آی آر

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

تشخیص بین Transitionsو Blend Trees حائز اهمیت است. با وجود اینکه هردوی اینها برای ایجاد یک انیمیشن نرم و smooth می باشند،از آنها در انواع مختلف وضعیت ها استفاده می شود.


* Transition ها (خطوط انتقال)،برای سوئیچ بین یک انیمیشن و انیمیشن دیگر در یک میانگین زمانی مورد استفاده قرار می گیرند.این خطوط انتقال به عنوان بخشی از Animation State Machine محسوب می شوند.اگر transition سریع باشد انتقال از یک انیمیشن به یک انیمیشن کاملا متفاوت ،می تواند خوب باشد.

*Blend Tree ها برای ادغام multiple animation ها (ادغام چند انیمیشن همزمان) استفاده می شوند( با ترکیب بخش هایی از آنها با درجات مختلف). میزان همکاری انیمیشن ها برای تاثیر نهایی انیمیشن با استفاد از پارامتر blending کنترل می شود.این پارامتر تنها یکی از پارامترهای Animator Controller می باشد.برای ادغام موشن هایی که scene را می سازند موشن ها بهتر است زمانبندی و رفتار مشابهی داشته باشند تا کار طبیعی تر شود. Blend Tree ها(درختان ادغام) نوع مخصوصی از state در Animation State Machine هستند.(نکته: ماشین حالت همون پنجره انیماتور منظورشه که سوئیچ می کنه بین انیمیشن ها و شرط می ذاریم و این حرف ها)


استفاده از Blend Trees:

برای شروع کار با یک new Blend Tree باید مراحل زیر رو طی کنیم:

 در یک فضای خالی از پنجره ی Animator Controller  راست کلیک کنید و Create State->New blend tree رو انتخاب کنید.


(نکته : شاید فکر کنید شکل blend tree کمی فرق کنه اما اینطوری نیست اونی که شما توی سایت یونیتی دیدی بهش می گن Blend Tree Graph (گراف بلندر تری) که با دوبار کلیک روی یکی از state ها باز می شه.

http://s3.picofile.com/file/8215211568/blendTreeGraph.jpg


در سمت چپ فقط گره ریشه (root node) وجود داره و هیچ گره یا نود فرزندی(child node) هنوز بهش اضافه نکردیم.

در سمت راست root node رو با چند Animation Clip می بینید که به عنوان گره ی فرزند بهش اضافه کردیم.

برای اضافه کردن کلیپ های انیمیشن به درخت ادغام( blend tree ) می توانید blend tree را انتخاب و سپس روی آیکن بعلاوه(plus icon) در فیلد motionدر کادر خصوصیات(inspector) کلیک کنید.

http://s6.picofile.com/file/8215212226/MecanimBlendTreeInitial.png

قبل از افزودن هر موشن، یک Blend Node در inspector نمایان می شود.با استفاده از plus icon می توانید کلیپ های انیمیشن را یا blend tree های child (فرزند) را اضافه کنید.به طور جایگزین،می توانید animation clip ها یا child blend node ها را با راست کلیک روی blend tree و انتخاب از منوی context اضافه کنید.

http://s3.picofile.com/file/8215212684/AnimatorBlendTreeContextMenu.png

وقتی یک درخت ادغام با استفاده از کلیپ های انیمیشن و پارامترهای ورودی تنظیم شد،inspector در هنگام تغییر مقدار پارامتر، یک تجسم گرافیکی یا ویژوال( graphical visualization) از چگونگی ترکیب انیمیشن ها به ما نشان می دهد.(وقتی اسلایدر یا نوار لغزان را drag می کنید فلش های جهت دار از ریشه ی درخت سایه یا shading خودشان را تغییر می دهند تا کلیپ انیمیشن غالب را نشان دهند یا برجسته کنند)

http://s6.picofile.com/file/8215214176/AnimatorBlendTreeInspectorPreview.png

در تصویر فوق یک 2D Blendtree را در inspector مشاهده می کنید که با 5 انیمیشن تنظیم شده است.


شما می توانید هر گره(node) در Blend Tree graph را انتخاب کرده و آن را در inspector بررسی کنید.اگر node انتخاب شده یک Animation Clip باشد،Inspector برای Animation Clip نمایان می شود.اگر انیمیشن از یک مدل import شود ، setting ها read-only  هستند. اگر node یک  Blend Node باشد Inspector برای Blend Node ها نمایان خواهد شد.


شما می توانید blending یک بعدی(1D) یا دو بعدی(2D) را از منوی Blend Type انتخاب کنید. فرق بین آنها در بخش های مربوط وجود دارد.

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

http://docs.unity3d.com/Manual/BlendTree-1DBlending.html

http://docs.unity3d.com/Manual/BlendTree-2DBlending.html


Blend Trees and Root Motion

درخت ادغام و حرکت ریشه ای
ادغام بین انیمیشن ها به وسیله ی خطوط ارتباط نمایش داده می شود.(برای مثال میانگین هر انیمیشن میانگینی است که انیمیشن های مجزا مجزا شده ای هست که با استفاده از پارامتر blending  موزون یا weight می شود.) به هر حال شما باید توجه کنید که root motion به همان صورت الحاق نمی شود.برای اطلاعات بیشتر صفحه ی  root motion  را مطالعه بفرمایید( برای اطلاعات بیشتر در مورد اینکه چه تاثیری روی کاراکتر شما می گذارد):
http://docs.unity3d.com/Manual/RootMotion.html

نکته مترجم : root motion یا حرکت ریشه ای یک چیز مثل همون پارامتر apply root motion هست که  وقتی به یک کاراکتر انیمیشن یا انیماتور می دادیم باید گزینه رو غیر فعال می کردیم تا کاراکتر توی هوا معلق نشه یا نیروهای دیگه روی اون تاثیر بد نذارند. موفق باشید. گیم آور
۰ نظر موافقین ۱ مخالفین ۰ ۱۰ مهر ۹۴ ، ۲۱:۱۸
مدیرکل
منبع:gameover.blog.ir
مترجم:گیم آور

Animation Layers

یونیتی از لایه های انیمیشن برای مدیریت state machine های پیچیده برای body part های مختلف استفاده می کند.

فرض کنید شما یک لایه lower-body(پایین) برای دویدن/پریدن(walking-jumping) دارید و همینطور یک لایه upper-body (بالاتر) رای پرتاب اشیا+تیراندازی.

شما می توانید لایه های انیمیشن را از طریق Layers Widget در گوشه ی بالا و چپ Animator Controller مدیریت کنید.

http://s6.picofile.com/file/8215186118/MecanimAnimationLayers.png

کلیک روی گیره ی لغزان در سمت راست پنجره تنظیمات لایه را نشان می دهد.


http://s6.picofile.com/file/8215186342/MecanimAnimationLayers2.png

شما می توانید در هر لایه ماسک گذاری کنید. maskبخشی از مدل انیمیت شده روی انیمیشینی هست که باید بکار بسته شود.

پارامتر Blending type دو مقدار می گیرد. مقدار Override باعث می شود اطلاعات لایه های دیگر ignore یا نادیده گرفته شود.مقدار Additive باعث می شود انیمیشن به بالای لایه های قبلی اضافه شود.

با فشردن کلید مثبت(+) بالای widget(ویجت) می توانید یک لایه ی جدید ایجاد کنید.

خصوصیت Mask برای تعیین ماسک استفاده شده روی لایه بکار می رود.برای مثال اگر بخواهید با جود اینکه کاراکتر شما در حال راه رفتن است،می دود یا هنوز در حال ایستاده است،همزمان انیمیشن پرتاب را  فقط روی بالاتنه ی  مدل اجرا کنید،باید روی لایه ای که انیمیشن پرتاب را در بردارد(به شرطی که بخش های بالاتنه تعریف ده باشد) ماسک(mask) بگذارید.مثل عکس زیر:

http://s3.picofile.com/file/8215188784/AnimatorMaskOnLayer.png


سمبول یا نماد ‘M’در Layers sidebar به معنی این است که لایه mask(ماسک) دارد.

همگام سازی لایه انیمیشنAnimation Layer syncing):
اغلب اوقات مناسب است از یک state machine در لایه های مختلف استفاده ی مجدد کنیم.به عنوان مثال اگر بخواهید یک  رفتار “wounded” (در لغت به معنی مجروح و جریحه دار و خسته است) را شبیه سازی یا simulate کنید به جای انیمیشن های “healthy” (سلامت)برای walk / run / jump (راه رفتن/دویدن/پریدن)   از انیمیشن های “wounded”(مجروح) استفاده می کنید.برای اینکار می تونید روی Sync checkbox روی یکی از لایه های خود استفاده کنید و لایه ای را که می خواهید همزمان یا همگام( Sync) شود انتخاب کنید.ساختار state machine همانگونه خواهد بود اما در حقیقت کلیپ های انیمیشن با حالت های متمایز استفاده می شوند.
این یعنی Synced layer تعریف ماشین حالت خودش را به هیچ وجه ندارد،اما در عوض نمونه ای از سورس لایه ی سینک(Sync) شده هست.هر تغییری که روی لی اوت یا ساختار view ی لایه های سینک شده انجام دهید(مثل اضافه یا حذف خطوط انتقال یا transition بین انیمیشن ها ) روی سورس لایه ی sync شده اعمال می شود.فقط تغییراتی که در synced layer یکتا هستند،انیمیشن های همگام شده ای هستند که با هر state (حالت) استفاده می شوند.
http://s3.picofile.com/file/8215191934/AnimatorSyncedLayer.png
در عکس فوق لایه “Fatigued” با base layer سینک(همگام) شده است.
ساختار ماشین حالت(state mechine به همون پنجره ی فوق می گیم) همانند base layer است و انیمیشن های منحصر به فرد(فردی) به طور متفاوتی در هر حالت swap (تعویض)می شود به جز انیمیشن های معادل مناسب.

۲ نظر موافقین ۰ مخالفین ۰ ۱۰ مهر ۹۴ ، ۱۸:۳۹
مدیرکل
۲ نظر موافقین ۰ مخالفین ۰ ۱۰ مهر ۹۴ ، ۰۲:۴۰
مدیرکل

منبع:gameover.blog.ir

به لینک رفته و چند ثانیه صبر کنید و سپس رد تبلیغ رو بزنید.

این پکیج به درخواست دوستان گذاشته شد.(اگه شما هم به پکیج یا هر آموزشی نیاز دارید توی بخش نظرات اعلام بفرمایید)

http://s6.picofile.com/file/8215092800/z_006_26082015_031934.jpg

http://opizo.com/8VnAov

۷ نظر موافقین ۰ مخالفین ۰ ۱۰ مهر ۹۴ ، ۰۱:۵۲
مدیرکل

gameover.blog.ir

 

سازنده:sajjad3011

http://s9.picofile.com/file/8272354200/chController.jpg

 

این اسکریپت رو بدید به player .


نکته: پلیر نباید کامپونتت rigid body داشته باشه.

ضمنا یک کامپوننت character controller هم بدید به player.(با انتخاب پلیر و زدن دکمه Add component و ...)

 


دانلود فایل کد:

 

 

https://s8.picofile.com/file/8272355892/chController.rar.html
 

 


 

 

اینم کد برای نمایش:

//chController.cs
//Author:sajjad3011
//gameover.blog.ir
//----------------------
//us telegram channel:
//@gameoverblog
//----------------------
using UnityEngine;
using System.Collections;
public class chController : MonoBehaviour {
private Vector3 moveDirection = Vector3.zero;
void  Update (){
float speed=5;
float jumpSpeed=5;
float gravity=5;
CharacterController controller = GetComponent<CharacterController>();
        if (controller.isGrounded) {
            // We are grounded, so recalculate
            // move direction directly from axes
            moveDirection =new Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            
            if (Input.GetButton ("Jump")) {
                moveDirection.y = jumpSpeed;
            }
        }
        // Apply gravity
        moveDirection.y -= gravity * Time.deltaTime;        
        // Move the controller
        controller.Move(moveDirection * Time.deltaTime);  
} 
}

 

 

 

۵ نظر موافقین ۰ مخالفین ۰ ۱۰ مهر ۹۴ ، ۰۱:۱۴
مدیرکل

منبع:gameover.blog.ir

یک ui->text بسازید و روی canvas یا روی صحنه جایی بذارید که توی صحنه دیده بشه. فونت سایز رو هم توی inspector زیاد کنید و در زیرشاخه fond data در inspector خصوصیات hirozontal overflow و vertical overflow رو روی OverFlow بذارید تا اگه متن بزرگ بود غیب نشه.

-

یک اسکریپت سیشارپ به نام changeText با کد زیر بدید به text ای که ایجاد کردیم:

//change ui->Text
//csharp code
//Unity 5
//Author:gameover.Blog.ir
//**********************
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine;
using System.Collections;

public class changeText : MonoBehaviour {
	public   Text textBox1;

	void Update () {
	if (Input.GetKey (KeyCode.A)) {
			textBox1.text="salam";
		}
		
	}
}

سپس گین ابجکت ui text ای که ساختید رو بکشید بندازید روی پارامتر عمومی textBox1 که توی inspector ظاهر خواهد شد.(در حقیقت ما textBox1 رو از نوع public گرفتیم تا خیلی راحت بدون کدنویسی فیلد تکست رو بکشیم از ورودی بهش معرفی کنیم و دیگه getComponent و ... رو کد نزنیم)

اجرا کنید. کد می گه اگه کلید A رو زدیم متن رو عوض کن بذار "salam"

http://s6.picofile.com/file/8214468292/changeui_text.jpg

نظر یادتون نره.موفق باشید.

۱ نظر موافقین ۰ مخالفین ۰ ۰۶ مهر ۹۴ ، ۱۲:۳۳
مدیرکل

این پارامتر رو اگه فعال کنیم باعث میشه تشخیص کلایدر بهتر بشه وگرنه باید چند کلایدر بدیم به مدل.

به هر حال راه های دیگه ای هم هست مثل Polygon collider و ... .

موفق باشید.

۰ نظر موافقین ۰ مخالفین ۰ ۰۵ مهر ۹۴ ، ۲۱:۵۴
مدیرکل

منبع:gameover.blog.ir


نویسنده :alimka
منبع:http://www.crydev.ir/thread79.html

برای اینکه بتونیم از این کد ها استفاده کنیم ابتدا باید دوتا شی ایجاد کنیم . مثلا دو مکعب ایجاد می کنیم به نام Enemy و Player.

۱۰ نظر موافقین ۰ مخالفین ۰ ۰۵ مهر ۹۴ ، ۱۹:۲۷
مدیرکل
منبع :gameover.blog.ir

این پکیج حدود 245 مگابایت هست .
بسیار حجیم و عالی جهت ساختر کاراکتر اول شخص و سوم شخص می باشد . پکیج دارای سه دموی متفاوت به همراه آموزش بوده و می توانید از آن در ساخت کاراکتر خود استفاده کنید .
[تصویر: character_system.jpg]
یه مدل نینجا توش هست و شاید یه سری مدل دیگه که بشه چایگزین کرد .
و یه سری انیمیشن واسه پراز و راه رفتن و افت زدن از بغل و یه rigid body واسه فیزیک و یه سری اسکریپت دیگه داره واسه پرش و شاید شنا کردن و .... (من شنا کردن و ... رو نتونستم بیابم happy )

روش کارش سادست. پکیج رو با ماوس بکشید توی یونیتی import کنید و پس از تایید و ایمپورت کامل کافیه توی اون کادر جستجو در پنجره ی asset ها در project کلمه ی ninja رو جستجو کنید و مدل رو که پیدا کرد بکشید بیارید توی صحنه یا Hierarchy به بازیتون اضافه کنید.
یک plane هم با رنگ سبز(دلخواه) ایجاد کنید واسه زمین. و یک cube هم دوست داشتید بذارید که بتونید پرش رو تست بگیرید.
همه چی تموم بازی رو اجرا کنید.
با z پرواز کنید و با z فرورد بیاید.(چند تا z شت سر هم بزنید ارتفاع رو زیاد می کنه) و وقتی z رو بعد از چند لحظه می زنید سقوط می کنه و اگه از ارتفاع بیفتید روی زمین حالت زمین خوردن و انیمیشن مربوط رو به خوبی اجرا می کنه براتون.
با کلیک ماوس و راست کلیک می تونید لگد و مشت بزنید و الی آخر.

[تصویر: charSys.jpg]

خود پکیج هم می خواید توی اینترنت هست .
من قبلا از http://www.myunity.ir گرفته بودمش ولی الان دیگه اونجا نیست انگار. از هر جا پیدا کردید دانلود کنید.
ولی در کل بگم اینم یه نمونه ی ساده هست.
بعدا انشاءا... با برنامه نویسی و اسکریپت سازی بتونید مسائل پیچیده تری رو توی بازی های یونیتی خودتون حل کنید.
مثلا من توی سایت های دیگه ای هم سر زدم دیدم اسکریپت های فیزیک یا vehicle واسه یه ماشین رو یکی از بچه های سایت persian-designers فک کنم خیلی خوب ساخته بود و ماشینش خیلی خوب پستی و بلندی ها رو می رفت و گرافیکش هم به جز زمین بد نبود big grin
با X میشینه و دوباره پا میشه و با C شمشیر بر می داره و دوباره میذاره سر جاش(اگه دوباره x بزنید) .
اگه دوبار D بزنید از راست اوفت میزنه و اگه دوباره A بزنید از چپ. اگه دوبار W بزنید از جلو افت میزنه و اگه دوبار S بزنید از عقب افت میزنه.big grin
اینم یکی از نمونه کارهام کلیپشو ببینید با کیفیت کم گذاشتم با حجم 900 کیلوبایت بذار همه بتونن دانلود کنن:
http://s5.picofile.com/file/8127041492/charSysUnity_mp4_sajjad3011.zip.html
از zip در بیرید mp4 هست
۲ نظر موافقین ۰ مخالفین ۰ ۰۵ مهر ۹۴ ، ۱۷:۵۰
مدیرکل
منبع :gameover.blog.ir
نکته:محور Y یعنی خود محور  به سمت بالا و پایین هست و چرخش حول این محور به معنی چرخش به چپ و راست هست.
دوربین رو بذارید پشت player و در زیرشاخه player.
سپس اسکریپت زیر رو بدید به Player .

using UnityEngine;
using System.Collections;

public class MYCLASSNAME : MonoBehaviour {
float Xrotatespeed=10;
float Yrotatespeed=10;

void  Start (){

}

void  Update (){
    transform.Rotate(new Vector3 (0,Input.GetAxis("Mouse X")*Xrotatespeed,0));     
    //transform.Rotate(new Vector3 (Input.GetAxis("Mouse Y")*Yrotatespeed*-1,0,0));
    print(transform.rotation.eulerAngles); 
}
}

اسکریپت فوق به زبان سیشارپ هست به جای MYCLASSNAME اسم اسکریپت رو بذارید.

اسکریپت معادل به زبان جاوااسکریپت :

var Xrotatespeed:float=10;
var Yrotatespeed:float=10;

function Start () {

}

function Update () {
    transform.Rotate(new Vector3 (0,Input.GetAxis("Mouse X")*Xrotatespeed,0));     
    //transform.Rotate(new Vector3 (Input.GetAxis("Mouse Y")*Yrotatespeed*-1,0,0));
    print(transform.rotation.eulerAngles); 
}
معمولا اسکریپت های کوچکی که توی وبلاگ می ذاریم رو سعی می کنیم خودمون طراحی کنیم.نظر یاتون نره.موفق باشید.
۰ نظر موافقین ۰ مخالفین ۰ ۰۵ مهر ۹۴ ، ۱۷:۴۳
مدیرکل

منبع:gameover.blog.ir
یه آرایه از گیم ابجکت تعریف کن. بعدش توی  inspector اندازه رو توی پارامتر size تعیین کن مثلا 3 بده تا سه تا ورودی بهت بده. بعدش سه تا گیم ابجکت empty بساز توی hierarchy و اونا رو بکش بنداز روی ورودی ها. سپس توی صحنه پوزیشن(موقعیت) این empty game object ها رو  هرجور می خوای تنظیم کن. بعدش توی کد سیشارپ که به ماشین میدی کد حرکت مثل این رو بذار:

توی update بگو:

 اگه i=2 بود بره به پوزیشن 2 :

transform.position = Vector2.Lerp (transform.position, pos2,10* Time.deltaTime); 

وگرنه اگه i=3 بود بره به پوزیشن  3:

transform.position = Vector2.Lerp (transform.position, pos3,10* Time.deltaTime); 

وگرنه اگه i=1 بود بره به پوزیشن  1:

transform.position = Vector2.Lerp (transform.position, pos1,10* Time.deltaTime);

می تونی مقدار اولیه i رو توی تابع start برابر 1 بگیری.

توی کد برخورد با پوزیشن 1 مقدار i رو 2 کن

توی کد برخورد با پوزیشن 2 مقدار i رو 3 کن

توی کد برخورد با پوزیشن 3 مقدار i رو 1 کن.

--

روی کدها خوب فکر کنید ببینید چی گفتم. اگه موفق به نوشتن کد نشدید بگید براتون بسازم.
---
یه مثال هم قبلا زده بودم با برنامه اینو ببینید :

http://gameover.blog.ir/1394/05/30/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%DB%8C%DA%A9-%D9%85%D9%88%D8%AC%D9%88%D8%AF-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-NPC-%D9%88-waypints-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
http://s5.picofile.com/file/8153960892/wayPints_1.jpg
۰ نظر موافقین ۰ مخالفین ۰ ۰۵ مهر ۹۴ ، ۰۲:۳۳
مدیرکل
منبع:gameover.blog.ir
۰ نظر موافقین ۰ مخالفین ۰ ۰۴ مهر ۹۴ ، ۲۳:۲۸
مدیرکل
منبع:gameover.blog.ir

روش اول:

  Invoke("DoSomething", 10);//this will happen after 10 seconds



روش دوم:

//gameover.blog.ir
StartCoroutine(ExecuteAfterTime(10));

IEnumerator ExecuteAfterTime(float time)
 {
     yield return new WaitForSeconds(time);
 
     // Code to execute after the delay
 }




این تابع برای اجرای یک تابع بکار می ره.و اگه ازش استفاده کنیم با اسفاده از دستور yield می تونیم در هر نقطه از برنامه کار رو متوقف کنیم.وقتی coroutine ریسام میشه(resume به معنی ادامه دادن یا از سر گرفتن)دستور yield مقداری رو برگشت می ده. Coroutines در مواقعی که در حال مدلسازی رفتاری روی چند فریم هستیم،عالی است. Coroutine ها به طور مجازی سربار اجرایی(performance overhead) ندارند.تابع StartCoroutineمستقیما برگشت(return) داده می شود،همچنین می توانید نتیجه را yieldکرد.این باعث میشه که تابع صبر کنه تا زمانی که coroutine کارش تمام بشه بعدش دستورات بعدی رو از سر بگیره.

البته توی javascript نیازی به استفاده از StartCoroutine نیست.چون خود کامپایلر(compiler) این کار رو برای شما انجام میده.اما توی کد C sharp باید از StartCoroutine استفاده کنیم.


مثال یک :

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        print("Starting " + Time.time);
        StartCoroutine(WaitAndPrint(2.0F));
        print("Before WaitAndPrint Finishes " + Time.time);
    }
    IEnumerator WaitAndPrint(float waitTime) {
        yield return new WaitForSeconds(waitTime);
        print("WaitAndPrint " + Time.time);
    }
}

مثال دو:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    IEnumerator Start() {
        print("Starting " + Time.time);
        yield return StartCoroutine(WaitAndPrint(2.0F));
        print("Done " + Time.time);
    }
    IEnumerator WaitAndPrint(float waitTime) {
        yield return new WaitForSeconds(waitTime);
        print("WaitAndPrint " + Time.time);
    }
}


۰ نظر موافقین ۰ مخالفین ۰ ۰۴ مهر ۹۴ ، ۲۳:۰۵
مدیرکل
منبع:gameover.blog.ir

ارسال داده های فرم به وب سرور :

کد سیشارپ:

(اسم اسکریپت باید طبق کلاس داخلی، WWWFormImage  باشه.

using UnityEngine;
using System.Collections;

public class WWWFormImage : MonoBehaviour {

    public string screenShotURL= "http://www.my-server.com/cgi-bin/screenshot.pl";

    // Use this for initialization
    void Start () {
        StartCoroutine(UploadPNG());
    }
    
    IEnumerator UploadPNG() {
        // We should only read the screen after all rendering is complete
        yield return new WaitForEndOfFrame();

        // Create a texture the size of the screen, RGB24 format
        int width = Screen.width;
        int height = Screen.height;
        var tex = new Texture2D( width, height, TextureFormat.RGB24, false );

        // Read screen contents into the texture
        tex.ReadPixels( new Rect(0, 0, width, height), 0, 0 );
        tex.Apply();

        // Encode texture into PNG
        byte[] bytes = tex.EncodeToPNG();
        Destroy( tex );

        // Create a Web Form
        WWWForm form = new WWWForm();
        form.AddField("frameCount", Time.frameCount.ToString());
        form.AddBinaryData("fileUpload", bytes, "screenShot.png", "image/png");

        // Upload to a cgi script
        WWW w = new WWW(screenShotURL, form);
        yield return w;
        if (!string.IsNullOrEmpty(w.error)) {
            print(w.error);
        }
        else {
            print("Finished Uploading Screenshot");
        }
    }
}
به متغیر screenShotURL آدرس صفحه ی دریافت کننده php یا ... رو بدید.


۰ نظر موافقین ۰ مخالفین ۰ ۰۴ مهر ۹۴ ، ۲۲:۴۲
مدیرکل