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

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

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

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

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

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

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

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

منبع:gameover.blog.ir

ساخت یه بازی با دو تا دوربین سخت نیست.
دو تا Camre رو Add کنید .
مقدار خصوصیت H هر دو تا دوربین رو بذارید 0.5
Y بازیکن اول رو بدید 0.5
Y بازیکن دوم رو بدید 0
--
با اینکار بازیکن اول دوربینش بالای صحنه قرار می گیره و اون یکی پایین.

http://sajjad3011.persiangig.com/unity_tut_sajjad3011/Cameras-2.jpg


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

فیلم آموزش آماده سازی کاراکتر دو بعدی در فتوشاپ برای انتقال به یونیتی و همچنین نحوه ی تنظیم آن در یونیتی 5

کیفیت : عالی

حجم:26 مگ (بعد از آنزیپ کردن میشه 60 مگ)

فیلم آموزش آماده سازی کاراکتر دو بعدی در فتوشاپ برای انتقال به یونیتی و همچنین نحوه ی تنظیم آن در یونیتی 5
























http://gameover.sellfile.ir/prod-356118-%D9%81%DB%8C%D9%84%D9%85+%D8%A2%D9%85%D9%88%D8%B2%D8%B4+%D8%A2%D9%85%D8%A7%D8%AF%D9%87+%D8%B3%D8%A7%D8%B2%DB%8C+%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1+%D8%AF%D9%88+%D8%A8%D8%B9%D8%AF%DB%8C+%D8%AF%D8%B1+%D9%81%D8%AA%D9%88%D8%B4%D8%A7%D9%BE+%D8%A8%D8%B1%D8%A7%DB%8C+%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84+%D8%A8%D9%87+%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C+%D9%88+%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86+%D9%86%D8%AD%D9%88%D9%87+%DB%8C+%D8%AA%D9%86%D8%B8%DB%8C%D9%85+%D8%A2%D9%86+%D8%AF%D8%B1+%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C+5.html


نکته:
در آموزش بعدی کدنویسی کاراکتر دو بعدی و گیم پلی و تاچ در یونیتی رو خواهیم گذاشت.ممنون از حمایت شما.
۱ نظر موافقین ۰ مخالفین ۰ ۱۰ بهمن ۹۴ ، ۰۰:۱۴
مدیرکل

بازی قشنگی هست حتما بازی کنید حجمش هم کمه.

ببینید رکوردتون چند میشه.

ضنا باید روی مرورگر شما فلش پلیر نصب باشه.

بعد از چند ثانیه رد تبلیغ رو بزنید تا هدایت بشید به صفحه بازی.

http://adamatomic.com/gfx/panels/canabalt.png


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

رویدادهای زیادی داریم مثل

Collider.OnTriggerEnter برای بررسی اولین بار ورود یک شی به محدوده شی دیگر که دارای کلایدر باشه و کلایدر اون isTrigger اش تیک خورده باشه(تا بشه از کلایدرش عبور کرد مثل نردبان که نیازی نیست مانع باشه ولی می خوایم تشخیصش بدیم و کنارش باشیم)


Collider.OnTriggerStay برای بررسی ماندن در محدوده(این مورد مورد نردبان بهتر کار می کنه و بهتره به جای OnTriggerEnter استفاده بشه)


Collider.OnTriggerExit برای موردی که می خوایم تشخیص بدیم شی مورد نظر برخوردش با ما قطع شده.


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

Collider2D.OnTriggerStay2D

void OnTriggerStay2D(Collider2D other)

OnTriggerEnter2D

OnTriggerExit2D

و ....


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

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

https://s.cafebazaar.ir/1/upload/screenshot/gameover.zoodpaz13.jpg

https://s.cafebazaar.ir/1/upload/screenshot/gameover.zoodpaz14.jpg

https://cafebazaar.ir/app/gameover.zoodpaz1/?l=en

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

نکته اول:
ابتدا از پنجره ی  build به مسیر Player Settings -> Other Settings -> Device Filter برید.
اگه تنظیم devcie f_il_t_er روی هر دو حالت باشه یعنی both ARM and x86 پس حجم بالاتر می ره ولی در عوض روی هر دو پردازنده ی گوشی های هم x86 و هم ARM بازی نصب خواهد شد و بنابراین صرفا بالابودن حجم دلیل بر بد بودن نیست چون بعضی اوقات حتی لازمه برای اینکه مطمئن بشیم بازیمون روی اکثر گوشی ها اجرا میشه.
http://s7.picofile.com/file/8265980368/hajm_bala_bad_nist.jpg

نکته بعدی:

بعد از build به apk ،در قسمت بالا و سمت راست پنجره ی console لاگ یا نوشته ها روی فلش کوچک پایین بزنید یک گزینه Editor Log رو می بینید.روش بزنید می گه چند درصد مربوط به کدوم بخش هست.

  1. ***Player size statistics***
  2. Level 0 'Assets/Loader.unity' uses 459.0 KB compressed / 1.6 MB uncompressed.
  3. Level 1 'Assets/Game.unity' uses 2.3 MB compressed / 7.8 MB uncompressed.
  4. Total compressed size 2.8 MB. Total uncompressed size 9.4 MB.
  5. Textures 3.9 mb 41.2%
  6. Meshes 2.3 mb 23.9%
  7. Animations 679.1 kb 7.0%
  8. Sounds 0.0 kb 0.0%
  9. Shaders 538.1 kb 5.6%
  10. Other Assets 653.8 kb 6.8%
  11. Levels 147.8 kb 1.5%
  12. Scripts 453.3 kb 4.7%
  13. Included DLLs 136.0 kb 1.4%
  14. File headers 747.4 kb 7.8%
  15. Complete size 9.4 mb 100.0%
  16. Used Assets, sorted by uncompressed size:
  17. 277.1 kb 2.9% Assets/Player/Human.blend
  18. 264.1 kb 2.7% Assets/Player/Orc.blend
  19. 216.1 kb 2.2% Assets/Monsters/Foo.blend
  20. 213.0 kb 2.2% Assets/Dungeon/Dungeon.blend
  21. 170.8 kb 1.8% Assets/Monsters/FooSkin.png
  22. ...

Yes, Unity should make this critical information way more obvious!

Sometimes it's as simple as a texture you have forgotten to downscale, or a model that needs to have Compression turned on (model and/or animation). Sometimes you've inadvertently depended upon an expensive DLL (like XML). Sometimes a package you're using (like Detonator) has a lot of big unused Resources (unused mere assets don't matter).

Note on the above sizes: these are for a WebPlayer; unlike Android and iOS, web builds don't have to include the Player, since the user installs that separately (I suspect that's actually the entirety of your "problem").

http://answers.unity3d.com/questions/153065/file-size-is-far-too-big.html


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

منبع:gameover.blog.ir

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

http://opizo.com/qsMNRg

۱ نظر موافقین ۰ مخالفین ۰ ۰۷ بهمن ۹۴ ، ۰۳:۳۸
مدیرکل
چند ثانیه صبر کنید بعدش دکمه سبز رد تبلیغ رو بزنید:

http://opizo.com/Ivbs1j



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

منبع:gameover.blog.ir

روش قدیمی(منسوخ):

یک روش سنتی اینه که یک گیم ابجکت تهی یا empty game object بسازیم و دشمن و یک cube با رنگ قرمز رو بندازیم توی زیرشاخش(به عنوان فرزندش).

بعدش این مکعب رو scale کنیم و در مثلا راستای محور x جهانی(تحت زاویه ای که خود دشمن قرار گرفته یا نسبت به مرکز خودش) اونو کم کنیم مثال:

using UnityEngine;
using System.Collections;
//Author:sajjad3011
public class NewBehaviourScript : MonoBehaviour {
     public GameObject navarKhun;
 
 /*     void Start () {
       navarKhun = GameObject.Find("Cube");
       }
*/
    public void btnChangeHeight() {
      navarKhun.gameObject.transform.localScale -= new Vector3(1,0,0);
    }
}
توضیح:
یک بردار ساخت سه بعدی که y و z اش صفر هست و x یک هست و این بردار رو از اسکیل فعلی کم می کنه.
 یعنی فقط ایکس اش به اندازه یکی کم میشه .
بعدش می تونیم چک کنیم اگه localScale.x از صفر کمتر شد دشمن مرده.


روش جدید و بهتر با استفاده از ui:
اما روش جدید در یونیتی 5 استفاده از کانواس هست.
به هر گیم ابجکت دشمن یک کانواس می دیم و توی تنظیمات render mode رو روی  world space می ذاریم. خوبیش اینه که می تونیم کانواس رو اسکیل کنیم و حتی خودش نسبت به زاویه چرخش دشمن چرخش می کنه و تنظیم میشه.
بعدش توی کد می تونیم width و height ایمیج رو تنظیم کنیم.

مثال:
Image im;
im.rectTransform.rect.width=100
همچنین باید اسپرایت یا image خون رو lookat کنیم به دوربین که روش به سمت دوربین باشه.
مثال:
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 در inspector تا نوار خون نگاهش به سمت دوربین باشه.
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۱۴:۵۹
مدیرکل

منبع:gameover.blog.ir

در قسمت سراسری
public Animator anim;
در قسمت دلخواه کد:
غیر فعال کردن:
anim.enabled=false;
فعال کردن:
anim.enabled=true;
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۲:۵۹
مدیرکل

منبع:gameover.blog.ir

مسیر Window->Profiler رو طی کنید.

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


http://s6.picofile.com/file/8235348992/profiler.jpg

پس برای بهینه سازی بازی باید سعی کنید فقط در صورت نیاز کامپوننت انیمار رو setActive(true و در غیر اینصورت setActive(false کنید.

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

منبع:gameover.blog.ir

کاربرد:

تایپ خودکار متن در بازی ها:

http://s6.picofile.com/file/8235961600/typeAuto.jpg

اینم مثال:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

// attach to UI Text component (with the full text already there)

public class UITextTypeWriter.cs : MonoBehaviour 
{

	Text txt;
	string story;

	void Awake () 
	{
		txt = GetComponent<Text> ();
		story = txt.text;
		txt.text = "";

		// TODO: add optional delay when to start
		StartCoroutine ("PlayText");
	}

	IEnumerator PlayText()
	{
		foreach (char c in story) 
		{
			txt.text += c;
			yield return new WaitForSeconds (0.125f);
		}
	}

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

منبع:gameover.blog.ir

using System.Xml;
...
            XmlDocument mydoc = new XmlDocument();
            mydoc.Load("www.example.com/file.xml");
            string mypoint = mydoc.GetElementById("mytext").InnerText;
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ بهمن ۹۴ ، ۰۱:۵۱
مدیرکل
منبع:gameover.blog.ir
public static void ClearLog()
         {
             var assembly = Assembly.GetAssembly(typeof(UnityEditor.ActiveEditorTracker));
             var type = assembly.GetType("UnityEditorInternal.LogEntries");
             var method = type.GetMethod("Clear");
             method.Invoke(new object(), null);
         }
نکته:کلمه var در js داریم اما توی سیشارپ هم var  داریم برای مواردی که متغیری رو می خوایم در زمان اجرا پس از مقدار دادن نوعش رو تعیین کنیم.همچنین برای شناخت توابعی که نوشتیم اینا رو یادتون نره باید ضمیمه کنیم:

using System.Reflection;
using UnityEditor;

منبع:
http://answers.unity3d.com/questions/578393/clear-console-through-code-in-development-build.html

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

منبع:gameover.blog.ir

رفتن به مرحله ی بعد پس از برخورد با درب در یونیتی_دقت کنید درب باید تگ door1 داشته باشه و گزینه ی isTrigger فعال باشه و پلیر باید isTrigger حتما غیرفعال باشه.. کد رو بدید به پلیر

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

void OnTirggerEnter ( Collision Other ) {
if ( Other.gameObject.name == "door1"){
 Application.LoadLevel(Application.loadedLevel + 1);
}
}

برای کلایدر های دو بعدی

void OnTriggerEnter2D( Collider2D Other ) {
if (Other.gameObject.name == "door1"){
 Application.LoadLevel(Application.loadedLevel + 1);
}
}

OnTirggerEnter2d هم واسه دو بعدی هست.
Other.gameObject.tag همیشه داد به شرطی که به درب یک تگ(برچسب) بدیم (door1 یا door یا ...)

نکته:دقت کنید در حالت دو بعدی و سه بعدی اگه توابع اشتباه بدید کار نخواهد کرد کدها.

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

منبع:gameover.blog.ir

Occlusion Culling باعث میشه اجسام پشت دوربین رندر نشه و سرعت بازی رو خیلی بالا میبره و باعث کارایی بی نظیری در رندر میشه و حتی برای بازی های اپن ورد  open world هم پاسخگو هست.

--

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

آموزش فارسی رو می تونید در دو تا فیلم آپارات ببینید :


لینک مستقیم فیلم اول :
http://opizo.com/UyaQH0

لینک مستقیم فیلم دوم :
http://opizo.com/OgVS8z


توضیحات اضافی:

یکی از تکنیک های مهم بهینه سازی بازی های بزرگ و بهبود فریم ریت frame rate در یونیتی و سایر گیم انجین ها:

یکی از تنظیمات occlusion culling و یکی از تنظیمات دیگه گزینه ی near دوربین هست.

near پارامتر نزدیک بودن هست.مثلا اگه بهش عدد 10 بدیم اشیا تا 10 متری رندر میشه و باقی رندر نمیشه مگه اینکه پلیر حرکت کنه و تا مرز ده متر اشیا رندر میشه.

تکنیک دیگه اینه که بیایم خودمون اسکریپت بنویسیم ابتدا آرایه ای بسازیم که کل اشیای صحنه داخلش باشه.(یعنی از نوع GameObject باشه)

سپس Tag هر گیم ابجکت رو چک کنیم اگه غیر از tag زمین و خودمون بود شرط دوم رو اجرا کنیم و اون اینه :

با تابع Vector3.Distance به الگوی


public static float Distance(Vector3 a, Vector3 b);


فاصله ی دوربین رو تا شی رو چک می کنیم.
اگر فاصله کمتر از میزان دلخواه بود گیم ابجکت رو setActive(true یا فعال وگرنه setActive(false یا غیر فعال کنه.
با استفاده از این تکنیک هر چقدر بازی شما بزرگ باشه به شدت افزایش کارایی و بهینه سازی رو خواهیم داشت.
این یکی از حقه های بسیار مهمی هست که اکثر بازی ساز های بزرگ ازش بهره می برن.
با تشکر از رئیس :)



یک آموزش دیگه که از سایت یونیتی گرفتیم و زیپ کردیم روی پیکو فایل از اینجا دانلود کنید:
http://gameover.blog.ir/1394/11/17/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Occlusion-Culling-Occlusion-Area-%D8%B2%DB%8C%D9%BE-%D8%B4%D8%AF%D9%87-%D8%A7%D8%B2-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B5%D9%84%DB%8C-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
۰ نظر موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۴ ، ۱۷:۳۵
مدیرکل

منبع:gameover.blog.ir


VSync در یونتی چیست ؟

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

منبع:gameover.blog.ir

حذف سایه ها و شرطهای اضافه تابع Update و استفاده از FixedUpdate.
cache کردن کلاس ها مثل tranform و ... مثال :

کد :

private Transform _transform;
void Start ()
{
        _transform = this.transform;//cache for optimization
}
استفاده از IEMulator و StartCoroutine.
نکته:بعضی اوقات بهتره انیمیشن ها رو توی یک تابع بذاریم و بعدش StartCoRoutine کنیم اون تابع رو،عوض اینکه بیایم و مستقیم اونو اجرا کنیم.
مثال از اجرا:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    IEnumerator WaitAndPrint()
    {
        // suspend execution for 5 seconds
        yield return new WaitForSeconds(5);
        print("WaitAndPrint " + Time.time);
    }
    IEnumerator Start()
    {
        print("Starting " + Time.time);

        // Start function WaitAndPrint as a coroutine
        yield return StartCoroutine("WaitAndPrint");
        print("Done " + Time.time);
    }
}

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

نکته : سعی کنید مدل های شما دارای مثلثات و پولیگان های کم باشه.

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

نکته بعدی : اشیای ثابت رو انتخاب و گزینه static رو در inspector تیک بزنید.همچنین قسمتای پشت دیوارها یا غیر ضروری حذف کنید.

نکته بعدی: نورها رو لایت مپ(lightmap) کنید (تکنیک beast)

نکته بعدی:بعضی وقتا انیمیشن ها رو غیر فعال کنید و به جای تابع آپدیت سعی کنید توی OnTriggerEnter/2d بگید مثلا اگه کاراکتر به دشمن نزدیک شد دشمن انیمیشن بشه و توی OnTriggerExit/2d بگید اگه کاراکتر از محدوده دشمن خارج شد دشمن انیمیشن اش استاپ بشه و ... .

نکته بعدی: وقتی تیر می زنید پس از چند ثانیه سعی کنید تیر رو destroy کنید. اشیای غیر ضروری دیگه هم همونطور.

نکته بعدی: به جای متریال و شیدرها بهتره که از تکستچر های uv map استفاده کنید.

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

نکته بعد: کلایدرهای بیخود رو حذف یا بهینه کنید(در قسمت add component می تونید چند کلایدر مختلف تایپ کنید و بدید به مدل یا اسپرایتتون...نکته اگه edge colider کار نکرد بعضی اوقات بهتره باکس کلایدر بدید)

نکته بعدی: گزینه ی cast shadow و فقط برای اجسامی که خیلی مهم هستن در سایه گذاری انتخاب کنید و بقیه رو سعی کنید غیر فعال کنید تا بازی بهینه تر بشه.هر جا سایه گذاری ارزش نداشته باشه و سرعت اجرای بازی اولویت داشته باشه بهتره سایه رو غیر فعال کنید با غیر فعال کردن همین cast shadow.


نکته بعدی: نوع شیدر رو بهتره توی inspector روی vertexLit بذاریم. چون پردازش کمتری نیاز داره هر چند کیفیت ممکنه تا حدی بیاد پایین. چون دو نوع تکستچر هست یکی پیکسلی،specular و ... هست که پردازش بیشتری می خواد و زیبایی بیشتری داره و یکی ورتکس هست که پردازش کمتر و زیبایی کمتر داره. شما باید دقت کنید که چه جسمی رو پیکسلی و چه جسمی رو ورتکسی انتخاب کنید. مثلا ساختمان هایی که خیلی دور هستن و لازم نیست که از نزدیک بهشون خیره بشیم رو vertexLit shader بدید.

نکته ی بعدی: اندازه ی بافت تصاویر کوچک بازی که زیاد به چشم نمیان رو کم کنید . مثلا گزینه ی max size رو برای تکستچر آجرها یا اشیای دیگه روی سایز کم تر بذارید تا حدی که قابل تحمل باشه.(برای bumped texture ها هم همینکارو کنید)

نکته ی بعدی: اگه می خواید تمام اجسام رو یه دفعه اپتیمایز کنید به منوی Edit->Project settings->Quality برید و اونجا می تونید تنظیمت دیگه ای انجام بدید مثل اینکه سایه ها رو روی hard بذارید یا حذف کنید. رزولوشن سایه ها و تکستچرها رو می تونید به طور تقریبی تنظیم کنید که روی low باشه.گزینه ی shadow distance رو اگه کم کنید سایه زیاد تا دور دست رندر نمیشه و یکم بهینه تر میشه.گزینه ی texture quality هم بای کم کردن کیفیت بافت تکستچرهای کل بازی هست که اینم می تونه بازی رو بهینه کنه.گزینه ی anisotropic texture هم اگه از کار بندازید جزئیات کم میشه.گزینه ی دیگه anti aliasing هست که لبه های عکس ها رو برامون تنظیم می کنه و اگه کمتر باشه تا یه حدی بهتره.

برای نور پردازی از تکنیک لایت مپ lightmap یا beast استفاده کنید:
http://gameover.blog.ir/1394/04/27/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-beast-%D9%88-%D9%86%D9%88%D8%B1%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%DB%8C-lightmap-%D9%88-bake-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AA%D8%B9%D8%A7%D8%AF-%D8%A8%DB%8C%D8%B4%D9%85%D8%A7%D8%B1-%D9%86%D9%88%D8%B1
۱ نظر موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۴ ، ۰۴:۱۶
مدیرکل

منبع :gameover.blog.ir

مثال1:

متغیری از نوع عمومی public می سازیم که باید کامپوننت انیمیشن هم drag کنیم روش در inspector.

روش زیر برای انیمیشن هایی که با انیماتور نمی شه اجرا کرد(انیمیشن های سنتی یا legacy که با نرم افزارهای قدیمی ریگ شده) و حتی انیمیشن های جدید(هر دو ) جواب مید:

public Animation anim;
    void Start() 
    {

            anim.Play("esme animation");
    }


مثال2:

متغیری از نوع خصوصی private می سازیم که کامپوننت انیمیشن رو از طریق کد دریافت می کنیم.

    private Animation anim;
    void Start () 
    {
        anim.GetComponent<Animation> ();
            anim.Play("esme animation");
    }

نکته:

کامپوننت انیمیشن هم باید به player بدید. برای اینکه خودش کامپوننت رو بده یا نذاره حذفش کنید این دستور رو قبل از اسم کلاس بیارید:

[RequireComponent(typeof(Animation))]


نکته مهم: گزینه LEgacy یا سنتی در حالت دو بعدی یافت نمیشه و احتمالا فقط برای حالت سه بعدی در بخش Rig باید تنظیم بشه.(دو بعدی هم بهتره با Animator کار بشه نه Animation)

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

ابتدا کاراکتری که می خواید براش انیمیشن های مختلف بسازید انتخاب کنید( از کادر hierarchy(کادر اجزای صحنه))

سپس به منوی window->animation برید و انیمیشنی رو ایجاد کنید(Create new animation clip)

http://s6.picofile.com/file/8235101618/create_animationClip.jpg

http://s6.picofile.com/file/8235101684/create_animationClip2.jpg


سپس کامپوننت animation بدید به کاراکترتون. و size بدید و انیمیشن ها رو بیارید توش:

http://s6.picofile.com/file/8235101942/create_animationClip3.jpg


دستور Crossfade:


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

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Animation anim;
    void Start() {
        anim = GetComponent<Animation>();
    }
    void Update() {
        if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1F)
            anim.CrossFade("Run");
        else
            anim.CrossFade("Idle");
    }
}

نکته: تابع یا متد CrossFade هم برای کامپوننت Animator کاربرد داره هم کامپوننت Animation.
موفق باشید.

در صورتی که نیاز به بهینه سازی هم دارید این مطلب و بخونید:
http://gameover.blog.ir/1394/11/05/%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%B2-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-%D9%87%D8%A7%DB%8C-%D9%85%D9%88%D8%AB%D8%B1-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%A7%D9%84%D8%A7%D8%B1%D9%81%D8%AA%D9%86-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%B1%D9%86%D8%AF%D8%B1-%D9%88-%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D8%B4-%DA%A9%D8%A7%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C

http://gameover.blog.ir/1394/08/11/%DA%A9%D8%AF-%D8%AD%D8%B1%DA%A9%D8%AA-%D9%BE%D8%B1%D8%B4-%D8%AF%D8%A7%D8%A8%D9%84-%D8%AC%D8%A7%D9%85%D9%BE-%D8%B1%D8%A7%D9%87-%D8%B1%D9%81%D8%AA%D9%86-%D8%AF%D9%88-%D8%A8%D8%B9%D8%AF%DB%8C-player-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-Easy-touch-version-3-%D8%B3%DB%8C%D8%B4%D8%A7%D8%B1%D9%BE


۳ نظر موافقین ۰ مخالفین ۰ ۰۴ بهمن ۹۴ ، ۱۸:۰۶
مدیرکل
منبع:gameover.blog.ir
اسکریپت زیر رو بدید به دوربین و سپس یک پریفب(یک گیم ابجکت که با ماوس قبلا از توی کادر hierarchy کشیده باشید توی کادر project) رو بندازید روی متغیر prefab از وروی اسکریپت در inspector.
using UnityEngine;
using System.Collections;

public class create : MonoBehaviour {
	Ray ray;
	RaycastHit hit;
	public GameObject prefab;
	void Update () {		
		ray=Camera.main.ScreenPointToRay(Input.mousePosition);		
		if(Physics.Raycast(ray,out hit)){			
			if(Input.GetKey(KeyCode.Mouse0))
			{
				GameObject obj=Instantiate(prefab,new Vector3(hit.point.x,hit.point.y,hit.point.z), Quaternion.identity) as GameObject;
				
			}			
		}

	}
}
نکته :
بعد از اجرا حتما باید توی صحنه یک Plane یا یک گیم ابجکت حاقل موجود باشه تا وقتی روش کلیک کردیم یک نمونه از پریفب ما ایجاد بشه.
پریفب هم گفتیم نمونه ای از گیم ابجکت هست که قبلا توی صحنه بود و بعدش کشیدیم توی کاد پروژه و سپس اونو حذف کردیم(حذف هم دلخواست)
۰ نظر موافقین ۰ مخالفین ۰ ۰۳ بهمن ۹۴ ، ۰۱:۱۲
مدیرکل

هرمشکلی در پرداخت یا دانلود بود در وبلاگ gameover.blog.ir مطرح کنید.
شماره تماس بذارید برای تلگرام
09039739619
09358077198

https://zarinp.al/173921

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

منبع:gameover.blog.ir

ogg بهتره و باعث میشه مشکلات loop رفع بشه.


۰ نظر موافقین ۰ مخالفین ۰ ۳۰ دی ۹۴ ، ۱۵:۴۳
مدیرکل
منبع:gameover.blog.ir
بعضی اوقات مشکل تبدیل داریم و توی نرم افزاری Format Factory خطای تبدیل میده.
برای اینکار ابتدا فرمت WMA یا MP3 رو به فرمت WAV تبدیل و سپس WAV رو به OGG تبدیل کنید.
۰ نظر موافقین ۰ مخالفین ۰ ۳۰ دی ۹۴ ، ۱۵:۳۹
مدیرکل
منبع:gameover.blog.ir

به لینک زیر رفته و ویندوز مورد نظر رو انتخاب کرده و درایورهای مربوط مادربوردتون رو دانلود کنید.

https://www.asus.com/Notebooks/X502CA/HelpDesk_Download/



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


منبع:gameover.blog.ir

// When the audio component has stopped playing, play otherClip
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public AudioClip otherClip;
    AudioSource audio;
    
    void Start() {
    	audio = GetComponent<AudioSource>();
    }
    
    void Update() {
        if (!audio.isPlaying) {
            audio.clip = otherClip;
            audio.Play();
        }
    }
}


روش بعدی:

using UnityEngine;
     using System.Collections;
 
     [RequireComponent(typeof(AudioSource))]

     public class ExampleClass : MonoBehaviour
     {
         public AudioClip engineStartClip;
         public AudioClip engineLoopClip;
         void Start()
         {
             GetComponent<AudioSource> ().loop = true;
             StartCoroutine(playEngineSound());
         }
 
         IEnumerator playEngineSound()
         {
             audio.clip = engineStartClip;
             audio.Play();
             yield return new WaitForSeconds(audio.clip.length);
             audio.clip = engineLoopClip;
             audio.Play();
         }
     }
منبع :
 http://answers.unity3d.com/questions/904981/how-to-play-an-audio-file-after-another-finishes.html
۰ نظر موافقین ۰ مخالفین ۰ ۳۰ دی ۹۴ ، ۰۱:۰۵
مدیرکل

منبع:gameover.blog.ir


مثال:

برای خروج از بازی وقتی روی یک cube کلیک شد بهش این کد رو میدیم:

void OnMouseDown(){
        Application.Quit();
}


مثال: برای باز شدن سایت و مثلا ارسال عدد 9 به فایل get.php:

void OnMouseDown(){
Application.OpenURL("http://example.com/get.php?Scrore=9");
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۹ دی ۹۴ ، ۲۰:۲۵
مدیرکل

منبع:gameover.blog.ir

دشمن: برای بررسی ورود پلیر به محدود دشمن راه های زیادی هست مثل بررسی فاصله با استفاده از تابع Vector2.Distance(a,b) برای دو بعدی و Vector3.Distance برای سه بعدی و .... .

اما روش دیگه استفاده از OnTriggerEnter برای بررسی ورود به محدوده ی ما و همچنین استفاده ازOnTriggerExit(Collider) برای بررسی خروج از ناحیه و انجام عمل دلخواه می باشد.

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


نکته: دقت کنید در حالت دو بعدی از تابع 2d باید استفاده کنید حتما و در حالت سه بعدی هم از تابع سه بعدی.

مثال حالت دو بعدی:

حمله بعد از تشخیص ورود پلیر به محدوده دشمن در حالت دو بعدی:

void OnTriggerEnter2D(Collider2D other) {
		if (other.tag = "player") {
		//attack
		}
	}

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


void OnTriggerExit2D(Collider2D other) {
		if (other.tag = "player") {
		//go to idle status
		}
	}
۰ نظر موافقین ۰ مخالفین ۰ ۲۹ دی ۹۴ ، ۱۳:۱۰
مدیرکل


منبع:gameover.blog.ir

GetComponent.<AudioSource> ().Stop();
GetComponent.<AudioSource> ().Play();
۰ نظر موافقین ۰ مخالفین ۰ ۲۵ دی ۹۴ ، ۰۹:۳۳
مدیرکل
منبع :gameover.blog.ir

Rename (or copy) the package to xxxxxxxxxxx.tar.gz then use any compression software that's able to decrompress tar.gz archives.

When you have it decompressed view inside the folders and you'll find files named "metaData" if you view those files with any editor (pretty much any text editor will do) you'll see the Unity version number inside starting at about character position 21

پکیج رو به xxxxxxxxxxx.tar.gz تغییر نام بدید سپس یک نرم افزار فشرده ساز رو که قادر به decmpress(از حالت فشرده خارج کردن) آرشیوهای tar.gz هست استفاده کنید.


بعد از استخراج در داخل پوشه ها فایل هایی به نام metaData پیدا خواهید کرد . اگر این فایل ها رو با یک ویرایشگر متنی باز کنید  شماره ورژن رو در آغاز و کاراکتر تقریبا 21 ام خواهید یافت.
موفق باشید.


http://forum.unity3d.com/threads/check-unity-version-with-which-unitypackage-was-created.225751/
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ دی ۹۴ ، ۲۱:۱۸
مدیرکل

منبع:gameover.blog.ir

قبلا از دستور sleep استفاده میشد . ورودی بر حسب میلی ثانیه بود. هر ثانیه معادل 1000 میلی ثانیه بود و برای اینکه بگیم 3 ثانیه صبر کن بعد برو خط بعدی می گفتیم sleep(3000) اما الان قضه فرق داره هر 30 واحد زمان(چون سرعت پیشرفض روم هست 30 و اگه تغییرش بدیم باید تغییر بدیم کد رو ) برای آلارم معال یک ثانیه هست. پس 3 ثانیه میشه 3*30=90 واحد زمانی.

مثال: پروژه ای در گیم میکر /استادیو بسازید که بعد از 3 ثانیه یک نمونه از object2 روی room ایجاد بشه.

حل:

ابتدا دو ابجکت روی room می ذاریم. object1 و object2

به object1 رویداد create و alarm[0] اضافه کنید و به ترتیب کد های زیر رو برای هر بخش نسبت بدید:

//رویداد ایجاد شی یک
seconds=3
alarm[0]=room_speed*seconds



//رویداد آلارم صفر
instance_create(10,10,object2);

دقت کنید به کد و توضیحاتی که دادم.

اینم فایل sample:


اما قاعده ی کلی:
به جای اون 30 بهترین کار اینه که از room_speed استفاده کنیم که متغیر تعریف شده هست و سرعت روم رو تغییر هم بدیم خودش میشناسه.
فرمول کلی هم اینه سرعت روم ضرب در تعداد ثانیه. مثال:
alarm[0]=room_speed*3 باعث میشه بعد از 3 ثانیه  آلارم صفر اجرا بشه.

مثال کلی :
seconds=3
instance_deactivate_all(self); alarm[0]=seconds*room_speed;//This will un-pause the game in the amount of time you selected
در مثال بالا دستور اول همه ی موجودیت ها رو غیر فعال می کنه به جز self یعنی خود گیم ابجکت فعلی رو .
وقتی همه چیز غیر فعال شد بعدش آلارم صفر رو اجرا می کنه بعد از تعداد ثانیه ای هایی که در متغیر seconds می ریزیم.(متغیر seconds دلخواه هست و در اینجا عدد 3 رو بهش دادیم)



منابع:

http://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/deactivating%20instances/instance_deactivate_all.html

http://gmc.yoyogames.com/index.php?showtopic=554091

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

http://opizo.com/9QR6Q2


۰ نظر موافقین ۰ مخالفین ۰ ۲۲ دی ۹۴ ، ۲۲:۰۶
مدیرکل
منبع:gameover.blog.ir
void Start () {
		GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
		GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
		cube.transform.position = new Vector3(0, 0.5F, 0);
		GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
		sphere.transform.position = new Vector3(0, 1.5F, 0);
		GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
		capsule.transform.position = new Vector3(2, 1, 0);
		GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
		cylinder.transform.position = new Vector3(-2, 1, 0);	
	}

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ دی ۹۴ ، ۱۴:۳۲
مدیرکل
منبع:gameover.blog.ir
زبان:انگلیسی
https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQT-5OpZsFAbjUbWK9xq_Lh15_04A5r6DD-1BTkz-3Y5_bQKUE5

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

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

تعداد صفحه: 686
ابتدا روی لینک زیر کلیک کنید.14 ثانیه صبر کنید تا تبلیغ رو ببینید. بعدش دکمه ی سبز رد تبلیغ رو بزنید تا به لینک مستقیم مدیافایلر فایل هدایت بشید.

نکته
: حجم این کتاب بعد از آنزیپ  120 مگ میشه.
zip شده فقط 40 مگ برای دانلود:


اینم ترجمه  قسمت های مهم از 400 صفحه اول اون به صورت فیلم های فارسی:
http://opizo.com/I6Jf2x

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

منبع:gameover.blog.ir

مساحت مثلث= قاعده ضرب در ارتفاع تقسیم به دو

دو text box بذارید روی فرمتون  که قاعده و ارتفاه رو بشه توش وارد کرد.
 یک دکمه بذارید روی فرم و روش دوبار کلیک کنید و این رو در رخداد کلیک بنویسی
val(text1.text)*val(text2.text

http://s6.picofile.com/file/8232890234/masahat.jpg

سورس:

http://s7.picofile.com/file/8232890292/masahat_moalas_vb6.zip.html

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

منبع:gameover.blog.ir

http://etutorials.org/shared/images/tutorials/tutorial_154/03fig01.gif

مادولاسیون  هم یعنی تبدیل دیجیتال به آنالوگ (چون رایانه باینتری رو می فهمه ولی سیم تلفن آنالوگ رو می فهمه  این مدولیتور میاد صفر و یک رو تبدیل به سینوس می کنه. یعنی مربعی به سینوسی) و وقتی به مقصد رسید دوباره تبدیل می کنه به دیجیتال که اونجا دی ماژوله میشه که بهش می گیم دی-مدولاسیون

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

منبع:gameover.blog.ir


پاسخ :MAU = Multistation Access Unit  یعنی واحد دسترسی چند ایستگاهی

http://flylib.com/books/4/153/1/html/2/files/02fig05.jpg

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

DCPromo

این دستور تقریبا مخفف Domain Controller Promoter هست و برای نصب active directory در تنظیمات شبکه در ویندوز سرور بکار می ره که توی منوی Run یا خط فرمان می نویسیم.(در ویندوز 7 یا ویندوزهای غیرسرور کار نمی کنه)
اکتیو دایرکتوری هم ابزاری هست که کل امکانات توی اونه. و اونجا مثلا یوزر ها و گروپ ها رو ایجاد و پرمیژن ها رو تنظیم می کنیم و الی آخر.
البته توی ویندوزهای سرور 2000 و 2003 کار می ده و در ویندوز سرور 2008 به بالا از طریق Server Manager  اجراش می کنیم.
بقیه هم به عهده ی تحقیق شما در گوگل.موفق باشید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۰ دی ۹۴ ، ۱۵:۰۱
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۰ دی ۹۴ ، ۱۴:۱۵
مدیرکل
منبع:gameover.blog.ir
http://answers.unity3d.com/questions/813752/is-there-any-way-to-save-a-variable-into-a-txt-fil.html
using UnityEngine;
 using UnityEngine.UI;
 using System.Collections;
 using System.IO;
 public class BestScore2 : MonoBehaviour {
 public Text textBestScore; // you dont need this
 
     void Start () {
         string t = "your text";
         string path = "Builds/FormulaOne_Data/BestScore.txt";
         System.IO.File.WriteAllText (@path, t); // for writing
         string text = System.IO.File.ReadAllText(@path); // for reading
         textBestScore.text = text;  // you dont need this
     }
 
 
 } 

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

منبع:gameover.blog.ir

uses crt;
var i:integer;
var sum:double;
var strTemp:string;
var myArray : Array[1..30] of Integer;
BEGIN
for i:=1 to 30 do begin
Str(i,strTemp);
write("num(" + strTemp + ") : " );ReadLn(myArray[i]);
sum:=sum+myArray[i];
end;
write(sum div 30);
END.
۱ نظر موافقین ۰ مخالفین ۰ ۱۹ دی ۹۴ ، ۱۵:۵۷
مدیرکل

منبع:gameover.blog.ir

اینم 30 تا PDF فارسی از کتابی که مدتها قبل و حدود 10 سال پیش تو بازار خریده بود داداشم :

http://s5.picofile.com/file/8126131742/openGL.jpg


فهرست مطالب :

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

نکته:اولا این کتاب خیلی کمیاب هست و حتی توی سایت های خارجی هم بسیار نادر هست ولی ما این کتاب رو به رایگان براتون می ذاریم تا دانلود بفرمایید.

تعداد صفحه: نزدیک 800 


نکته ی مهم : افراد عادی که با انجین های بازی سازی unity کار نکردن یا کلا قصد ساخت بازی (چه دو بعدی چه سه بعدی) رو دارن نیازی به این کتاب نیست و باید اول بدون درگیر شدن با جزئیات،برن مستقیم با یونیتی کار کنن .



چون در openGL فقط کارهای گرافیک رو انجام میدیم تحت Visual c ++ و خروجی اندروید و غیره هم در کار نیست.(و الان هم واسه عهد بوقه و شما بهتره برید سمت unity)، یه خروجی صرفا EXE می سازیم که کتابخانه ها و فایل های DLL و Lib یا ... رو به محیط ویژوال استادیو add reference و تیک می زنیم و فایل dll رو در c:\windows\system32 میریزیم و lib رو هم در پوشه ی include و الی آخر... .

این کتاب برای زمانی هست که شما حرفه ای یونیتی یا انیجن های دیگه می شید.بین انجین های دیگه مثل cry یا unreal و unity و game maker studio (خود گیم میکر منسوخ هست و حتما استادیو خروجی اندروید میده) و OGRE و torque 3d و  S2Engine HD  هم هم خودتون مختارید با چی کار کنید. اما بنده توصیه ام اینه که شروع کارتون با unity باشه بعدش حالا خواستید برید سمت انجین های دیگه تا تست کنید و خودتون تشخیص بدید برتری های یونیتی رو. فقط فیزیک یونتیی کمی توی قسمت Rigid body و سرعت های بالا ممکنه ضعیف عمل کنه که اونا رو باید با تکنیک پیاده سازی کرد و شاید آنریل توی سیستم های فیزیک قوی تر باشه.اما باز هم شروع کار یونیتی از نظر ما.


بعد از تسلط به یونیتی و شروع بازی سازی،اونجایی که دوست دارید مطالعات آزاد تری رو در زمینه ی کدنویسی سخت تر با open GL انجام بدید(هر چند منسوخ هست) فقط به صرف اینکه ایده های ساخت انجین های بازی سازی رو درک کنید می تونید از کتب openGL مثل این و سایر کتب و directX و .... کمک بگیرد.(فرق open GL هم با directX اینه که openGL از توابع بیشتری استفاده می کنه و اشیای سه بعدی و ترسیمات texture و فایل های عکس و انداخت اونا روی مدل و shader ها(متریال های روی مدل ها) و نورپردازی ها و سایه گذاری ها و به طور کلی فقط کار گرافیک رو انجام میده و با صدا و سایر جنبه ها کاری نداره.(مباحث دیگه مثل openAL یا Cross Platform 3D Audio مربوط به صدا) و Directx هم جزو برنامه نویسی های حرفه ای تر هست که مستقیما با سحت افزار درگیر می شید و اونجا برای حرفه ای ها هست که دوست دارن کدهاشون با سرعت بیشتری بدون تبدیلات اضافه به فرمت اجرایی روی سیستم عامل ویندوز در بیاد و الی آخر...)

این شما و این یکی از بهترین کتاب های openGL (فقط حرفه ای ها مطالعه کنن و مبتدیان سعی کنید درگیر جزئیات این کتاب نشید که چطوری بازی بسازیم و از کجا شروع کنیم.اگه سوالی در رابطه با بازی سازی دارید در وبلاگ نظر بدید بنده ی حقیر راهنماییتون خواهم کرد انشاءا... . چون خودم مدت ها سر در گم بودم و چندین سال در این باب تحقیق کردم و البته باز هم بی سواد هستم در برابر اساتید و تمام شما بزرگواران. .و من ا... توفیق):


http://pxhst.co/avaxhome/ad/ac/0014acad_medium.jpeg

http://opizo.com/yrsFmQ

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

منبع:gameover.blog.ir

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

منبع:gameover.blog.ir

از منوی Edit زیرمنوی Render settings رو انتخاب کنید و گزینه ی Fog رو در پنل باز شده در کادر inspector فعال کنید و تنظیمات مثل رنگ و شدت و غیره رو دستکاری کنید:

http://s5.picofile.com/file/8130506150/fog_unit.jpg


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

منبع:gameover.blog.ir


using UnityEngine;
using System.Collections;
//Smooth camera for 2d platforms
//Author:Sajjad3011
//unity 5
public class camera2d : MonoBehaviour {
    public Transform target;
    private float smooth=1f;
    void FixedUpdate () {
        transform.position = Vector3.Lerp(transform.position, target.position, smooth * Time.deltaTime)-new Vector3(0,0,0.4f);
    }
}
نکته: طبق کد حتما باید توی FixedUpdate کار کنید. اگه توی Update بذارید صحنه لرزش پیدا کرده یا پرک پرک می زنه.

طبق کد ما از متد یا تابع Lerp برای حرکت نرم دوربین بین دو نقطه شروع (پوزیشن فعلی دوربین) و پایان(پوزیشن player) استفاده کردیم و سرعت حرکت هم در پارامتر smooth انجام دادیم و در تایم ضرب کردیم. smooth به معنی فاکتور نرمی هست و اگه زیادش کنیم سرعت حرکت بیشتر خواهد بود.

وکتور 3 هم که ایجاد کردیم برای این بود که موقعیت دقیقا می افتاد روی پلیر و زوم میشد روش و ما به اندازه ی 0.4 در واحد float از محور z کم کردیم تا فاصله بگیره و عقب بره ولی توی بردار x و y همون هست و هیچی ازش کم نکردیم .


روش دوم :
using UnityEngine;
using System.Collections;

public class SmoothFollow2D : MonoBehaviour {

 private Vector3 velocity = Vector3.zero;
 public Transform target;
 
 // Update is called once per frame
 void Update () 
 {
  if (target)
  {
   Vector3 point = GetComponent<Camera>().WorldToViewportPoint(target.position);
   Vector3 delta = target.position - GetComponent<Camera>().ViewportToWorldPoint(new Vector3(0.2f, 0.5f, point.z)); //(new Vector3(0.5, 0.5, point.z));
   Vector3 destination = transform.position + delta;
   transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, 0);
  }
  
 }

}

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

منبع:gameover.blog.ir

یه متغیر پابلیک از نوع AudioSource تعریف کرده بعدش با کد خصوصیت volume رو مساوی value از scrollBar ات کنید. (مقدار حداقل باید 0.0 و حداکثر باید 1.0 باشه که نوع float هست)
-
برای اینکه واسه رویداد change از slider bar کد بنویسید توی inspector یک مثبت (+) هست روش بزنید تا رویداد change رو ایجاد کنه.


همونجا توی کادری که نوشته None باید گیم ابجکت Audio source رو بکشی رها کنید توش تا یک گیم ابجکت دلخواه که اسکریپت audiosource رو بهش نسبت خواهیم داد.

سپس از لیست no function اسکریپت رو انتخاب و از زیر شاخش تابعی که می خواید با حرکت نوار لغزان(slider) اجرا بشه رو انتخاب می کنیم.

یادتون نره تابع حتما باید از نوع public تعریف شده باشه ویلا توی این بخش نمیاد.

http://s6.picofile.com/file/8232048800/audioSource_sliderChange.jpg

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

public Slider mainSlider;
public AudioSource as;
mainSlider.minValue =0;
mainSlider.maxValue=1;

public void changeVolume(){
as.Volume=mainSlider.Value;
}


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

منبع:gameover.blog.ir


یکی از این روش ها رو امتحان کنید  :


Object یا World از طریق منوی Symmetry


Ctrl + Shift + right-click

یا

q + click در صحنه

در Tool Box روی Select tool یا یکی لاز ابزارهای transformation دابل کلیک سپس Object یا World رو از بخش Symmetry Settings در پنجره ی Tool Settings انتخاب کن.


در Modeling Toolkit یکی از گزینه های Object یا World رو از طریق لیست کشویی Symmetry انتخاب کن.
۱ نظر موافقین ۰ مخالفین ۰ ۱۳ دی ۹۴ ، ۰۵:۱۸
مدیرکل

منبع:gameover.blog.ir

http://www.mediafire.com/download/re9k885kapwhvs8/CustomHiScoreStudio.zip


HiscoreNew.png


http://software4me.org/dload/files/tutorials/CustomHiScoreStudio.zip


منبع:

http://gmc.yoyogames.com/index.php?showtopic=533357

http://docs.yoyogames.com/source/dadiospice/002_reference/social%20gaming/achievements%20and%20leaderboards/local%20high%20scores/index.html

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

منبع:gameover.blog.ir

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

منبع:gameover.blog.ir

ابتدا slice tool رو از کادر ابزار یا toolBox انتخاب می کنیم(سومی رو)
سپس روش دوبار کلیک می کنیم کادری باز میشه و شروع و طول width رو عدد می دیم (مثلا 0 تا 250 یا 250 تا 500 و ایل آخر) بعدش ok.
سپس روی برش دوم دوبار کلیک و الی آخر:

http://s5.picofile.com/file/8130386142/slice_tool.jpg

در نهایت می تونید با ابزار select بخش های اندازه گیری شده رو انتخاب و cut کنید و توی سند جدیدی که باز کردید جداگانه ذخیره کنید.


روش بهتر:

البته یک گزینه دیگه هم داره: راست کلیک کنید روی عکس و Divide Slice و دو تا تیک رو بزنید.

مثلا اولی: به صورت افقی 4 قسمت کنه. عدد رو 4 می دیم.

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

منبع:gameover.blog.ir

http://poopinmymouth.com/process/workflow/workflow_01.gif


    alt + e = extrude
    alt + r = ring select
    alt + l = loop select
    z = center viewport on selection
    f3 = toggle wireframe (tapping this twice will return you from another viewtype to normal view)
    1 = vertices (in edit poly mode)
    2 = edges (in edit poly mode)
    3 = open edges (edges along a hole in a mesh) (in edit poly mode)
    4 = faces (in edit poly mode)
    5 = sub-elements (connected chunks of triangles) (in edit poly mode)
    6 = exit sub-object mode (in edit poly mode)
    The modification keys W movement, E scale R rotate.
    The viewport keys L left, B bottom, F front, P perspective. (I assign ctrl + L to right view, and ctrl + B to back view)
    v = viewport pop-up menu, and from there you can use hotkeys to get the different views.
    when in a sub object mode like vertices, hold ctrl and click on another sub object mode like faces, to convert your selection. Hold ctrl+shift to only get the the sub objects contained completely by the current selection.

http://poopinmymouth.com/tutorial/workflow.htm

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

منبع:gameover.blog.ir

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

توضیح:

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

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

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

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

http://www.vray-materials.de


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

http://www.1001freefonts.com/



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

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


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

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ دی ۹۴ ، ۱۰:۱۲
مدیرکل
منبع:gameover.blog.ir
سازنده:sajjad3011
این سورس مربوط به android studio v 1.5 هست.
روی گوشی بذارید و با اجراش موقعیت طول (Longitude) و عرض(Latiitude) جغرافیایی(Geography )

http://www.mediafire.com/download/jwarbmnatamlz0k/GPS.zip


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

منبع:gameover.blog.ir

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


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

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


کلاس های final :

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

مثال :

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


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

متدهای final:

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

مثال:

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

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

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

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

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

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

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

مثال:
public class Sphere {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

منبع:gameover.blog.ir

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

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

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

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

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

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

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

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

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

منبع:gameover.blog.ir


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

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


مثال :


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

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

منبع:gameover.blog.ir

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

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

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

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

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

اجرا:

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

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

منبع:gameover.blog.ir

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

application not installed android unity


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

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

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

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


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

منبع :gameover.blog.ir

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

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

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

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


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

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

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

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

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

public AndroidJavaClass(string className);

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

مثال:

using UnityEngine;
using System.Collections;

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



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

مثال بعدی:


using UnityEngine;
using System.Collections;

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

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

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

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

using UnityEngine;
using System.Collections;

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

مثال بعدی:

using UnityEngine;
using System.Collections;

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

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

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


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

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

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

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

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

منبع : gameover.blog.ir

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

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

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


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

http://opizo.com/LjL6yJ

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

نویسنده:sajjad3011

این آموزش برای visual studio 2012 هست.
ابتدا شما باید پلاگین  mysql plugin visual studio 1.1.1.msi رو از این لینک بگیرید و برای ویژوال استادیو نصب کنید.


اگه شیلتر بود با قند شکن باز کنید:
https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-visualstudio-plugin-1.1.1.msi
8.3 مگابایت هست.

اگه قند شکن ندارید نگران نباشید روی مدیافایر براتون آپلود کردم:
http://www.mediafire.com/download/el5n0lwxf1xgcw5/mysql-visualstudio-plugin-1.1.1.msi

دانلود نصبش کنید.

سپس visual studio 2012 رو باز کنید.

یک پروژه Windows form application بسازید.

در کادر splution explorer(کادر درختی اجزای پروژه) راست کلیک کرده و Add reference (افزودن کتابخانه)رو بزنید و در قسمت Extensions (افزونه ها) mysql.Data رو تیک بزنید و ok کنید تا بتونید برای mysql کدنویسی کنید.

سپس یک button روی فرم بذارید و در کادر Properties خصوصیت Text اون رو بذارید Connect to mySQL.
روی این button دوبار کلیک کرده و کد زیر رو برای کلیک اون قرار بدید:
MySql.Data.MySqlClient.MySqlConnection conn;
            string myConnectionString;

            myConnectionString = "server=127.0.0.1;uid=root;" +
                "pwd=;database=database1;";

            try
            {
                conn = new MySql.Data.MySqlClient.MySqlConnection();
                conn.ConnectionString = myConnectionString;
                conn.Open();
                MessageBox.Show("Connected to host");
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show(ex.Message);
            }

یادتون نره حتما در قسمت بالای برنامه این دستور رو بذارید :
using MySql.Data.MySqlClient;

نکته :

همچنین یک برنامه برای ساخت دیتابیس mysql باید روی سیستم محلی داشته باشید(اگه هم ندارید می تونید روی یک سایت آنلاین که php و mySQL رو ساپورت می کنه در قسمت mysql و phpmyAdmin یک دیتابیس بسازید و ip یا آدرس اتصال به سرور mysql رو از سایت کپی کنید به همراه نام کاربری و رمز عبور اختصاصی به دیتابیس آنلاین و ببرید توی سیشارپ)

اگه اینترنت ندارید همون برنامه ی xampp رو نصب و اجرا کرده و سرویس های mySQL و apache رو run کنید. سپس مرورگر fireFox رو باز کرده و به آدرس http://localhost و سپس به بخش phpmyAdmin برید و یک دیتابیس به نام database1 بسازید.
http://s3.picofile.com/file/8230092442/xampp_create_db_phpMyAdmin.jpg


یوزر پیشفرض root هست و رمز نداره کهخ توی کدبالا آوردیمش. server یا mysql host   هم در اینجا روی سیستم محلی هست که ip(آی پی) اش 127.0.0.1 هست که به جاش localhost هم می تونستیم بذاریم.

با F5 اجرا بگیرید و روی دکمه کلیک کنید . اگه بتونه وصل بشه پیام میده Connected و اگرنه خطای لازم رو نشون میده.


http://s3.picofile.com/file/8230092918/connect2mySQL_in_vs2012_csh.jpg
موفق باشید.


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

منبع:gameover.blog.ir

بای اینکار باید با پهنا و ارتفاع view بازی کنیم.

مثال :

رویداد Step:


if distance_to_object(obj_player)<=30 //////or put the whatever you want
{
view_hview[0]=360//////360 is the zoom out height
view_wview[0]=360//////360 is the zoom out width
}


if distance_to_object(obj_player)>=30
{
view_hview[0]=320/////set it back again to it's default
view_wview[0]=320/////set it back again to it's default
}

توضیحات بیشتر:
http://gmc.yoyogames.com/index.php?showtopic=510479
۰ نظر موافقین ۰ مخالفین ۰ ۰۶ دی ۹۴ ، ۰۱:۴۸
مدیرکل

منبع:gameover.blog.ir

http://s3.picofile.com/file/8230078684/ocean_animation.jpg

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

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

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

shift+A بزنید و یک Plane رو Add کنید به صحنه.(ماوس دقیقا باید توی صحنه باشه تا عمل کنه)

و یک مدیفایر اقیانوس (ocean modifier) اضافه کنید.(نکته: ما فرض کردیم شما قبلا آموزشای بلندر رو بلدید. اگه بلد نیستید و چیزای مبتدی رو می خواید بگید تا لینک آموزش رو معرفی کنیم)

روی فریم 0 رفته و time از ocean رو روی 0 بذارید. و وقتی ماوس روشه i بزنید تا این فریم روی زمان  ثبت بشه(i به مغنی insert هست)

روی فریم آخر برید  و زمان رو روی 25 گذاشته و i بزنید تا فیزیک روی اون زمان ثبت بشه.


برای uv map و انداختن تکستچر اقیانوس هم می تویند توی صحنه tab بزنید و به Edit mode رفته و سپس u زده و unwrap کنید و سپس به uv edit رفته و یک تکستچر آب رو open image و uv map کنید.

اینم تکستچر آب: http://www.digitaltoolsforarchitects.com/wp-content/uploads/2013/02/sea-map.jpg


سپس ماوس رو روی صحنه برده و alt+A بزنید تا انیمیشن Play بشه.

نکته : یادتون نره یک لامپ خورشید(Sun lamp) بندازید روی آب تا بهتر دیده بشه تکستچر.

موفق باشید


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

منبع:gameover.blog.ir

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

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


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

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

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



is kinematic یکی از خصوصیات RigidBody هست که به وسیله ی آن می توانیم کاراکتر را کنترل physic engine خارج کنیم و اگر نیاز به حرکت کاراکتر داریم با trasform آن را حرکت دهیم.
۱ نظر موافقین ۰ مخالفین ۰ ۰۵ دی ۹۴ ، ۱۱:۳۳
مدیرکل

منبع:gameover.blog.ir

http://s6.picofile.com/file/8229729568/shib.jpg

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

http://s6.picofile.com/file/8229729576/shib.gm81.html

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

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

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

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

منبع : gameover.blog.ir

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

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

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

http://opizo.com/Zf57yX


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

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

منبع:gameover.blog.ir

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

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

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


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

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

نکته : گروه ما یونیتی رو توضیه می کنه اما چون مبتدیان گیم میکر کار می کنن بعضی اوقات پاسخ گوی سوالات اونا هستیم.
(البته گیم میکر استادیو هم هنوز برای بازی سازی جایگاهی داره به شرطی که توی کدنویسی لمسی و ... بیشتر تحقق کنید)
با استفاده از این آموزش می تونید با php ارتباط بگیرید:
http://promakers.ir/showthread.php?tid=10070

<?php
//get.php
//Author:Sajjad3011
if (isset($_POST["x"]) && isset($_POST["y"]  )
{
$x=$_POST["x"];
$y=$_POST["y"];
}
   $dbhost = 'اسم هاست مای اس کیو ال';
   $dbuser = 'نام کاربری که برای دیتابیس نسبت دادیم روی هاست';
   $dbpass = 'رمز';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   

   if(! $conn )
   {
      die('Could not connect to host : ' . mysql_error());
   }
   
   $sql = 'INSERT INTO tableName '.
      '(x,y) '.
      'VALUES ( $x, $y )';
      
   mysql_select_db('test_db');
   $result= mysql_query( $sql, $conn );
   
   if(! $result )
   {
      die('Could not enter data: ' . mysql_error());
   }
   
   echo "Entered data successfully\n";
   
   mysql_close($conn);
?>

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

منبع :gameover.blog.ir

using UnityEngine;
using System.Collections;

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

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

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

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

اگه سوالی می پرسید لطفا پیام  رو خصوصی نذارید.

عمومی بذارید تا بتونیم پاسخ بدیم.

یکی از دوستان به نام حمید ش ق پیام گذاشته بود در مورد گیم میکر استادیو.سوالشم این بود :

- نحوه ورود رندوم و خودکار ماهی ها به بازی
2- دادن امتیاز + و - به ماهیا
3- حرکت صفحه بازی
خواهشا کمکم کنین برای پروژمه عجله دارم

--

اما پاسخ:

باید از توابع random یا irandom_range استفاده کنید  یا غیره.

مثال:




Create Event:

CODE
speed=3+random(2)
direction=round(random(360))
alarm[0]=50+random(150)



اینم برای آلارم :
Alarm 0 Event:
CODE
direction=round(random(360))
alarm[0]=50+random(150)




http://z11.invisionfree.com/GameMaker_Central/ar/t20.htm



اما راه دیگه :
برای دشمن این کد رو بذارید :
توی create:
مثال :
v_speed=2

توی step هم اینو :
اگر y>room_height شد x=random(room_width و  y=-50


کد بالا باعث میشه دشمن از بالا ی صحنه حرکت کنه به سمت پایین و وقتی y از ارتفاع روم(اتاق) بیشتر شد دوباره از بالا یعنی -50 شروع کنه.
x هم بین صفر تا حداکثر اندازه ی پهنای روم تنظیم میشه به صورت تصادفی.
سوالی بود بذارید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۷ آذر ۹۴ ، ۰۲:۲۴
مدیرکل


حجم: 23 مگابایت

 

این جزوه نزدیک بیش از 700 صفحه هست. فونت 12 .

دارای تصاویر با متن انگلیسی و زیرنویس فارسی

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

و یه جزوه ی بسیار عالی هست برای کل مقاطع

700 صفحه خیلی هست دوستان.

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

شاید شما بتونید با خوندن این کتاب چیزای بسیار خوبی یاد بگیرید.

ممنون از حمایت شما

--------

مشکلی توی دانلود پیش اومد در وبلاگ gameover.blog.ir مطرح کنید تا لینک سالم فایل رو بهتون ایمیل کنیم یا مشکل شما رو برطرف کنیم.

یا در بخش پشتیبانی پیام بذارید.

لینک محصول

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

منبع :gameover.blog.ir

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

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آذر ۹۴ ، ۰۴:۵۴
مدیرکل
منبع :gameover.blog.ir
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
document.getElementById("demo").innerHTML = txt.length;
</script>

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

Dim c As Int = 0
For Each f As String In File.ListFiles(File.DirRootExternal)
   If f.EndsWith(".jpg") Then c = c + 1
Next
Log(c)


روش دوم :
البته خوندم File.ListFiles هم یک لیست بر می گردونه و اسم لیست رو فرض کنیم List باشه List.Size هم تعداد رو برگشت میده.
http://www.b4x.com/android/forum/threads/count-the-number-of-files.32604/


خرید آموزش 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
۱ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۰۳:۳۸
مدیرکل
منبع :gameover.blog.ir
منبع:
http://www.b4x.com/android/forum/threads...rial.8339/
مترجم:
sajjad3011

این آموزش طریقه اتصال بین Android device و remote server رو نشون می ده.
در اینجا قصد اتصال به یک MySQL database رو داریم.
Android به طور مستقیم نمی تونه به database server وصل بشه.
بنابراین نیازه یک simple web service یا سرویس وب ساده بسازیم تا request ما رو به دیتابیس بفرسته و به ما response بده.

مثلا ما یه new database ایجاد کردیم که جمعیت کشور ها رو برامون لیست کنه.
.(در اینجا البته اسم دیتابیس و ... دلخواه هست مثل xxxx یا .... )
دیتابیس ما یه جدول داره به اسم "countries" با سه ستون Name+ID+Population
[تصویر: mysql_1.png]

PHP Script:
web service ما یک اسکریپت php هست که روی سایت سرور قرار میدیم.
روش های ارتباط با این اسکریپت زیاده. مثلا می تونید با ارسال و دریافت پارامترها کار کنید و ... .
می تونیم روی سایت با php یه query بگیریم با دستوای sql و محتوای دیتابیس رو بریزیم بیرون یا واکشی کنیم توی یک فایل دیگه یا یه صفحه که با php درخواست می دیم.(مثلا get.php یا...)
البته این سوریس بهتره public نباشه(تنظیمات chmod روی سایت رو طوری تنظیم کنید که فقط کاربران خاص بتونن بهش دسترسی داشه باشن یا یه سری مسائل ایمنی و رعایت کنید اگه واستون مهمه)
البته یه راهنما هم هست تا افراد نتونن sql رو inject(تزریق) کنن برای باگ یابی از بانک شما:
PHP: mysql_real_escape_string - Manual
http://php.net/manual/en/function.mysql-...string.php


ما در اینجا از روش query استفاده می کنیم.

php script:

<?

$databasehost = "localhost";
$databasename = "xxxx";
$databaseusername ="xxxx";
$databasepassword = "xxxx";

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
$query = file_get_contents("php://input");
$sth = mysql_query($query);

if (mysql_errno()) {
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error();
}
else
{
    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>

این اسکریپت با استفاده از داده ها یا پارامتری هایی که با متد POST بهش ارسال می کنیم یک query از دیتابیس mysql می گیره.یعنی طبق درخواست ما به بانک وصل میشه و نهایتا نتیجه رو البته با فرمت JSON برگشت میده.

نکته: قسمت مهم کد بالا
$query = file_get_contents("php://input");
هست که محتوای متن ارسالی توسط b4a رو در متغیر $query ذخیره می کنه.
کپی شده از http://gameover.blog.ir



Basic4android code:

[تصویر: SS-2013-01-29_16.42.32.png]
این کد یک query(یک متغیر رشته ای که شامل بازجست و دستورات SQL هست مثل select * from table1 برای انتخاب تمام ستون ها از جدول) رو send می کنه. و نتیجه ی JSON دیافت شده رو parse(تجزیه) می کنه و نمایش میده روی listView .

قسمت اصلی سورس b4a  اینطوری هست :
'Activity module
Sub Process_Globals
	Private COUNTRIES_LIST = "countries_list", COUNTRY_POPULATION = "country_population" As String
End Sub

Sub Globals
	Type TwoLines (First As String, Second As String)
	Dim lblPopulation As Label
	Dim ListView1 As ListView
	Dim lblCountry As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("1")
	FetchCountriesList
End Sub
Sub FetchCountriesList
	ProgressDialogShow("Fetching list of countries")
	'Gets all the available countries
	ExecuteRemoteQuery("SELECT name, id FROM countries ORDER BY id", COUNTRIES_LIST)
End Sub


Sub ListView1_ItemClick (Position As Int, Value As Object)
	Dim tl As TwoLines
	tl = Value
	lblCountry.Text = tl.Second
	lblPopulation.Text = "Calling server..."
	ExecuteRemoteQuery("SELECT population FROM countries WHERE id='" & tl.First & "'", COUNTRY_POPULATION)
End Sub

Sub ExecuteRemoteQuery(Query As String, JobName As String)
	Dim job As HttpJob
	job.Initialize(JobName, Me)
	job.PostString("http://www.basic4ppc.com/android/countries.php", Query)
End Sub

Sub JobDone(Job As HttpJob)
	ProgressDialogHide
	If Job.Success Then
	Dim res As String
		res = Job.GetString
		Log("Response from server: " & res)
		Dim parser As JSONParser
		parser.Initialize(res)
		Select Job.JobName
			Case COUNTRIES_LIST
				Dim COUNTRIES As List
				COUNTRIES = parser.NextArray 'returns a list with maps
				For i = 0 To COUNTRIES.Size - 1
					Dim m As Map
					m = COUNTRIES.Get(i)
					'We are using a custom type named TwoLines (declared in Sub Globals).
					'It allows us to later get the two values when the user presses on an item.
					Dim tl As TwoLines
					tl.First = m.Get("id")
					tl.Second = m.Get("name")
					ListView1.AddTwoLines2(tl.First, tl.Second, tl)
				Next
			Case COUNTRY_POPULATION
				Dim l As List
				l = parser.NextArray
				If l.Size = 0 Then
					lblPopulation.Text = "N/A"
				Else
					Dim m As Map
					m = l.Get(0)
					lblPopulation.Text = NumberFormat2(m.Get("population"),0, 0, 0, True) & " (K)"
				End If
		End Select
	Else
		ToastMessageShow("Error: " & Job.ErrorMessage, True)
	End If
	Job.Release
End Sub

Sub Activity_Resume

End Sub

در کد فوق اطاعات یا query بهcountries.php ارسال میشه (ما فرض کردیم همون فایل get.php که بالا اوردیم هست. اسمشون رو خودتون یکی کنید و ادرس رو به هاست یا سایت خودتون تغییر بدید و لینک دقیق فایل php)
اینم سورس رایگان که خودم هم تست کردم کاملا کار می کنه:
http://www.mediafire.com/download/gb2b3a2ka1dye8p/MySQL.zip




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

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

using UnityEngine;
using System.Collections;

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

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

var car = {type:"Fiat", model:"500", color:"white"};



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

استفاده کردن از اشیا:

car.type
<!DOCTYPE html>
<html>
<body>

<p>Creating a JavaScript Object.</p>

<p id="demo"></p>

<script>
var car = {type:"Fiat", model:"500", color:"white"};
document.getElementById("demo").innerHTML = car.type;
</script>

</body>
</html>


مثال:

خروجی مثال بالا به صورت زیر می باشد.

Creating a JavaScript Object.
Fiat
۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آذر ۹۴ ، ۱۵:۳۷
مدیرکل
منبع :gameover.blog.ir

http://www.mediafire.com/download/njb3v1oy0tyv2ah/Rope+Physics+Tutorial.gmz


کپی:
https://www.dropbox.com/s/s18r2ecq8ueqlb4/Rope%20Physics%20Tutorial.gmz
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۲۲:۵۰
مدیرکل

منبع:gameover.blog.ir

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

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

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

public class face2face: MonoBehaviour {

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


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



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

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


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


روش کار:

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


ببینید

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

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

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

private float xScale,yScale;

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


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


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

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


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

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

۱ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۱۷:۵۰
مدیرکل
منبع :gameover.blog.ir
<?php
// example of how to use basic selector to retrieve HTML contents
include('../simple_html_dom.php');

// get DOM from URL or file
$html = file_get_html('http://example.com/#1:7');

// find all link
foreach($html->find('a') as $e) 
    echo $e->href . '<br>';

// find all image
foreach($html->find('img') as $e)
    echo $e->src . '<br>';

// find all image with full tag
foreach($html->find('img') as $e)
    echo $e->outertext . '<br>';

// find all div tags with id=gbar
foreach($html->find('div#content') as $e)
    echo $e->innertext . '<br>';

// find all span tags with class=gb1
foreach($html->find('span.gb1') as $e)
    echo $e->outertext . '<br>';

// find all td tags with attribite align=center
foreach($html->find('td[align=center]') as $e)
    echo $e->innertext . '<br>';

// extract text from table
echo $html->find('td[align="center"]', 1)->plaintext.'<br><hr>';

// extract text from HTML
echo $html->plaintext;
?>

منبع اصلی:
http://stackoverflow.com/questions/26966919/how-to-get-ajax-response-text-from-div-using-php-domdocument
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۰۹:۳۱
مدیرکل

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

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

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

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۹:۴۷
مدیرکل
منبع:gameover.blog.ir
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';

منبع اصلی:
http://simplehtmldom.sourceforge.net/
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۸:۲۰
مدیرکل

منبع :gameover.blog.ir

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

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

[تصویر: preferences.jpg]

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

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

[تصویر: apk.jpg]

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


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

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


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

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

منبع اصلی:
http://answers.unity3d.com/questions/650460/rotating-a-2d-sprite-to-face-a-target-on-a-single.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۰۴:۲۱
مدیرکل