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

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

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

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

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

بایگانی
پیوندها
منبع: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
اگه یک متن طولانی داشته باشیم روی خط افقی می ره جلو و از room می زنه بیرون. برای جلوگیری از این مشکل باید هر جا خواستیم بره خط بعدی از کاراکتر "#" استفاده کنیم. (برای رفتن به خط بعدی باید بین متن علامت "#" بذارید.)
مثال :
توی رویداد DRAW اینو بذار تست بگیر تا متوجه منظورم بشید:
کد :
// alamate "#" baraye raftan be Next Row
draw_text(10,5,"salammercsalammercsalammercsalammercsala#mmercsalammercsalammercs#alammercsalamm ​ ercsalammercsalammercsalamme#rcsalammercsalammercsalammercsalammercsa#lammercsal ​ ammercsalammercsalamme#rcsalammercsalammercsalammercsalammercsalammercsalammercs ​ alammercsalammercsalammercsala#mmercsalammercsala#mmercsalammercsalammercsalamme ​rcsalammercsalammerc");

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

منبع: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

http://s17.picofile.com/file/8413050276/usersManagerPHP.zip.html

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

تشکر یادتون نره.

اینم شمارم:

09358077198

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

منبع: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

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

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

منبع:gameover.blog.ir

برای اینکه دیتا بیس بسازید نیاز به نرم افزار navicat دارید که ورژن premium رو از اینترنت دانلود کنید . اموزشم نمی خواد ور برید حله winking
-

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

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

به هر حال راه های دیگه ای هم هست مثل 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 یا ... رو بدید.


۰ نظر موافقین ۰ مخالفین ۰ ۰۴ مهر ۹۴ ، ۲۲:۴۲
مدیرکل
منبع:gameover.blog.ir
توی این فیلم با استفاده از پلاگین جانبی یاد می گیرید فایل json خروجی گرفته از spine رو ببرید توی یونیتی و انیمیشن رو اجرا کنید:

http://www.mediafire.com/download/xv159xd1rbcxxar/Importing_a_Spine_Animation_into_Unity3D_%255BYT-f22%255D%255Bx1umSQulghA%255D.mp4



اینم لینک پلاگین :
https://github.com/EsotericSoftware/spine-runtimes
بعد از باز کردن پوشه spine-unity رو ببرید توی یونیتی و به پوشه assets اضافه کنید. بقیه هم تو فیلم اموزش داده.
نظر یادتون نره.
۱ نظر موافقین ۰ مخالفین ۰ ۰۳ مهر ۹۴ ، ۱۶:۰۵
مدیرکل
منبع :gameover.blog.ir
تکستچرهایی که ابعاد اون ها توانی از 2 باشه(مثل 2،4،8،16،32،128 و الی آخر) رو می گن تکستچر اطلس.بهتره برای سرعت بهتر تکستچرهای اطلس بسازید . (مثلا توی فتوشاپ می تونید اندازه رو با ctrl+alt+i تنظیم کنید)اگه اطلس نسازید البته یونیتی خطا نمی ده ولی خودش مجبوره تبدیلات رو انجام بده.موفق باشید.
۱ نظر موافقین ۰ مخالفین ۰ ۰۳ مهر ۹۴ ، ۰۲:۲۴
مدیرکل
منبع:gameover.blog.ir
اسکریپت سیشارپ زیر رو بندازید روی ui->image ای که ساختید. کد زیر رو ببینید فکر کنید روش خودتون درک می کنید چطوری با event system کار کنید. من اومدم یه پیام ساده رو لاگ کردم وقتی روی image کلیک رو پایین می دیم همون بار اول پیام میده.
//EventSystem test for ui image in Unity
//Author:gameover.blog.ir
using
UnityEngine.EventSystems; using UnityEngine; using System.Collections; public class Example: MonoBehaviour { void Update () { if (Input.GetMouseButtonDown (0)) { EventSystem eventSystem = EventSystem.current; if (eventSystem.IsPointerOverGameObject ()) { Debug.Log ("mouse down"); }//if }//if }//Update }
اگه بخواید ماوس رو نگه دارید یه ضرب پیام رو لاگ کنه به جای Input.GetMouseButtonDown (0) از Input.GetMouseButton (0 استفاده کنید.
۲ نظر موافقین ۰ مخالفین ۰ ۰۳ مهر ۹۴ ، ۰۱:۱۵
مدیرکل

منبع :gameover.blog.ir

چرا بعضی اوقات وقتی دشمنو تکثیر میکنیم فقط رو یکشون عمل میکنه ؟
پاسخ :
دلیلش اینه که متغیرها رو باید از نوع static تعریف کنیم.متغیرهایی از نوع static تعریف می شن آخرین مقدار خودشون رو نگه می دارن.
وقتی ما یک دشمن رو instantiate می کنیم اگه بخوایم همه ی دشمن ها عین هم عمل کنن و مثلا به طور هوشمند دنبالمون بیان یا به حالت idle برن باید نوع متغیری که در منطق یا logic خودمون ازش اتفاده می کنیم رو از نوع static تعریف کنیم.

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

منبع:gameover.blog.ir

برای اینکار از کلاس Input استفاده میشه و تعداد(count) انگشت ها رو هم میشه شمرد.
قبل از هرچیزی باید بررسی کنیم که دستگاه ما آیا از multi touch ساپورت می کنه یا نه.

bool supportsMultiTouch = Input.multiTouchEnabled;
print("MultiTouchSupport : " + supportsMultiTouch);


این آموزش فرضش اینه که موبایل لمسی شما از مالتی تاچ حمایت می کنه.برای گوشی های single-touch کافیه توی هر تایم یک تاچ رو چک کنیم.

مثال زیر همه ی تاچ(لمس) ها و موقعیت اونا رو نمایش تشخیص می ده :
void Update ()

            {

                int nbTouches = Input.touchCount;


                if(nbTouches > 0)

                {

                    print(nbTouches + " touch(es) detected");


                    for (int i = 0; i < nbTouches; i++)

                    {

                        Touch touch = Input.GetTouch(i);


                        print("Touch index " + touch.fingerId + " detected at position " + touch.position);

                    }

                }

        }



Input.touchCount تعداد تاچ ها رو تشخیص می ده.
می تونیمبا یک loop و تکرار با استفاده از Input.GetTouch تمام لمس ها رو تشخیص بدیم.

هر ساختار Touch شامل یک fingerId هست که یک نمونه یا موجودیت(instance ) برای آن lifetime(زمان) را شناسایی می کند و این کار را ادامه می دهد تا اینکه تاچ (لمس) stop کند(متوقف شود) با این امکان می توان برای تخیص تاچ های یکسان در فریم های مختلف استفاده کرد.

با استفاده از touch.position می تونیم مختصات ناحیه ی لمس شده روی screen(صفحه) رو تشخیص بدیم.

نکته بسیار مهم : یادتون باشه،مبداء بردار لمسی در پایین ترین گوشه ی سمت چپ صفحه می باشد.

متد دیگه برای تشخیص تاچ ها ، Input.touches است که یک لیست از ابجکت های لمس شده ی صفحه رو به ما میده.

با اینکه متد اول باید استفاده شود همانند Input.touches متغیرهای موقت و ممکن است کارایی بازی را کاهش دهند.

داده های ورودی ، دقیقا قبل ار تابع Update()، در هر فریم refresh می شوند.

به طوری که در آن شما باید تمام کدهای لازم مدیریت ورودی(input-management logic)را در آن قرار دهید.

انجام این کار اگر در تابع FixedUpdate انجام بشه،جلوی catching (یا خطایابی) داده های ورودی کاربر رو از ما می گیره.زیرا FixedUpdate اگرچه در گام های مختلف ولی در هر فریم از زمان اجرا نمیشه.

Touch Phases(فاز های لمسی):
در کد زیر با استفاده از خصوصیت phase شروع و پایان و لحظه ی تاچ را تشخیص می دهیم :
void Update ()
        {
           int nbTouches = Input.touchCount;

           if(nbTouches > 0)
           {
              for (int i = 0; i < nbTouches; i++)
              {
                 Touch touch = Input.GetTouch(i);

                 TouchPhase phase = touch.phase;

                 switch(phase)
                 {
                    case TouchPhase.Began:
                       print("New touch detected at position " + touch.position + " , index " + touch.fingerId);
                       break;
                    case TouchPhase.Moved:
                       print("Touch index " + touch.fingerId + " has moved by " + touch.deltaPosition);
                       break;
                    case TouchPhase.Stationary:
                       print("Touch index " + touch.fingerId + " is stationary at position " + touch.position);
                       break;
                    case TouchPhase.Ended:
                       print("Touch index " + touch.fingerId + " ended at position " + touch.position);
                       break;
                    case TouchPhase.Canceled:
                       print("Touch index " + touch.fingerId + " cancelled");
                        break;
                    }
                }
           }
        }

زمانی که کاربر در کشیدن انگشت خود(swipping) بر روی صفحه نمایش است،ما به جای موقعیت واقعی،تغییرات دلتای موقعیت(position) را دنبال می کنیم.این برای زمانی مفید است که عمل درگ(Drag=کشیدن و انداختن چیزی با ماوس یا لمس)را انجام می دهیم.


سپس با استفاده از deltaTime سرعت حرکت touch input رو محاسبه می کنیم :
float touchSpeed = touch.deltaPosition.magnitude / touch.deltaTime;

اگه اشتباهی رخ بده تاچ کنسل(cancel) می شه.به عنوان مثال هنگامی که یک منطقه بزرگ در برابر صفحه نمایش فشرده یا تاچ های بیش از آنچه دستگاه ساپورت می کنه انجام بشه.برای تشخیص موقعیت شروع لمس صفحه توسط کاربر از "Began" استفاده می کنیم.سپس می تونیم یک ray(اشعه) رو از موقعیت ورودی با اتفاده از دوربین،cast(پرتاب) و با استفاده از Raycast collision اشیایی رو که در امتداد اشعه هستند چک کنیم.
void Update ()
            {
                int nbTouches = Input.touchCount;

                if(nbTouches > 0)
                {
                    for (int i = 0; i < nbTouches; i++)
                    {
                        Touch touch = Input.GetTouch(i);

                        if(touch.phase == TouchPhase.Began)
                        {
                            Ray screenRay = Camera.main.ScreenPointToRay(touch.position);

                            RaycastHit hit;
                            if (Physics.Raycast(screenRay, out hit))
                            {
                    print("User tapped on game object " + hit.collider.gameObject.name);
                                handleTap(hit.collider.gameObject);
                            }
                        }

                    }
                }
        }


در بعضی مواقع می خوایم دوبار لمس سریع کاربر رو بررسی کنیم.برای مثال یه وقتی می خوایم وقتی کاربر با انگشت به صفحه ضربه(tap) زد Player راه بره و اگه دوبار سریع ضربه زد(double tap) کاراکتر Player با سرعت راه بره.
void Update ()
            {
                int nbTouches = Input.touchCount;

                if(nbTouches > 0)
                {
                    for (int i = 0; i < nbTouches; i++)
                    {
                        Touch touch = Input.GetTouch(i);

                        if(touch.phase == TouchPhase.Began)
                        {
                            if(touch.tapCount >= 2)
                            {
                                Run();
                            }
                            else
                            {
                                Walk();
                            }
                        }

                    }
                }
                else
                {
                    StopMoving();
                }
        }

وقتی touch ما Begin می کنه(وقتی لمس آغاز میشه)، player با تک ضرب انگشت حرکت و با چند ضرب شروع به دویدن می کنه.
اگه هم هیچ تاچ یا لمسی صورت نگیره game character متوقف می شه.
زمانیکه متدهای مختلف مثل Walk را اجرا می کنیم شما همچنین بررسی می کنید کاربر در حال حاضر در حال راه رفتن است یا خیر.

نکته: بعضی اوقات unity نمی تونه لمس های سریع رو درست تشخیص بده.(سعی کنید یادتون باشه)
۲ نظر موافقین ۰ مخالفین ۰ ۰۲ مهر ۹۴ ، ۲۲:۲۸
مدیرکل
منبع : gameover.blog.ir
۰ نظر موافقین ۰ مخالفین ۰ ۰۲ مهر ۹۴ ، ۲۲:۰۶
مدیرکل
منبع :gameover.blog.ir

How to calculate a new position having angle and distance?

کد اول:
 var x = dist * cos(angle * Mathf.Deg2Rad);
 var y = dist * sin(angle * Mathf.Deg2Rad);
 var newPosition = currentPosition;
 newPosition.x += x;
 newPosition.y += y;


کد معادل:

var q = Quaternion.AngleAxis(angle, Vector3.forward);
newPosition = currentPosition + q * Vector3.right * distance;

هر دو کد به زبان javascript بود. کد معادل سیشارپ هم خیلی ساده هست دیگه var نداره و نوع x و y و newPosition و q رو قبل از اسمشون میاریم.

نکته: فاصله/distance همون شعاع/radius هست.

منبع :
http://answers.unity3d.com/questions/491719/how-to-calculate-a-new-position-having-angle-and-d.html

موفق باشید.

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

 منبع :gameover.blog.ir

تو این سایت می تونید آنلاین نقاشی کنید. بعدش save رو بزنید و لینک رو بدید به دوستاتون

http://www.sketchtoy.com

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

http://www.mediafire.com/download/5n31g677onxh2iu/HttpUtils2_db+downloader+online.zip


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

منبع:gameover.blog.ir

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

این متد برای قطع انیمیشن های قبلی و سوئیچ بدون شرط (بدون condition های تعریف شده در پنجره animatior برای انتقال یا transision ها) بکار می رود. برای مثال ممکنه در پنجره Animator روی خطوط انتقال بین انیمیشن ها شرط گذاشته باشیم که مثلا فلان متغیر اگه مقدارش فلان چیز بود اگه روی انیمیشن 1 بود بره به انیمیشن 2 .

اما با استفاده از crossFade در هر وضعیتی که باشیم و هر انیمیشنی که داره اجرا میشه بدون هیچ شرطی قطع می شه و به صورت آنی و فوری سوئیچ میشه روی انیمیشن دلخواه.

مثال :

    Public AnimatorPlayerAnimator;
        if(Input.GetMouseButtonDown(1))
        {
        PlayerAnimator.CrossFade("Fire",1);
        }
        else
        {
        PlayerAnimator.CrossFade("Idle",1);
        }
      در مثال فوق متغیر anim از نوع Animator تعریف شد و چون public هست در inspector باید کامپوننت Animator رو بکشیم بندازیم روش.شرط اول می گه اگه کلیک ماوس پایین بود انیمیشن Fire اجرا بشه وگرنه انیمیشن Idle.


      stateName: اسم state ای که توی پنجره Animator controller اضافه کردیم.

      transitionDuration:مدت زمان انتقال یا سوئیچ به انیمیشن.

      normalizedTime: زمان شروع انیمیشن مقصد که به آن سوئیچ می کنیم بوده ومقدارش بین 0 و 1 است.
      این مقدار زمان نرمال source state (وضعیت ابتدایی)است.اگه هیچ مقداری به این پارامتر ندیم normalizedTime تنظیم می شود یا مقدار normalizedTime منفی بی نهایت(NegativeInfinity) شناور (float) فرض می شود این مقدار پیشفرض رو با float.NegativeInfinity معرفی می کنیم و وضعیت اگر در حال اجرا نباشد از اول play می شود.(یا از زمان جاری اجرا و هیچ Transition یا سوئیچی بین انیمیشن ها اتفاق نمی افتد).

      layer: اسم لایه ای که شامل انیمیشن مقصد هست که قرار است به آن سوئیچ کنیم .اگه مقدار لایه خالی باشد لایه منفی یک(-1) فرض می شود (منفی یک به معنی first state یا وضعیت اول با نام داده شده اجرا می شود یا هش(hash)اجرا خواهد شد.(hash اسم یک state به صورت درهم هست.حالا به چه دردی میخوره)

      stateNameHash: هش وضعیت(state hash) از وضعیت مقصد است.اگر مقدار 0 بگیرد،انتقال یا transition به خودش بر می گردد(self)

      ما نمی توانیم وضعیت جاری را در یک synchronized layer (لایه ی همگام) تغییر دهیم بلکه باید آن را در لایه ی رجوع شده(Refrenced layer) تغییر دهیم.

      منبع :
      http://docs.unity3d.com/es/current/ScriptReference/Animator.CrossFade.html
      ۰ نظر موافقین ۰ مخالفین ۰ ۰۲ مهر ۹۴ ، ۰۰:۲۷
      مدیرکل

       منبع :gameover.blog.ir

      می تونید این کد رو توی Update بذارید:

      gameObject.transform.position = Input.mousePosition;
      ۰ نظر موافقین ۰ مخالفین ۰ ۰۱ مهر ۹۴ ، ۱۳:۵۵
      مدیرکل

       منبع :gameover.blog.ir

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

      http://tf3dm.com/3d-model/zombie-pack-5-zombies-fully-rigged-animated-5522.html

      http://tf3dm.com/3d-model/zombie-66495.html

      http://tf3dm.com/3d-model/romeo-zombie-84057.html

      http://tf3dm.com/3d-model/zombie-man-86116.html

      http://tf3dm.com/3d-model/engineer-zombie-96267.html

      http://tf3dm.com/3d-model/heavy-zombie-74177.html

      http://tf3dm.com/3d-model/soldier-zombie-69380.html

      http://tf3dm.com/3d-model/puo-53550.html

      http://tf3dm.com/3d-model/puo-80561.html

      http://tf3dm.com/3d-model/toon-zombie-41216.html

      http://tf3dm.com/3d-model/tf2-soldier-as-zombie-15511.html


      سگ زامبی:

      http://tf3dm.com/3d-model/zombie-dog-57394.html

      ۱ نظر موافقین ۰ مخالفین ۰ ۰۱ مهر ۹۴ ، ۱۱:۱۵
      مدیرکل
      using UnityEngine;
      using System.Collections;
      using UnityEngine.UI;
       
       
      public class SpriteTest : MonoBehaviour {
       
       
          public Image mySprite;
       
       
          void OnTriggerEnter()
          {
              Invoke("ActiveSprite",1);
          }
       
       
          void ActiveSprite()
          {
              mySprite.enabled = true;
          }
      }
      ۱ نظر موافقین ۰ مخالفین ۰ ۳۱ شهریور ۹۴ ، ۱۹:۰۰
      مدیرکل

      این گزینه نقش enabed رو بازی می کنه. اگه true باشه آیتم عمل می کنه و اگه false باشه آیتم عمل نمی کنه.

      معمولا در قسمت ui->canvas group یا اشیای زیرشاخه ی ui (واسط کاربری) در یونیتی 5 می تونید دکمه و کادر متن و عکس و ... رو به عنوان یوزر اینترفیس بسازید. و هر کدوم رو خواستید عمل نکنه گزینه ی interactable رو false کنید یا تیکشو بردارید.(توی inspector)

      http://s6.picofile.com/file/8213435050/interactable.jpg

      ۰ نظر موافقین ۰ مخالفین ۰ ۳۱ شهریور ۹۴ ، ۱۳:۳۹
      مدیرکل
      کپی:gameover.blog.ir
      این کلمه برای تعریف متغیرهایی بکار می ره که نوعشون رو نمی دونیم یا بر حسب مقدار می خوایم نوع اون رو مشخص کنیم.
      مثال:
      // i is compiled as an int 
      var i = 5;
      
      // s is compiled as a string 
      var s = "Hello";
      
      // a is compiled as int[] 
      var a = new[] { 0, 1, 2 };
      
      // expr is compiled as IEnumerable<Customer> 
      // or perhaps IQueryable<Customer> 
      var expr =
          from c in customers
          where c.City == "London" 
          select c;
      
      // anon is compiled as an anonymous type 
      var anon = new { Name = "Terry", Age = 34 };
      
      // list is compiled as List<int>                              
      var list = new List<int>();
      
      منبع :
      https://msdn.microsoft.com/en-us/library/bb384061.aspx


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

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


      اجرای یک فیلم در ابتدای بازی و از بین رفتن بعد از چند (در اینجا 10) ثانیه:
      اسکریپت زیر رو میندازیم روی یک plane.
      سپس یک فیلم کوتاه mp4 رو به پروژه اضافه می کنیم (به صورت movie texture توسط یونیتی تبدیلات انجام میشه خودکار)
      یادتون نره quick Time هم باید نصب باشه) .
      سپس فیلم رو می کشیم روی پارامتر a که از نوع MovieTexture تعریف کرده بودیم.
      حالا اجرا می کنیم

      کد PHP:
      //movieTexture.js
      //author:sajjad3011
      var MovieTexture;
      var 
      i:float=0;
       var 
      myTimer float 10.0;
      function 
      Start () {
       
      renderer.material.mainTexture a;
      a.Play();
      }
       
      function 
      Update () {

      if(
      myTimer && a.isPlaying){ 
      myTimer -= Time.deltaTime
      if(
      myTimer <= 0){Destroy(transform.gameObject); }
      }
      }
      //update 
      روی صحنه ی دلخواه میریم تا نمای خوبی داشته باشیم سپس دوربین رو انتخاب می کنیم و ctrl+shit+F می زنیم تا روی صحنه ی جاری set بشه.
      فیلم اجرا میشه و بعد از 10 واحد زمانی نابود میشه.
      بعدش می تونید هر عملی دوست داشتید انجام بدید.

      کد معادل سیشارپ:
      معادل سیشارپ:
      public MovieTexture a;
      float myTimer =10f;
      void Start(){
      renderer.material.mainTexture = a;
      a.Play();
      }
      void Update () {
      if(myTimer > 0 && a.isPlaying){ 
      myTimer -= Time.deltaTime; 
      if(myTimer <= 0){Destroy(transform.gameObject); 
      }
      }

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

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

      کد :
      void Update (){
              if (
      Input.GetMouseButtonDown (0))
                  
      Destroy (transform.gameObject);

      حرکت گیم آبجکت به سمت بالا در زمان بین 2 الی 6 ثانیه:
      کد :
      using UnityEngine;
      using System.Collections;

      public class 
      harkat MonoBehaviour {
          public 
      float speed=0.01f;
          
      // Use this for initialization
          
      void Start () {
          
          }
          
          
      // Update is called once per frame
          
      void Update () {
              if(
      2<=Time.time && Time.time <=6)
              
      transform.position = new Vector2 (transform.position.xtransform.position.Time.time speed);
          }

      از حرکت ایستادن گیم آبجکت بعد از برخورد با شی دیگر:
      برای اینکه به هر دو ابجکت کامپوننت Collider می دهیم.

      نامرعی کردن گیم ابجکت در یونیتی/مخفی کردن یا invisible کردن گیم ابجکت در یونیتی:
      کد :
      GetComponent<Renderer> ().enabled false

      بردارهای حرکت در یونیتی:
      کد:
      Vector3.zero    خلاصش میشه Vector3(0, 0, 0).
      Vector3.one    خلاصش میشه Vector3(1, 1, 1).

      Vector3.down    خلاصش میشه Vector3(0, -1, 0).
      Vector3.up    خلاصش میشه Vector3(0, 1, 0).

      Vector3.forward    خلاصش میشه Vector3(0, 0, 1).
      Vector3.back    خلاصش میشه Vector3(0, 0, -1).

      Vector3.left    خلاصش میشه Vector3(-1, 0, 0).
      Vector3.right    خلاصش میشه Vector3(1, 0, 0).
      سیستم ضرب برداری هم در اینجا بحث شده قبلا :
      http://promakers.ir/showthread.php?tid=12123

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

      اسکریپت حرکت به جایی که کلیک کردیم move2click در یونیتی:
      کد js :

      کد :
      // Click To Move script
      // Moves the object towards the mouse position on left mouse click
       
      var smooth:int=1; // Determines how quickly object moves towards position
       
      private var targetPosition:Vector3;
       
      function Update () {
          if(Input.GetKeyDown(KeyCode.Mouse0))
          {
              var playerPlane = new Plane(Vector3.up, transform.position);
              var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
              var hitdist = 0.0;
       
              if (playerPlane.Raycast (ray, hitdist)) {
                  var targetPoint = ray.GetPoint(hitdist);
                  targetPosition = ray.GetPoint(hitdist);
                  var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                  transform.rotation = targetRotation;
              }
          }
       
          transform.position = Vector3.Lerp (transform.position, targetPosition, Time.deltaTime * smooth);
      }
      اسکریپت بالا به زبون js هست.بندازید روی player.اجرا کنید. هرجا کلیک می کنید player میره اونجا.
      پارامتر smooth روی 1 تظیم شده.اگه مقدارش بیشتر بشه سرعت حرکت بیشتر میشه.
      نکته: اسکریپت فوق برای بازی های استراتژی از نمای کامل بالا کار نمی کنه)
      اسکریپت حرکت سه بعدی پلیر در یونیتی/اسکریپت کاراکتر کنترلر:

      این اسکریپت رو بدید به player .
      نکته: پلیر نباید کامپونتت rigid body داشته باشه.ضمنا یک کامپوننت character controller هم بدید به player.
      کد :

      #pragma strict
      
      function Start () {
      
      }
      private var moveDirection : Vector3 = Vector3.zero;
      function Update () {
         
       var speed=5;
       var jumpSpeed=5;
       var gravity=5;
              var controller : CharacterController = GetComponent(CharacterController);
              if (controller.isGrounded) {
                  // We are grounded, so recalculate
                  // move direction directly from axes
                  moveDirection = 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);
          
      
      }
      اسکریپت حرکت دو بعدی player به چپ و راست در یونیتی:
      کد :
      //Player.Cs
      //move 2d player Left/Right Unity
      //Author:Sajjad3011
      using UnityEngine;
      using System.Collections;
      
      public class player : MonoBehaviour {
      
          private Animator animator;
          private int walkSpeed=5;
      
          private float xScale,yScale;
          private bool run;
      
          void Start () {
              animator = this.GetComponent<Animator> ();
              xScale = transform.localScale.x;
              yScale = transform.localScale.y;
      
          }
      
          void Update(){ 
              if (Input.GetKey(KeyCode.RightArrow)) {
                  run=true;
                  GetComponent<Rigidbody2D>().velocity=new Vector2(walkSpeed,GetComponent<Rigidbody2D>().velocity.y);
                  transform.localScale=new Vector2(xScale,yScale);
              }
              if (Input.GetKey (KeyCode.LeftArrow)) {
                  run=true;
                  GetComponent<Rigidbody2D>().velocity=new Vector2(-walkSpeed,GetComponent<Rigidbody2D>().velocity.y);
                  transform.localScale=new Vector2(-xScale,yScale);
              }
              if (Input.anyKey==false){
                  GetComponent<Rigidbody2D>().velocity=new Vector2(0,GetComponent<Rigidbody2D>().velocity.y);
                  run=false;
              }
      
              if (animator != null) {
                  animator.SetBool ("run", run);
      
              }
      
          }
      }


      به این بخش مراجعه بفرمایید: http://promakers.ir/showthread.php?tid=12196



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

      منبع : gameover.blog.ir

      سعی کنید برای کدهاتون توضیح بذارید و dirty code رو به clean code ویرایش کنید.
      کد تمیز کدی هست که فهم و درک اون آسونتر و کد کثیف کدی هست که فهم و درکش سخت تر باشه.
      مثال:
      کد کثیف:

      کد:
      if (Input .GetAxis ("Horizontal")<0)//Left
      کد اصلاح شده تمیز:
      کد :
      if (Input.GetKey(KeyCode.LeftArrow))//Left 
      کد کثیف:
      کد:
      if (Input .GetAxis ("Horizontal")>0)//Right
      کد اصلاح شده ی تمیز:
      کد :
      if(Input.GetKey (KeyCode.RightArrow))//Right 
      کد کثیف:
      کد:
      if (Input .GetAxis ("Vertical")>0)//Up
      کد اصلاح شده ی تمیز:
      کد :
      if (Input.GetKey (KeyCode.UpArrow))//Up
      ۰ نظر موافقین ۰ مخالفین ۰ ۳۰ شهریور ۹۴ ، ۱۶:۵۵
      مدیرکل
      draw_text(100,100, chr(97));
      draw_text(100,150, ord('a'));
      کپی از : gameover.blog.ir
      ord('A');//out: 65
      
      chr('65')';//out: 'A'
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۹ شهریور ۹۴ ، ۱۸:۵۰
      مدیرکل
      کپی از : gameover.blog.ir
      آموزش Rigging در 3dsmax
      خوب مثل اینکه تا خودم شروع نکنم کسی شروع نمی کنه.چند روزی هست دارم مطالعه می کنم و شبا فیلم آموزشی دانلود می کنم که زیاد به دردم نخورد و فکر کنم خودم باید به شیوه ی خودم یاد بدم تا بتونم توی کارهای تیمی بچه ها رو بیارم بالا . یکی برای بازی رستم و دیگه برای قوی تر شدن و انجام پروژه های بعدی انشاءا... big grin
      --
      دو تا سیستم رو فعلا عنوان می کنم: CAT + Biped

      CAT یا ابزار انیمیشن کاراکتر :

      [تصویر: catParent.jpg]

      برای دسترسی به این سیستم به بخشCreate و سپس Helper رفته و از لیست گزینه ی CAT objects و سپس Cat parent رو انتخاب می کنیم. و بعدشم اگه بخوایم انسان رو ریگ کنیم Base Human رو می زنیم بعدش توی صحنه کلیک می کنیم و Drag می کنیم(ماوس رو در حالی که کلیک رو نگه داشتیم حرکت می دیم و سپس رها می کنیم) تا یک استخوانبندی انسانی به صورت مربعی مانند ساخته بشه.
      گزینه های دیگه ای هم هست که برای ریگ موجودات مختلف بکار می ره.
      در اینجا من سیستم CAT رو نمی خوام استفاده کنم ولی فقط اصطلاحاتشو می گم تا یکم براتون راحت بشه :

      vertebrae=استخوان مهره
      Quadrupeds =چهارپایان
      biped=دو پا
      marine=دریایی
      alien=بیگانه
      angel=فرشته
      ape=میمون
      centipede=هزارپا
      lizard=مارمولک
      mech=شاید به معنی مکانیکی باشه
      panther=پلنگ
      spider=عنکبوت
      pelvis=لگن خاص
      بقیه هم چون نمیدونستم ترجمه نکردمbig grin


      سیستم Biped:

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


      ما قراره رستم رو انیمیت کنیم. رستم یه وجود دو پا هست. پس باید از روش ریگ دوپایان که به انگلیسی میشه Biped (بای پِ د) استفاده کنیم.


      برای ایجاد سیستم دوپا ، به منوی Create و سپس System و سپس Biped برید.

      سپس در داخل صحنه Drag کنید تا استخوان بندی دلخواه شا ایجاد بشه به صورت خیلی زیباتر برای انسان:
      [تصویر: rig_Biped_3dsMax.jpg]


      در شکل بالا من اومدم قسمت های مختلف استخوان پا و دست و کمر و غیره رو با کلیک انتخاب کردم و جابجا کردم و چرخش دادم. شما هم می تونید قسمت های مختلف رو انتخاب کنید و کلید W رو برای جابجایی و کلید R رو برای تغییر مقیاس بزنید . و کلید E رو برای چرخش استفاده کنید.

      با Ctrl+A می تونید کل استخوان ها رو انتخاب کنید.

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

      یکی از فرق های سیستم Biped با CAT اینه که توی Biped ما نمی تونیم به صورت تکی استخوان ها رو Scale یا تغییر اندازه بدیم. و باید کل استخوان ها رو انتخاب کنیم و Resize کنیم. علتش اینه که Biped دقیقا استاندارد هست و استخوانها از هم جدا نمی شن و دقیقا مثل استخوانبدی انسان هست که توی بدن ما خداوند متعال ایجاد کردهhappy
      -
      برای ساخت انیمیشن هم یک دکمه ی کلید هست که تغییرات هر فریم رو در time Slider یا نوار لغزان زمانی میشه ثبت کرد و یک دکمه ی autokey که وقتی نوار انیمیشن رو جابجا می کنیم دیگه نیاز به زدن آیکن کلید نیست بلکه خودکار تغییراتی که می دیم رو ثبت می کنه و برای ذخیره هر تغییر جدید فقط کافیه نوار زمانی رو جابجا کنیم و ببریم جلوتر و تغییرات بعدی رو انجام بدیم و در نهایت انیمیشن رو Play می کنیمbig grin
      -
      تا اینجا شد سیستم Biped (دو پایان) و ایجاد انیمیشن که واسه یادگیریش باید هزارتا فیلم یوتیوبی و غیره و ... رو دانلود می کردیم و حجم می زدیم تا آخرشم بلانسبت گیج تر بشیم Smile اما من خیلی روون و ساده یاددادمwinking
      -
      کاری که باید بکنیم اینه که انیمیشن رو ایجاد کنیم و سپس مدلی رو بسازیم یا حالا دانلود کنیم و ببریم توی تری دی استادیو مکس و سوار کنیم روی استخوون تا مدل هم مثل استخون همون حرکات رو اجرا کنه.
      -
      برای اینکار باید استخون رو دقیقا توی مدل قرار بدیم که برای راحتی کار توصیه می شه فریم اول استخون به حالت T form یعنی دست باز باشه و همچنینن تمام انشتان دست و پا و استخوان ها داخل مدل جاسازی بشه تا حرکت طبیعی تری رو داشته باشیم.
      -
      لطفا تمرین کنید و نمونه کارهاتونو تو بخش نمونه کارها بذارید و بگید که با آموزش من یاد گرفتید big grin


      ----

      منبع :
      autodesk

      مترجم:sajjad3011

      3ds Max برای پویا سازی و Rigging کاراکتر دارای دو سیستم فرعی است :(CAT و character studio )
      اگر چه برای هر یک از این دو سیستم فرعی تنظیمات ویژه ای وجود دارد ، می توان آنها را با دو اصلاحگر Physique modifier و Skin modofier سفارشی کرد و هر دوی آن ها با تعدادی از فرمت فایل های motion capture سازگارند.

      اما بین سیستم CAT ( ابزار انیمیت کاراکتر)، و character studio تفاوت های مهمی وجود دارد.بهترین روش برای تشخیص اینکه کدام یک از این دو سیستم برای کار روی پروژه ی شما مناسب تر است آن است که ابتدا هر دوی آن ها را بیاموزید و سپس طبق تجربه،تصمیم بگیرید هرکدام را که مایلید انتخاب نمایید.

      در زیر مقایسه ای بین آن دو داریم:

      CAT :
      این سیستم با توجه به پیشرفته بودنش در بعضی اوقات ساده ترین روش برای انیمیشن کاراکتر هست. با CAT می تونید به سادگی کاراکترهای چند پا و غیرانسانی خود را rig و animate کنید.حتی می توانید کاراکترهای انسانی خود را به طور واقع گرایانه ای rig کنید.از بین ریگ های ساخته شده با CAT ،موجودات فرز و چابکی مثل اژدها(dragon) با 4 پا و 2 بال،عنکبوت(spider)،و یک چندپا(centipede) با 8 پا وجود دارد.شما می توانید همه ی اینها را به آسانی بدون استفاده از graph-based CATMotion editor انیمیت کنید. CATMotion بهترین گزینه برای اصلاح حرکت چرخشی در زمان واقعی با استفاده از تنظیم پارامترها برای بخش هایی از بدن مثل لگن خاصره(pelvis) است;این پارامترها عبارتند از Twist(پیچ و تاب) و Roll(گردش) و Pitch (پیچ)و Lift (آسانسور) و Push (فشار) .

      قدرت دیگر و نسبتا آسان به استفاده از ویژگی CAT ، سیستم لایه بندی(layering system) است.هر دوی آنها از طریق CATMotion(برای چرخه بخش بدن فردی) و در full-rig level با فریم های کلیدی وزن گذاری شده(keyframed weighting) در هر دو سطح قابل دسترسی هستند.دومین مورد،پشتیبانی از رمز گذاری سیستم رنگ بندی لایه هاست و با استفاده از آن می توان فهمید که کدام لایه به حرکت در هر لحظه ی داده شده کمک می کند. CAT همچنین از ادغام بین FK و IK برای کنترل سفارشی حمایت می کند.

      در آخر، CAT ،ماهیچه و اشیای استاندارد ماهیچه ای را برای شبیه سازی ساختمان عضلانی ایجاد می کند.
      در درس بعضی character studio را مختصر شرح میدهیم.winking

      character studio:
      این سیستم،شامل یک مجموعه ابزار وسیع برای character-animation می باشد که میتواند با کاراکترهای چندپا کار کند اما در درجه ی اول برای ریگ دوپایان(bipedal rigs) در نظر گرفته شده است.از این رو بر ابجکت اصلی آن اسم Biped نهاده شده است.همچنین بخشی از character studio عبارت است از Physique modifier (مدیفایر فیزیک) برای skinning ریگ های کاراکتر. Physique می تواند با ابجکت های ریگ غیر از Biped و خصوصیاتی مثل بخش های user-definable rigid (جامد تعریف شده ی کاربر) و deforming(تغییر شکل) استفاده شود سومین کامپوننت character studio عبارت است از Crowd که انیمیشن روالی از گروه های بزرگی از کاراکترها را با رفتارهایی مثل اجتناب(avoidance)،حرکت تصادفی،دنبال کردن یک سطح امکان پذیر می کند. Biped کامپوننت character studio ی قدرتمند و پیشرفته تری است.از ویژگی های آن می توان به ایجاد procedural footstep (قدم زدن رویه ای)، freeform animation(انیمیشن فرم آزاد)،یک ویاریشگر انیمیشن ویژه به نام Workbench و یک خصوصیت انیمیشن غیرخطی به نام Motion Mixer (در دسترس برای انیمیشن عمومی) اشاره کرد.همچنین،خصوصیت Motion Flow تولید اسکریپت تصادفی،انتقالات رویه ای(procedural transitions) و بیشتر ... را ارائه می دهد.


      این PDF هم skinning یا سوار کردن مدل روی استخون biped رو یاد میده:
      http://images.autodesk.com/adsk/files/3dsmax_2010_character_animation.pdf


      ۰ نظر موافقین ۰ مخالفین ۰ ۲۸ شهریور ۹۴ ، ۰۰:۵۸
      مدیرکل
      کپی از : gameover.blog.ir
      با اسکریپت زیر دشمن همیشه به player نیگا می کنه


      using UnityEngine;
      using System.Collections;

      public class 
      ExampleClass MonoBehaviour {
          public 
      Transform target;
          
          
      void Update() {
              
      // Rotate the camera every frame so it keeps looking at the target 
              
      transform.LookAt(target);
          }
      }


      متغیر target از نوع public تعریف شد.
      target یعنی هدفی که می خوایم دشمن بهش نگاه کنه.
      بنابراین می تونیم اسکریپت رو بندازیم روی دشمن و سپس player رو بکشیم بندازیم روی پارامتر target که به صورت پابلیک ساختیم.
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۷ شهریور ۹۴ ، ۲۳:۱۴
      مدیرکل
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۵ شهریور ۹۴ ، ۲۱:۲۸
      مدیرکل
      14 ثانیه صبر و رد تبلیغ رو بزنید :

      http://opizo.com/JQrH7Q


      ۰ نظر موافقین ۰ مخالفین ۰ ۲۵ شهریور ۹۴ ، ۲۱:۰۰
      مدیرکل
      روی لینک زیر کلیک کنید. بعد از 14 ثانیه رد تبلیغ رو بزنید:


      http://opizo.com/UEkDFS


      PDF رو بخونید قدم به قدم مراحل رو طی کنید. موفق باشید

      ۰ نظر موافقین ۰ مخالفین ۰ ۲۵ شهریور ۹۴ ، ۱۶:۱۳
      مدیرکل
      چرخش حول محور z :
      transform.Rotate(0, 0, 100*Time.deltaTime);  //fast anti-clockwise rotation
       transform.Rotate(0, 0, 10*Time.deltaTime);   // slower  anti-clockwise rotation
       transform.Rotate(0, 0, 100* -Time.deltaTime);  // fast clockwise rotation
       transform.Rotate(0, 0, 10* -Time.deltaTime);   // slower clockwise rotation

      چرخش به سمت ماوس:
      void Update () {
      Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
      transform.rotation = Quaternion.LookRotation(Vector3.forward, mousePos - transform.position);
      }


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

      پاسخ:
      گاهی علت این است که به گیم ابجکت های خود collider های 2D داده ایم اما در اسکریپت خود از توابع 3D در اسکریپ های خود استفاده کرده ایم.

      برای حل مشکل از مثال زیر الگو بگیرید :

      کد سیشارپ:
              void OnTriggerEnter2D(Collider2D other) {
              
      Debug.Log("OnTriggerEnter 2D");
              } 

              
      void OnCollisionEnter2D(Collision2D coll) {
              
      Debug.Log("OnCollisionEnter 2D"); 
      نکته ی دوم اینه که هر دو گیم ابجکت باید collider 2d داشته باشد.
      نکته سوم : بلعکس موارد فوق هم ممکنه رخ بده که خودتون می تونید جابجا کنید توابع 2D رو با توابع 3D.
      ۱ نظر موافقین ۰ مخالفین ۰ ۲۴ شهریور ۹۴ ، ۰۲:۰۲
      مدیرکل

      gameover.blog.ir

      تکنیک یک : یونیکد

      🔶🔶🔶🔶تایپ فارسی در یونیتی/فارسی نویسی در یونیتی:(آموزش:سجاد)

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

      1)این سایت برای پیدا کردن کد کاراکترهای فارسی و انگلیسی و غیره به کارتون میاد :
      https://unicode-table.com/en/#arabic

      2) این کد برای تبدیل کد هگزا دسیمال به کاراکتر مورد نظر هست(کدش به زبان سیشارپ هست و در یونیتی ازش استفاده می کنیم)

      char upArrow = '\u25B2';
      Debug.Log(upArrow.ToString());

      سایت رو می بینید؟ سمت چپش هر کاراکتر کد هگز داره

      مثلا 0620 میشه "ی" فارسی

      با بک اسلش یو،اومده می گه می خوام یونیکد تایپ کنی برام
      بعدش کد اسکی می ده که در مبنای شانزده یا هگزا دسیمال هست
      25B2

      برد یم دسیمال دهدهی

      decimal=مبنای ده

      اگه alt نگه داری 9650 بزنی اون کاراکتر تایپ میشه

      اگه هم توی یونیتی بخوای باید همین 9650 رو تبدیل به هگزا دسیمال کنی بعدش بدی به تابع ToString

      تبدیل کنه به رشته

      با \u


      char upArrow = '\u25B2';
      Debug.Log(upArrow.ToString());

      بلی

      باید برید تو سایت https://unicode-table.com/en/#arabic

      کد تمام حروف رو در بیارید

      از a تا z
      از الف تا ی
      و الی آخر


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

      توی یونیتی

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

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

      یا رشته دلخواه


      اها تازه فهمیدم😃

      =====


      تکنیک دو:

      با استفاده از یک فارسی ساز می تونید متن فارسی رو به یونیتی انتقال داده و از فونت مجازش توی یونیتی استفاده کنید.
      به عنوان مثال فونت F_unwan.ttf (فونت هایی که اولشون F داره) برای فارسی ساز Leo moon کار می کنه که می تونید این فونت رو بکشید توی project و سپس یک ui canvas Text ایجاد کرده و فونت رو بکشید روی پارامتر Font در inspector.
      سپس متن تایپ شده در Leomoon رو کپی کنید توی فیلد Text در inspector .
      [تصویر: farsi_unity.gif]




      کل کاراکترهای فارسی رو با Leomoon کپی بگیرید

      ببر توی یک آرایه در یونتی ذخیر کنید


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

      IEnumerator PlayText()
      {   
       for (int i=myString.Length-1;i>0i--) {
       
        TTX.text = myString[i] + TTX.text ;
          yield return new WaitForSeconds (0.125f);
      
       }
      }

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

      //move and jump -
      //attach this Script to ur Player
      //hot keys :  
      //            ArrowKeys=Move
      //            Space=Jump
      //Edided by : sajjad3011
          
      var speed float 6.0;
          var 
      jumpSpeed float 8.0;
          var 
      gravity float 20.0;

          private var 
      moveDirection Vector3 Vector3.zero;
          function 
      Start()
          {
                
      //this.gameObject.AddComponent(Rigidbody);//afzudane fizik
                
      this.gameObject.AddComponent(CharacterController);//afzudane character controller
          
      }
          function 
      Update() {
              var 
      controller CharacterController GetComponent(CharacterController);
              if (
      controller.isGrounded) {
                  
      // We are grounded, so recalculate
                  // move direction directly from axes
                  
      moveDirection Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));
                  
      moveDirection transform.TransformDirection(moveDirection);
                  
      moveDirection *= speed;
                  
                  if (
      Input.GetButton ("Jump")) {
                      
      moveDirection.jumpSpeed;
                  }
              }

              
      // Apply gravity
              
      moveDirection.-= gravity Time.deltaTime;
              
              
      // Move the controller
              
      controller.Move(moveDirection Time.deltaTime);
          }



      واسه تشخیص برخورد هم ابتدا گیم ابجکت دلخواه رو انتخاب می کنی و add component و سپس box collider (محدوده ی مکعبی شکل) یا sphere collider( محدوده ی کره ای شکل برای شخص کردن ناحیه برخورد) میدی بهشون.
      rigid body هم ندادم چون کمی مشکل ساز میشه
      کد خیلی ساده هست . با کد یک کاراکتر کنترلر اضافه کردم. می تونستم دستی هم تو بخش طراحی با دکمه add component و تایپ character controller و enter اضافه کنم که خودم کدنویسی رو چون دوست داشتم با کد اضافه کردم
      ۲ نظر موافقین ۰ مخالفین ۰ ۲۳ شهریور ۹۴ ، ۱۸:۰۹
      مدیرکل
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۳ شهریور ۹۴ ، ۰۲:۱۵
      مدیرکل
      کل مطلب در RayCast خلاصه میشه.
      ایده :

      http://answers.unity3d.com/questions/438175/enemy-ai-detect-player-when-seen.html


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

      چند فرد مسلط به یونیتی برای ساخت بازی دو بعدی پیام بدن.

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

      اینو بذار تو update:
      واسه چرخش:

      کد:

      transform.Rotate (new Vector3(0, Time.deltaTime, 0) * rotationSpeed );
      به جای rotationSpeed هم سرعت دلخواه رو بده. پاراکتر اول و آخر Vector3 رو صفر دادم که x,z هستن.ما میخوام حول y بچرخه واسه همین پارامتر دوم رو هر لحظه با زمان افزایش میدیم و بردار بدست اومده رو در سرعت دلخواه ضرب می کنیم که زاویه چرخش هی زیاد میشه و همینطور می چرخه.
      واسه حرکت هم : مثال:
      کد:

      //transform.position.Set(new_x,new_y,new_z);
      transform.position.Set(transform.position.x,transform.position.y,new_z)
      ۴ نظر موافقین ۰ مخالفین ۰ ۱۷ شهریور ۹۴ ، ۱۹:۰۲
      مدیرکل


      Vector3.zero    خلاصش میشه Vector3(0, 0, 0).
      Vector3.one    خلاصش میشه Vector3(1, 1, 1).

      Vector3.down    خلاصش میشه Vector3(0, -1, 0).
      Vector3.up    خلاصش میشه Vector3(0, 1, 0).

      Vector3.forward    خلاصش میشه Vector3(0, 0, 1).
      Vector3.back    خلاصش میشه Vector3(0, 0, -1).

      Vector3.left    خلاصش میشه Vector3(-1, 0, 0).
      Vector3.right    خلاصش میشه Vector3(1, 0, 0).


      myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
      ادامه ی بحث:
      http://promakers.ir/showthread.php?tid=12123&pid=125881#pid125881
      ۰ نظر موافقین ۰ مخالفین ۰ ۱۷ شهریور ۹۴ ، ۱۴:۵۵
      مدیرکل
      منبع: gameover.blog.ir



      //test.Csharp
      //Switch between animations of Animator component by changing the condition variable 'state'
      //Author:Sajjad3011
      
          using UnityEngine;
          using System.Collections;
          public class test : MonoBehaviour {
              int state = 0;
              public Animator animator1;
              void Start () {
              }    
              // Update is called once per frame
              void Update () {
                  if (Input.GetKey (KeyCode.LeftArrow)) {
                      state = 1;
                      Debug.Log("left");
                  }
                  if (Input.GetKey (KeyCode.RightArrow)){
                      state = 2;
                      Debug.Log("right");
              }
                  if (animator1 == null) {
                      Debug.LogError("Animator is null!");
                  } else {
                       animator1.SetInteger("state", state);
                  }
          
              }
          }
      
      //S3011 
      در این اسکریپت متغیر animator1 رو به صورت Public تعریف کردیم تا بتونیم بعد از اختصاص این اسکریپت، توی پنجره inspector به صورت پارامتر ورودی تنظیم کنیم.

      متغیر state از کامپوننت Animator رو با فشردن کلید چپ و راست روی 1 و 2 تنظیم می کنیم و توی پنجره ی ماشین حالت Animator هم شرط یا condition ای به نام state از نوع Integer تعریف می کنیم و روی فلشی که به سمت انیمیشن سمت راست می ره می گیم اگه state مساوی(Equal) بود به 1 و روی فلشی که به سمت انیمیشن دویدن به سمت چپ می ره می گیم اگه state مساوی(Equal) بود به 2 .


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

      بعد از 14 ثانیه رد تبلیغ رو بزنید لینک مستقیم فایل mp4 میاد.حجم حدود 43 مگ هست.

      http://media.farsnews.com/media/Uploaded/Files/Images/1394/06/14/13940614000151_PhotoI.jpg

      http://opizo.com/K3GPhx

      ۰ نظر موافقین ۰ مخالفین ۰ ۱۶ شهریور ۹۴ ، ۱۰:۳۱
      مدیرکل
      ثانیه صبر کنید سپس رد تبلیغ و بزنید تا به صفحه مورد نظر هدایت بشید. یادتون نره بدون شیلتر فکن وارد بشید:

      http://opizo.com/hMhAqi


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

      http://s6.picofile.com/file/8210293142/The_animator_s_survival_kit.jpg

      روی لینک کلیک کنید و 14 ثانیه منتظر بمانید و سپس رد تبلیغات رو بزنید.

      حجم: تقریبا 30 مگابایت

      فرمت : PDF

       

      http://opizo.com/tuOzcG

      اگه لینک خراب بود بگید اصلاح کنیم.

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


      http://opizo.com/7Xxi7g


      بهترین بازی های اندرویدی سال 2014 از نگاه گوگل:

      http://opizo.com/C5l1PI


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

      می خوای چیکار کنی با این کد؟ موبایل رو کج کنی به راست و چپ موتور یا ماشین فرمون بده به چپ و راست ؟
      با این عکسا روحیه بدم بهت؟ Gyroscope

      http://www.i-phone.ir/forums/uploadedpictures/8cc1d230c10801cfb2144d6bac42639f.jpg

      http://www.techtilt.com/wp-content/uploads/2010/06/iPhone-4-Gyroscope-640x410.jpg


      http://opizo.com/AJjJkF

      ۰ نظر موافقین ۰ مخالفین ۰ ۱۲ شهریور ۹۴ ، ۱۱:۴۷
      مدیرکل
      منبع : gameover.blog.ir
      این کد سطرهای یک فایل رو که شامل لینک های وب هست از فایل 1.txt می خونه و به صورت لینک در تگ a href نشون میده :

      <?php
      //Link saz
      //Author:sajjad3011
      $file = fopen("1.txt","r");
      
      while(! feof($file))
        {
       $myStr= fgets($file);
        echo "<a href='" . $myStr . "' >" .   $myStr . "</a><br />";
        }
      
      fclose($file);
      ?>


      ۰ نظر موافقین ۰ مخالفین ۰ ۱۲ شهریور ۹۴ ، ۰۳:۵۱
      مدیرکل
      منبع :gameover.blog.ir
      1. if(!playerController.IsGrounded() && playerController.velocity.y < 0)
      2. {
      3. animation.CrossFade("FallDown", 0.5);
      4. animation["FallDown"].speed = 3;
      5. }


      منبع :
      http://answers.unity3d.com/questions/776750/fall-animation-when-character-is-falling.html

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

       منبع :gameover.blog.ir

      به برنامه ایکلیپس برید و از منوی بالاش Help رو بزنید بعد هم Install New Software.


      http://bayanbox.ir/id/3700347232681624161?view


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

      منبع : gameover.blog.ir


      Edit->Resources->Open Resource Folder

      مسیر دیگر

      Settings->Manage Resources


      مسیر نصب براش ها :

      AppData\Roaming\krita\share\apps\krita\brushes


      ---

      فایل های داخل پوشه های Brush و pattern و paintoppressets رو از پوشه ی دانلودی در پوشه های متناظر مسیر AppData\Roaming\krita\share\apps\krita کپی کنید. بعدش krita رو ریست کنید و حالشو ببرید.


      ۱ نظر موافقین ۰ مخالفین ۰ ۰۹ شهریور ۹۴ ، ۰۵:۴۶
      مدیرکل
      منبع: gameover.blog.ir
      برای اینکار باید به قسمت Global Game settings سربرگ Other برید.

      http://s6.picofile.com/file/8209107150/disableDefautKey.jpg


      البته بهتره با game maker studio کار کنید و همچنین یادتون باشه کدهای save نداریم و باید از توابع و فایل های ini استفاده کنید.
      ۰ نظر موافقین ۰ مخالفین ۰ ۰۷ شهریور ۹۴ ، ۱۹:۰۱
      مدیرکل

       منبع :gameover.blog.ir



      ctrl+shift+B

      Player settings

      Other settings

      miminum api Level

      android 2

      http://s3.picofile.com/file/8208463468/buildSettingMinimumAndroidRequirement.gif


      ۰ نظر موافقین ۰ مخالفین ۰ ۰۳ شهریور ۹۴ ، ۲۱:۱۳
      مدیرکل
      منبع :gameover.blog.ir
      <?php
      $str = 'php is easy and powerful';
      echo preg_match('/php/', $str);
      ?>
      خروجی کد بالا برابر با 1 خواهد بود، البته 1 در اینجا یعنی کلمه مورد نظر در عبارت وجود دارد.

      مثال بعدی:
      - بررسی یک رشته متنی برای حرف a-z و اعداد 0-9 در JavaScript
      در این مثال می خواهیم رشته متنی را در JavaScript بررسی کنیم و ببینیم آیا تنها شامل حروف a-z، اعداد 0-9 و فضای خالی است یا خیر، خواهیم نوشت:
      <script type="text/javascript">
      var str = 'Regex is so Simple!!';
      var reg = /^[0-9A-Za-z ]*$/;
      if(reg.test(str)){
          alert('مقادیر معتبر است');
      }
      else{
          alert('مقادیر معتبر نیست');    
      }
      </script>

      مطالعات بیشتر(منبع webgoo)
      http://webgoo.ir/154/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%B9%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A8%D8%A7-%D9%82%D8%A7%D8%B9%D8%AF%D9%87-regular-expressions

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

       منبع :gameover.blog.ir


      ما توی basic4android یا بعضی زبونا یه چیز داریم به نام Exception یا همون "استثنا"ی خودمون. از این استثنا با نام خلاصه ی e هم توی سیشارپ یا بعضی زبون ها و حتی گاهی جاوا استفاده می شه.

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

       منبع :gameover.blog.ir


      velocity

      سرعت حرکت یا شتاب رو تعریف می کنه.سرعت دوربین+کامپوننت انیماتور+سیستم ذره ای پارتیکل(دود و جرقه و ....)+بدنه های فیزیکی جامد و سخت(rigid body)+کامپوننت character controller و .... .
      ۱ نظر موافقین ۰ مخالفین ۰ ۰۱ شهریور ۹۴ ، ۲۳:۴۰
      مدیرکل

      کپی از : gameover.blog.ir

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

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

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

      منبع : gameover.blog.ir


      توی رویداد key press Any key از گیم میکر استادیو اینو بذارید :


      کد :

      window_set_captionstring(keyboard_lastkey));//room_caption = string(keyboard_lastkey) ;
      ۰ نظر موافقین ۰ مخالفین ۰ ۰۱ شهریور ۹۴ ، ۰۲:۱۶
      مدیرکل

      منبع : gameover.blog.ir

      بعضی از پروژه های گیم میکر استادیو هستن که توی خروجی apk خطای کامپایلر null زیر رو نشون می دن و build failed میشه.

      کد:
      BUILD FAILED
      C:\Users\User\AppData\Local\Android\android-sdk\tools\ant\build.xml:650: The following error occurred while executing this line:
      C:\Users\User\AppData\Local\Android\android-sdk\tools\ant\build.xml:691: null returned: 1
      اما پروژه های دیگه شما بدون خطا به apk بیلد میشه.

      هیچکس دلیل رو نمی دونه یا اکثرا می گن برو SDK یا JDK رو عوض کن یا گیم میکر استادیو رو حذف و نصب و .. کن.

      اما علت اصلی از خود پروژه شماست.

      علت اصلی این خطا در اغلب پروژه ها اینه که Display name و Package name رو درست ندادید.

      باید برید به مسیر Global game Options->Android Tab->Display name و اسم مناسبی با کاراکتر های مجاز بدید.

      مثلا نباید اسم دارای پرانتز باشه یا  فاصله یا حروف بزرگ یا کاراکترهای غیرمجاز و .... big grin

      با تغییر اسم می تونید به راحتی خروچی apk بگیرید.

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

      هوش دشمن (Enemy AI)


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

      gameover.blog.ir

      تگ یا Tag عنی برچسب یا اسم مستعار.
      توی html ما قبلا به چند تا ابجکت id می دادیم که ثابت بود و هر ابجکت یه اسم ثابت داشت نمی تونستیم تغییرش بدیم ولی می تونستیم یه کلاس یا class تعریف کنیم و همه ی ابجکت های لخواه رو از نوع اون کلاس تعریف کنیم یا برچسب بزنیم. بعدش که میخواستیم تغییراتی روی اون ابجکت ها ایجاد کنیم دیگه دستی اینکار سخت بود. کافی بود اسم اون کلاس رو داشته باشیم و خصوصیاتشو دستکاری کنیم یا بهشون دستیابی داشته باشیم.
      توی html چیزی بود تو مایه های tagByName یا tagByID که بهش ایدی میدادیم و خودش همه رو لیست می کرد بعدش میریختیم توی ارایه و با یه حلقه ی تکرار به کل ابجکت های ریخته شده توی ارایه دسترسی داشتیم و یه سری عملیات کلی روی اونا انجام میدادیم.

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

      gameover.blog.ir

      AI = Artificial Intelligence به معنی هوش مصنوعی هست.

      هوش رو با منطق(logic) (دستورات شرطی مثل and و not و or و if و ... ) میسازن.

      بعضی جاهاشو هم با دستورات محاسبات یا ریاضیات (Mathematics) میسازن(مثل add و sub و ... و دستورات جمع و تفریق و ... که توی درس assembly یا ... می تونید بخونید توسط CPU انجام میشه)

      سال 86 یا 87 بود اگه اشتباه نکنم یه کد هوش مصنوعی با CPP نوشته بودم که واقعا فکر می کرد و می تونست یاد بگیره و مغزشو گسترش بده و تصمیم بگیره تا در کل یک منطقه به حرکت در بیاد. روش کار من الگوریتم پر کردن یک ناحیه ی بسته بود که با داشتن مختصات داخل اون میومدم چهار جهتش رو بررسی می کردم اگه اطرافش خالی بود مختصات نقاط اون چهار طرف بالا و پایین و چپ و راست رو save می کردم توی یک stack یا پشته یا آرایه و بعدش اونا رو دونه دونه از آرایه بیرون میاوردم و چهار جهت هر یک از اونا رو دوباره بررسی می کردم که جای خالی داریم یا نه اگه داشتیم مختصات اون نقاط رو بازم می ریختم توی آرایه و همینطور الی آخر تا همه جا رنگ آمیزی بشه.

      خوب این روش کمک های زیادی به ما می کنه و می تونیم چیزای زیادی برای درک خوش مصنوعی در زندگی و جاهای دیگه ازش یاد بگیریم.

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

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

      اینا همش از لحاظ تئوری،توضیحات بود که من براتون دادم.sajjad3011

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


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

      منبع :gameover.blog.ir

      توی یونیتی این روش رو میشه با way points ایجاد کرد که بالاتر درس دادم.

      روش کار A star اینه که تمام مسیر ها رو باید توی آرایه یا یه لیستی ذخیره کنیم و فاصله ها رو محاسبه کنیم.(جستجوی مکاشفه ای یا huristic)

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

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

      مثلا زمانی که player بیکار هست یا ایستاده می تونید محاسبات اضافه رو انجام بدید. یا وقتی کاراکتر روی فلان نقطه ( onCollisionEnter یا ...) هست فاصله ی نزدیک ترین مسیر و بهینه ترین مسیر رو پیدا کنیم بعدش دشمن رو حرکت بدیم بیاد سمت ما(player)

      مثلا این عکس رو ببینید :
      [تصویر: a_star_sajjad3011.jpg]

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

       منبع :gameover.blog.ir

      یک plane به عنوان زمین و چند تا cube به عنوان مانع بذارید روی plane .
      یه sphere با متریال زرد رنگ به نام player1 با تگ Player ایجاد کنید.
      یه cube با متریال قرمز رنگ به نام enemy به عنوان دشمن ایجاد کنید که قراره هوش بدیم بهش و یه rigid body component بدید بهش.(چطوری؟ بپرسید تازه کاراbroken heart )
      -

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

       منبع :gameover.blog.ir

      http://s5.picofile.com/file/8153967184/way_ai.jpg

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

      منبع :gameover.blog.ir
      اسکریپت خود را به زبان js ایجاد در بخش تعریف متغیرهای سراسری (قبل از تابع Start) این را بنویسید:

      کد:
      var اسم دلخواه مجاز: Transform[];
      مثال:
      کد PHP:
      var waypoints Transform[]; 

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

      گیم ابجکت رو انتخاب و به زیر شاخه ی اسکریپت در کادر خصوصیات(inspector) نگاه کنید و پارامتر size رو بیابید.

      تغییرش بدید تا طول آرایه تغییر کنه.(مثال: اگه size رو دید 3 ، سه تا پارامتر Element0 و Element1 و Element2 ایجاد میشه.)

      نوع رو چون Transform گذاشته بودیم می تونیم گیم ابجکت های دلخواه رو بکشیم بندازیم توی هریک از این سه سلول آرایه.

      یک کاربرد : ساخت نقاط روی یک مسیر و استفاده برای مسیر یابی در بازی های مختلف(ورزشی،مسابقه ای،استراتژی و الی آخر...)

      در بخش AI in Unity انجمن (زیر شاخه ی بخش مقالات اموزشی Unity) ساخت یک موجود هوشمند ساده رو با همین روش و یه دو تا کد کوچولو یادتون میدم. خودتون مراجعه کنید بعدا.
      ۰ نظر موافقین ۰ مخالفین ۰ ۳۰ مرداد ۹۴ ، ۰۴:۰۶
      مدیرکل


      مباحث ساده هوش مصنوعی
      http://promakers.ir/showthread.php?tid=8810
      http://promakers.ir/showthread.php?tid=1...#pid109686

      تشکرها کم بود ولی عیبی نداره . در درس بعدی Lerp رو یاد می دم و بعدش احتمال داره روی Slerp بحث کنم. با توجه به اینکه به سایت های
      ۰ نظر موافقین ۰ مخالفین ۰ ۳۰ مرداد ۹۴ ، ۰۴:۰۶
      مدیرکل

      کپی شده از gameover.blog.ir

      آموزش image effect (افزودن افکت بلور یا image blur Effect در یونیتی):
      --
      دوربین اصلی را انتخاب کنید.

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

      //treble jump unity _ 2d
      //gameover.blog.ir
       if (jumpkeydown) { if (grounded) { rigidbody2D.velocity.y = 0; rigidbody2D.AddForce(new Vector2(0, jumpForce)); candobulejump = true; } else if (candoublejump) { candoublejump = false; cantreblejump=true; rigidbody2D.velocity.y = 0; rigidbody2D.AddForce(new Vector2(0, jumpForce)); } else if (candtreblejump) { candtreblejump= false; rigidbody2D.velocity.y = 0; rigidbody2D.AddForce(new Vector2(0, jumpForce)); } }

      ۰ نظر موافقین ۰ مخالفین ۰ ۳۰ مرداد ۹۴ ، ۰۲:۰۶
      مدیرکل
      اینو توی رویداد Step بذارید:
      if (mouse_check_button_pressed(mb_left) && position_meeting(mouse_x,mouse_y,obj_knight)// && is a logical operator equivalent too 'and', when you have and it returns if both are true else //false
          {
              //code
          }

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

      کل ابزارها ی اندروید

      http://downloads.puresoftware.org/files/android/

      http://kaopu.so/pan/WINDOWS_TOOLS


      وبلاگ gameover.blog.ir

      آموزش گام به گام نصب و راه اندازی Basic4Android
      --
      منبع :
      http://basic4android.org/index.php?/topi...%AF%D8%B1/
      --
      Java Development Kit:
      http://www.mediafire.com/download/ralelg...id.org.zip
      --
      Sun Java 64 Bit:
      http://www.mediafire.com/download/boww8o...67.x64.zip
      یا
      SunJava 32 Bit :
      http://www.mediafire.com/download/h8kq3j...67.x86.zip
      --
      Android.SDK.Release.23.0.2:
      http://www.mediafire.com/download/0p8faa...23.0.2.zip
      --
      فایل های مورد نیاز برای قرار دادن در Android SDK :
      Build-Tools_r19.0.3-Windows:
      http://www.mediafire.com/download/o9r9k5...indows.zip
      Platform-Tools_r19.0.1-Windows:
      http://www.mediafire.com/download/f1jdxs...indows.zip
      PlatForms:
      http://www.mediafire.com/download/xzlbgx...rms%29.zip
      Samples:
      http://www.mediafire.com/download/4abmzq...les%29.rar
      System-Images:
      http://www.mediafire.com/download/zmz4fk...ges%29.zip

      اضافه شد: فایل های adb.bat + adb.exe + AdbWinApi.dll + zipalign :
      http://www.basic4android.org/attachments...winapi.rar


      تمامی فایل ها تست شده و قابل نصب بر روی تمام ویندوزها می باشند
      پسورد تمام لینک های بالا:
      www.basic4android.org

      آموزش کامل چگونگی نصب و راه اندازی Basic4Android بعد از دانلود تمام ابزارهای بالا:

      ابتدا Java JDK بر حسب سیستم خودتون رو نصب کنید.

      بعد از آن به سراغ نصب Android SDK میریم:
      اندروید SDK را در محلی به جز درایو ویندوز نصب کنید به صورتی که دائمی باشد و در صورت تعویض ویندوز اندروید SDK و اطلاعات آن از بین نرود.
      مثلا من در این مسیر نصب خودم رو انجام میدم: ( توجه کنید توی پوشه نصب Android SDK از فاصله استفاده نکنید... یعنی حروف به هم چسبیده باشند )

      G:\android-sdk(32.0.2)

      حالا چک کنید که تمام پوشه های زیر در Android SDK وجود داشته باشد. هر پوشه ای که وجود نداشت را بسازید تا دقیقا مطابق تصویر زیر شود:

      لیست متنی پوشه ها:
      add-ons
      build-tools
      platforms
      platform-tools
      samples
      system-images
      tools

      تک تک به سراغ پوشه ها میریم:
      add-ons را خالی میگذاریم !

      build-tools :
      پوشه android-4.4.2 را همراه با فایل های موجود در آن که در پوشه دانلود شده build-tools_r19.0.3-windows وجود دارد را در build-tools کپی کنید

      platforms :
      پوشه __MACOSX و پوشه android-14 که در پوشه android-14 ای که مربوط به platforms است را در platforms کپی کنید

      platform-tools :
      تمام فایل ها و پوشه های موجود در platform-tools_r19.0.1-windows\platform-tools که دانلود کرده اید را در platform-tools کپی کنید:
      [تصویر: 32_files_in_platform_tools.png]


      samples :
      فایل android-14 موجود در android-14 دانلود شده مربوط به samples را در داخل پوشه samples کپی کنید.

      system-images :
      فایل android-14 موجود در android-14 دانلود شده مربوط به system-images را در داخل پوشه system-images کپی کنید.

      tools :
      این رو توجه کنین و یادتون نره چون در غیر این صورت با خطا مواجه میشید. باید حتما 1 بار این فایل رو اجرا کنید:
      فایل adb پیوست شده را دانلود و چهار فایل adb.exe و adb.bat و AdbWinApi.dll و zipalign.exe را درون پوشه tools بریزید
      ( بعد از اتمام کار و راه اندازی کامل Basic4Android لازم است قبل از اجرای Run AVD Manager فایل adb.bat را یک بار اجرا کنید )


      نصب Basic4Android و Patch کردن آن :
      بعد از نصب خود برنامه ی Basic4Android که آخرین مرحله است سراغ به Keygun کردن آن میرسد.
      فایل b4a-gen را در مسیر نصب Basic4Android کپی کنید مثلا در این مسیر:
      D:\Program Files (x86)\Anywhere Software\Basic4android

      b4a-gen.exe را اجرا کنید و یک email اختیاری مثلا support@basic4android.org را وارد کنید و بعد بر روی گذینه Generate Lisence File کلیک کنید
      تا فایل Lisence ساخته شود.
      حالا برنامه Basic4Android را باز کنید و ایمیل وارد کرده در b4a-gen.exe را که همان support@basic4android.org میشود را وارد کنید.

      خب الان Basic4Android شما کاملا نصب شده و فقط مونده که 3 تا مسیر به برنامه بدیم:
      از منو Tools گذینه Configure Paths را انتخاب کنید:

      http://s6.picofile.com/file/8203724150/config.jpg

      در قسمت اول که javac.exe است باید آدرس فایل javac.exe که بعد از نصب Java JDK به وجود آمده است را بدهید مثلا:
      D:\Program Files\Java\jdk1.7.0_40\bin\javac.exe

      در قسمت android.jar باید آدرس فایل android.jar موجود در مسیر نصب sdk و پوشه platforms و android-14 وجود دارد را بدهید مثلا:
      G:\android-sdk(23.0.2)\platforms\android-14\android.jar

      در قسمت Additional Libraries باید آدرس فایل Library موجود در مسیر نصب Basic4Android را بدهید مثلا:
      D:\Program Files (x86)\Anywhere Software\Basic4android\Libraries

      سپس OK کنید.

      مرحله آخر:
      از منو Tools گذینه Run AVD Manager را انتخاب کنید تا باز شود.
      چون بار اول است باید یک AVD بسازیم . بر روی گذینه Create کلیک کنید.
      AVD Name: Android-14
      Device: 3.2" HVGA silder (ADP1) (320×480: ,dpi
      Target: Android4.0- API Level 14
      CPU/ABI: ARM (armeabi-v7a
      Hardware Keyboard present را تیک بزنید تا فعال شود.
      Skin: Skin with dynamic hardware controls
      SD Card: Size 500 MiB

      سایر تنظیمات را دست نزدید.
      [تصویر: armeAbi.jpg]

      OK را بزنید

      نصب و تمامی تنظیمات به پایان رسید.


      پسورد فایل پیوست شده : برنامه نویسان بیسیک4اندروید

      http://www.basic4android.org
      پسورد اشتب بود خودتون عقب جلو کنیدbig grin

      منبع :
      http://basic4android.org/index.php?showtopic=4
      --
      برای دانلود آموزش تصویری نصب تمامی ابزارها به تاپیک زیر مراجعه کنید :
      http://www.basic4android.org/showthread....8%B3%DB%8C


      اگه ناقص بود ابزارها اینجا رو ببینید winking:
      http://basic4android.org/index.php?/topi...%88%D8%B1/
      دانلود b4a ورژن 5 ریتیل کامل :
      http://s3.picofile.com/file/8203723968/B...l.rar.html

      رفع خطای CPU/ABI : "No system images installed for this target" برای basic4android یا b4a:
      سوال :
      من برنامه را نصب کردم اما در حال حاظر 2 مشکل دارم.
      1 هنگامی که sdk رو بازمیکنم یه ارور میده ومیره نمیدونم چیه ولی احتمالا به مشکل دومم متصل هست
      2 هنگامی که Avd رو اجرا میکنم و crate رو میزنم اطلا عات رو طبق آموزش شما در پنجره ظاهر شده برایم وارد میکنم اما در آخر دکمه ی ok غیر فعال باقی می ماند وفعال نمیشود که من اوکیش کنم.
      خواهش میکنم من دو عکس مربوط به ۲ مشکلم برای شما upload کردم لطفا هرچه سریعتر مشکلمو به خبر بدید.

      جواب :

      [تصویر: avd.jpg]


      در هنگامی که می خواید یک AVD=android virtual device یا دستگاه مجازی اندروید ایجاد کنید ممکنه با خطای پیدا کردن system images مواجه بشیم.

      برای رفع این مشکل، دو نکته مهم رو باید حتما رعایت کنید:

      به احتمال زیاد مسیرandroid.jar رو توی b4a درست config کانفیگ نکردید.

      پوشه ی android-14 موجود در فایل zip دانلود شده از لینک زیر رو داخل پوشه system-images در مسیر

      AppData\Local\android\android-sdk\system-images

      کپی کنید:

      https://www.mediafire.com/?18qpqdkz3cq8oxm


      بعد از نصب می تونید برید ببینید ARM -ABI (ای آر ام ای بی آی) نصب شده:
      http://i.stack.imgur.com/GQal9.jpg
      حالا basic4android رو باز کنید و از منوی Tools گزینه ی Configure paths رو انتخاب کنید و جلوی android.jar مسیر درست سیستم خودتون رو بدید. برای من مسیرش اینه :

      C:\Users\userName\AppData\Local\android\android-sdk\platforms\android-14\android.jar

      به جای userName باید اسم کاربری دقیق سیستم خودتونو بدید.

      البته اگه بلد نیستید می تونید توی منوی Run بنویسید appdata و enter بزنید تا مسیر رو بیاره و برید توی local و سپس android و android-sdk و بقیشو دنبال کنید تا به مسیر دقیق دسترسی پیدا کنید.

      حالا راحت می تونید create AVD بزنید و یه دستگا ایجاد کنید و اونو Start کنید.
      [تصویر: arm_abi.jpg]
      http://s6.picofile.com/file/8183832434/avd_2.jpg
      باید ورژن 5 از b4a رو از جای درست دانلود کنی. واسه بچه ها دیشب توی یاهو حتی b4a version 5 نصب نمی شد من فرستادم صب شد.اینو دریافت کن :
      http://s6.picofile.com/file/8203723184/B4A_5_02_Retail.zip.html

      فایل های adb.bat + adb.exe + AdbWinApi.dll + zipalign دوباره گذاشتم چون توی لینک قبلی حذف شده بود :

      www.mediafire.com/download/nse7rzmsmmd2lie/adb-zipalign-winapi.zip


      اینم یه سری دیگه(منبع : http://androidsdk.blogfa.com/post/28)

      لینک دانلود :
       http://dl-ssl.google.com/android/repository/build-tools_r21.1.1-windows.zip
      http://dl-ssl.google.com/android/repository/build-tools_r21.1-windows.zip
      http://dl-ssl.google.com/android/repository/build-tools_r21.0.2-windows.zip
      http://dl-ssl.google.com/android/repository/build-tools_r21.0.1-windows.zip
      http://dl-ssl.google.com/android/repository/build-tools_r21-windows.zip

      اندروید 21 برای پوشه ی platforms:

      http://www.mediafire.com/download/nf40umk4kcqpf5i/android-21.rar


      خرید آموزش b4a فارسی با قیمت کم:
      http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
      ۲ نظر موافقین ۰ مخالفین ۰ ۲۹ مرداد ۹۴ ، ۱۷:۰۸
      مدیرکل
      ۱ نظر موافقین ۰ مخالفین ۰ ۲۸ مرداد ۹۴ ، ۰۵:۳۱
      مدیرکل
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۷ مرداد ۹۴ ، ۲۲:۱۵
      مدیرکل
      x رو به توان n می رسونه :

      power(x, n);


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

      ویرایش شد:( یکشنبه - ۲۵ مرداد ۱۳۹۴)

      ابتدا اسپرایت منوی ثابت رو با نام  s_menu ایجاد کنید سپس یک ابجکت به نام o_control بذارید روی room و سپس:

      ابتدا کد غلط :

      اینو بذارید توی رویداد Draw  :

      x1=view_xview+ window_get_width()/2-sprite_get_width(s_icon)/2
      y1=view_yview + sprite_get_height(s_icon)/2+10
      draw_sprite_ext(s_menu,image_index,x1,y1,image_xscale,image_yscale,image_angle,image_blend,image_alpha)

      [تصویر: menuSabet.gif]

      ---

      اما کدهای بالا یک باگ بزرگ داشت .
       اصلاح :

      نکته بسیار مهم:
      به جای window_get_width حتما از view_wport[0] و به جای window_get_height حتما از view_hport[0] استفاده کنید چون وقتی روم رو full screen می کنید ممکنه به هم بریزه. اما با view_hport و view_wport به هم نمی ریزه.winking

      مثال :
      توی رویداد Draw اسپرایت spr_menu رو اینطوری در بالا و وسط room و view ی فعلی نمایش میدیم:
      کد درست اینه :
      x1=view_xviewview_wport[0]/2-sprite_get_width(spr_menu)/2
      y1
      =view_yview sprite_get_height(spr_menu)/2+10
      draw_sprite_ext
      (spr_menu,image_index,x1,y1,image_xscale,image_yscale,image_angle,image_blend,image_alpha

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

      خب اول باید وارد سایت عدد بشید و در قسمت نمایش دهندگان وارد رسانه های من بشید روی رسانه جدید کلیک کنید پکیج نیم برنامتون بنویسید و تایید رو بزنید حالا کتاب خانه عدد رو از اینجا دانلود کنید و بریزید داخل قسمت لایبری b4a حالا b4a رو باز کنید
      کتابخانه های adad و reflection رو فعال کنید
      این کدو به مانفیست ادیتورتون اضافه کنید

      نقل قول :AddApplicationText(
      <activity
      android:name="ir.adad.AdadActivity"
      android:theme="@android:style/Theme.Dialog">
      </activity>
      <meta-data android:name="ir.adad.token" android:value="YOUR_TOKEN"></meta-data>
      <meta-data android:name="ir.adad.test_mode" android:value="true"></meta-data>
      )

      داخل قسمت your-token اون شناسه ای که بهتون داخل قسمت جزییات رسانه های من داده کپی کنید


      این کدم به صفحه ای که میخواین توش تبلیغ باشه بریزید
      نقل قول :
      Sub Activity_Create(FirstTime As Boolean)
      Dim verticalPosition As String = "bottom" '"top" or "bottom"
      Dim horizontalPosition As String = "center" '"left", "right" or "center"
      Dim r As Reflector
      Dim args(3) As Object = Array As Object(r.GetActivity, verticalPosition, horizontalPosition)
      Dim types(3) As String = Array As String("android.app.Activity", "java.lang.String", "java.lang.String")
      r.RunStaticMethod("ir.adad.AdadB4APlugin", "createAdView", args, types)
      End Sub


      اگر قبلا به برنامه اجاره یه دسترسی به اینترنت ندادید این کدو به مانفیست اضافه کنید
      نقل قول :AddPermission(android.permission.INTERNET)



      حالا برنامه رو تست کنید اگر درست بود زیر برنامتون یه نوشته میاد که سیستم درست کار میکنه

      توجه موقع انتشار برنامه در مانفیست ادیتور:
      نقل قول :<meta-data android:name="ir.adad.test_mode" android:value=" True "></meta-data>

      True را به false تغییر بدید.
      منبع :
      http://promakers.ir/showthread.php?tid=11647


      خرید آموزش b4a فارسی با قیمت کم:
      http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مرداد ۹۴ ، ۲۲:۱۲
      مدیرکل

      نکته ۱: جم های خود را ذخیره کنید

       

      زمانیکه بازی را شروع می کنید، ۵۰۰ جم دارید. در صورت ساخت و ساز، ۵۰ جم را برای کامل کردن ساختمان سازی از دست می دهید. اما می توانید جم هایتان را ذخیره کرده تا بیلدرهای(کارگران) بیشتری را خریده و ساخت و ساز را سریع تر انجام بدهید. هزینه های هر بیلدر به صورت زیر است:
      بیلدر ۲: ۲۵۰ جم
      بیلدر ۳: ۵۰۰ جم
      بیلدر ۴: ۱۰۰۰جم
      بیلدر ۵: ۲۰۰۰ جم
      بیلدرهای 3 سریع بدست می آیند، اما بیلدرهای 4 و 5 ، معمولاً دیرتر تولید می شوند. بیلدرهای بیشتر، به شما اجازه می هند تا ساختمانهای بیشتری را بسازید و بنابراین می توانند بسیار به شما کمک کنند. اگه بتوانید پیروزیهای بیشتری بدست بیاورید، می توانید بیلدر 4 را در عرض چند ماه بدست بیاورید، بدون اینکه لازم باشد چیزی بخرید. اگه میخواهید بیلدرهای پنجم را هم بدست بیاورید، باید بیشتر تلاش کرده و پیروزی های بیشتری را بدست بیاورید.


      نکته ۲: افراد ارزانی را انتخاب کنید

      یکی از بزرگترین اشتباهاتی که تازه کاران انجام میدهند، این است که به هزینه ی هر فرد، توجهی نمی کنند. اگرچه، غول ها(جاینت ها)، عالی هستند، اما بسیار گران تر از بربری ها می باشند. در مراحل بالاتر، دراگون هافوق العاده اند، اما آنها از غول ها بسیار گران ترند. به عامل زمان هم باید توجه کرد. درست است که ویزاردها، بسیار قوی تر از کمانداران هستند، اما هم هزینه بیشتری دارند و هم 8 دقیقه طول میکشد تا ساخته شوند. در حالیکه، ۴کماندار را می توانید در کمتر از ۲ دقیقه بسازید. پس اگر به دنیال ذخیره ی منابعتان هستید، باید افراد ارزانی را انتخاب کنید. البته باید توجه داشته باشید که بهترین افراد، به سطح(لول) شما بستگی دارد.


      نکته ۳: اسپل ها را تنها هنگامیکه نیاز است، استفاده کنید

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


      نکته 4: تاون هال خود را کم کم ارتقا دهید

      تاون هال، یکی از مهمترین چیزهایی است که باید در بازی clash of clans بدانید. اگر تاون هال شما از تاون هال دشمنتان بیشتر باشد، میزان غنائمی که می توانید ازحریف بگیرید کاهش می یابد. اگر تاون هال شما، یک سطح از دشمنتان بالاتر باشد، تنها 90% غنائم را می توانید غارت کنید. اگر این اختلاف به سه سطح برسد، تنها 25% ، و برای اختلاف 4 سطح یا بیشتر، تنها 5% غنائم موجود را می توانید غارت کنید. در نتیجه، پیشنهاد می کنیم به تاون هال 4 رفته و در این تاون هال بمانید وساختارهای دفاعی، اردوگاه های سربازان و کاوش خود را به بهترین حالت ارتقا دهید. حتی می توانید دیوارهای خود را نیز ، قبل از رفتن به تاون هال 5، به حداکثر ارتقا دهید. این فرآیند را برای هر سطحی(لولی)، تکرار کنید.

      نکته 5: بسرعت بازی را شروع کنید

      وقتی برای اولین بار، کلش آف کلنز را بازی می کنید، سه روز شیلد(محافظت) دریافت می کنید. اما، حتی اگر شیلد شما از بین رفته باشد، به دلیل نکته ی 4، افراد اندکی، تمایل دارند به شما حمله کنند. بنابراین وقتی به منابع بیشتری نیاز دارید، بدون ترس از انتقام، بازی را شروع کنید.

       نکته 6: از ویژگی «NEXT» ، زیاد استفاده کنید

      اگر چه با زدن دکمه ی next مقدار اندکی از طلای شما، برای رفتن به پایگاه بعدی، کم می شود، اما هنگام ایجاد منابع یا سربازان، شما همیشه باید، با دکمه ی NEXT ، بهترین پایگاه را بیابید. بنابراین، قبل از حمله به یک پایگاه، برای جلوگیری از هدر رفتن افرادتان، مطمئن شوید که بهترین پایگاه را برای حمله انتخاب کرده اید. مراقب باشید هیچگاه، اندک طلای باقیمانده ی خود را برای ارتقا خرج نکنید و این مقدار طلا را برای استفاده از ویژگی NEXT ،نگه دارید.


      نکته 7: قلعه ی گروه را در مرکز پایگاه قرار دهید

      قلعه ی گروه، شاید مهم ترین ساختار دفاعی در این بازی باشد، اما تنها به شرطی که آن را در مرکز پایگاهتان قرار دهید. زیرا هنگامیکه، افراد دشمن، وارد محدوده ی قلعه ی گروه می شوند،(اگر محدوده ی وسیعی داشته باشد)، افراد شما خارج قلعه را پر کرده و به افراد در حال حمله ی دشمن، حمله خواهند کرد.توجه کنید که سربازهای قلعه ی گروه، قادر به جهش از دیوارهای خودتان هستند.
      اگر قلعه ی گروه را خارج از پایگاه قرار دهید، دشمن می تواند افراد داخل قلعه ی گروه را، فریب داده و بسادگی آنها را خارج از محدوده ی قلعه، بکشد. اگر قلعه را داخل پایگاه، نگه دارید، دشمن، برای گرفتن پایگاهتان، هم از افراد قلعه و هم ازساختارهای دفاعی، آسیب خواهد دید.
      اگر می خواهید در تاون هال خود بمانید، درخواست کماندار بدهید، زیرا کمانداران، اغلب، افراد را از پشت دیوار، مورد هدف قرار می دهند؛ که به آنها اجازه می دهد تا بدون آسیب دیدن، غول ها و بربری ها را سرنگون کنند. بازکنانی که در سطوح بالایی هستند، شاید افراد متفاوتی، مثل دارگون ها انتخاب کنند، اما این امر به گروهی نیاز دارد که این سربازان را بدهد.
      توجه کنید که این نکته، عملاً تنها برای بازیکنان تاون هال 7، و بالاتر به کارگرفته می شود. در تاون هال های پایین تر، ساختمان کافی برای جلوگیری از فریب خوردن یا غارت کردن افراد در قلعه ی گروه را، ندارید. تاون هال 7، هنوز قابلیت فریب خوردن دارد، اما محکم تر است. در تاون هال 8و بالاتر، دشمن مجبور می شود تا ساختمان ها یا تعدادی از افراد را برای بیرون راندن سربازان از قلعه ی گروهتان، تخریب کند.


      نکته 8: به دارک اکسیر اهمیت فراوانی دهید

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

      منبع : گیم آور

      ۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مرداد ۹۴ ، ۲۱:۲۵
      مدیرکل
      با دستور yield می گیم چند ثانیه صبر کن بعدش برو دستور بعدی. مثال :
      using UnityEngine;
      using System.Collections;
      
      public class ExampleClass : MonoBehaviour {
          IEnumerator Example() {
              print(Time.time);
              yield return new WaitForSeconds(5);
              print(Time.time);
          }
      };

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

      می دونیم که در حالت پیشفرض مسیر ذخیره سازی روی حافظه ی داخلی هست(Write Access =Internal Only)

      دستور Application.persistentDataPath در یونیتی مسیر  SD card یا حافظه ی بیرونی رو می ده(به شرطی که گزینه ی  External Write Access  در Player Settings رو فعال کنیم) این یعنی Write Access = External (SDCard)

      ----
       Application.dataPath
       Application.streamingAssetsPath
       Application.temporaryCachePath
      EditorApplication.applicationContentsPath
       EditorApplication.applicationPath
      Directory.GetCurrentDirectory()  مسیر روت یا ریشه رو می ده
      PlayerSettings.Android.forceSDCardPermission مقدار بولین برای دسترسی به کارت جافظه موبایل
      یه گزینه هم هست به اسم  WRITE_EXTERNAL_STORAGE اگه Enable باشه کل دادها به مسیر  /mnt/sdcard/Android/data/data/com..... ارجاع داده می شن و اجازه ذخیره روی SD card

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


      #Region  Project Attributes
          #ApplicationLabel: B4A Example
          #VersionCode: 1
          #VersionName:
          'SupportedOrientations possible values: unspecified, landscape or portrait.
          #SupportedOrientations: unspecified
          #CanInstallToExternalStorage: False
      #End Region

      ApplicationLabel جایی هست که شما اسم برنامه خودتون رو می نویسید یعنی اسمی که کاربر اون رو می بینه.
      VersionCode جایی هست که شما ورژن برنامه خودتون رو وارد می کنید که می تونید اعداد 1,2,3,4,5,... در اون قرار بدید.
      VersionName این جا جایی هست که شما اسم ورژن خودتون رو وارد می کنید حتما دیدید که در بازار یا جاهای دیگر نوشته ورژن 1.0.6 این همونه که البته می تونید در آن از حروف هم استفاده کنید.

      SupportedOrientations شما در این جا می تونید از سه کلمه portrait یا landscape یا unspecified استفاده کنید اگر از کلمه unspecified استفاده کنید برنامه هم در حالت افقی و هم در حالت عمودی اجرا می شه ولی اگر از کلمه landscape استفاده کنید فقط در حالت افقی و اگر از portrait استفاده کنید فقط در حالت عمودی اجرا می شه.

      CanInstallToExternalStorage اگر این کلمه مساوی False باشه برنامه داخل حافضه جانبی گوشی ذخیره نمی شه اما اگر مسای true باشه برنامه بر روی حافضه جانبی ذخیره می شه.

      نکته :اون خطی که اولش ' هست یعنی به صورت کامنت هست.
      منبع :
      http://barnamenevis.org/showthread.php?4...54f59acfa6
      ۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مرداد ۹۴ ، ۰۶:۲۰
      مدیرکل
      طبق تحقیقم شاید بتونید از این کدها الهام بگیرید :
      var myTexture: Texture2D;
        
        function Startup()
        {
            SaveTextureToFile( myTexture,"picture.png");
        }
      
      +
      
      System.IO.File.WriteAllBytes("picture.png", myTexture.EncodeToPNG()); 
      
      +
      
      System.IO.File.WriteAllBytes(Application.dataPath + "/"+"picture5886.png", texture2.EncodeToPNG());    //app path n1!

      ۱ نظر موافقین ۰ مخالفین ۰ ۲۴ مرداد ۹۴ ، ۰۵:۳۹
      مدیرکل
      منبع:gameover.blog.ir
      //gameover.blog.ir
      Dim
      MP As MediaPlayer MP.Initialize() MP.Load(File.DirAssets, "fereydun_asarayi.mp3") MP.Looping = True MP.Play

      برای استاپ و پلی مجدد و ... هم اینا :
      MP.Pause
      MP.Play
      MP.Stop




      خرید آموزش b4a فارسی با قیمت کم:
      http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
      ۱ نظر موافقین ۰ مخالفین ۰ ۲۴ مرداد ۹۴ ، ۰۵:۳۰
      مدیرکل