منبع:gameover.blog.ir
ogg بهتره و باعث میشه مشکلات loop رفع بشه.
منبع:gameover.blog.ir
ogg بهتره و باعث میشه مشکلات loop رفع بشه.
به لینک زیر رفته و ویندوز مورد نظر رو انتخاب کرده و درایورهای مربوط مادربوردتون رو دانلود کنید.
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(); } }منبع :
منبع: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
قبلا از دستور 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);
seconds=3
instance_deactivate_all(self); alarm[0]=seconds*room_speed;//This will un-pause the game in the amount of time you selected
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
مساحت مثلث= قاعده ضرب در ارتفاع تقسیم به دو
دو text box بذارید روی فرمتون که قاعده و ارتفاه رو بشه توش وارد کرد.
یک دکمه بذارید روی فرم و روش دوبار کلیک کنید و این رو در رخداد کلیک بنویسی
val(text1.text)*val(text2.text
سورس:
http://s7.picofile.com/file/8232890292/masahat_moalas_vb6.zip.html
منبع:gameover.blog.ir
مادولاسیون هم یعنی تبدیل دیجیتال به آنالوگ (چون رایانه باینتری رو می فهمه ولی سیم تلفن آنالوگ رو می فهمه این مدولیتور میاد صفر و یک رو تبدیل به سینوس می کنه. یعنی مربعی به سینوسی) و وقتی به مقصد رسید دوباره تبدیل می کنه به دیجیتال که اونجا دی ماژوله میشه که بهش می گیم دی-مدولاسیون
منبع:gameover.blog.ir
پاسخ :MAU = Multistation Access Unit یعنی واحد دسترسی چند ایستگاهی
http://markup.su/highlighter/
http://tohtml.com
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 سال پیش تو بازار خریده بود داداشم :
فهرست مطالب :
نکته:اولا این کتاب خیلی کمیاب هست و حتی توی سایت های خارجی هم بسیار نادر هست ولی ما این کتاب رو به رایگان براتون می ذاریم تا دانلود بفرمایید.
تعداد صفحه: نزدیک 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 (فقط حرفه ای ها مطالعه کنن و مبتدیان سعی کنید درگیر جزئیات این کتاب نشید که چطوری بازی بسازیم و از کجا شروع کنیم.اگه سوالی در رابطه با بازی سازی دارید در وبلاگ نظر بدید بنده ی حقیر راهنماییتون خواهم کرد انشاءا... . چون خودم مدت ها سر در گم بودم و چندین سال در این باب تحقیق کردم و البته باز هم بی سواد هستم در برابر اساتید و تمام شما بزرگواران. .و من ا... توفیق):
منبع:gameover.blog.ir
از منوی Edit زیرمنوی Render settings رو انتخاب کنید و گزینه ی Fog رو در پنل باز شده در کادر inspector فعال کنید و تنظیمات مثل رنگ و شدت و غیره رو دستکاری کنید:
منبع: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 بذارید صحنه لرزش پیدا کرده یا پرک پرک می زنه.
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 تعریف شده باشه ویلا توی این بخش نمیاد.
اسکریپت هم شبیه این می تونه باشه :
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 انتخاب کن.
منبع:gameover.blog.ir
http://www.mediafire.com/download/re9k885kapwhvs8/CustomHiScoreStudio.zip
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
public Sprite spr1; GetComponent<Image>().sprite =spr1;
منبع:gameover.blog.ir
ابتدا slice tool رو از کادر ابزار یا toolBox انتخاب می کنیم(سومی رو)
سپس روش دوبار کلیک می کنیم کادری باز میشه و شروع و طول width رو عدد می دیم (مثلا 0 تا 250 یا 250 تا 500 و ایل آخر) بعدش ok.
سپس روی برش دوم دوبار کلیک و الی آخر:
در نهایت می تونید با ابزار select بخش های اندازه گیری شده رو انتخاب و cut کنید و توی سند جدیدی که باز کردید جداگانه ذخیره کنید.
روش بهتر:
البته یک گزینه دیگه هم داره: راست کلیک کنید روی عکس و Divide Slice و دو تا تیک رو بزنید.
مثلا اولی: به صورت افقی 4 قسمت کنه. عدد رو 4 می دیم.
منبع:gameover.blog.ir
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.
منبع:gameover.blog.ir
توضیح:
اغلب اوقات ما یک مدل رو می سازیم و یادمون میره بهش جزئیات بدیم.
به سادگی می تونید با استفاده از عکس هایی که با گوشی می گیرید یا عکس های موجود و کمی فتوشاپ پیاز داغشو زیاد کنید.
سوالی بود از نحوه ی uv map یا غیره بپرسید.
http://www.mediafire.com/download/gokmhkm5yqirp1a/StringUtils.zip
http://www.mediafire.com/download/ou59pwsa6ovl9fw/SQL.zip
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; } }
gameObject1.animation["اسم انمیشن"].speed = -1; gameObject1.animation["اسم انیمیشن"].time = gameObject1.animation["اسم انیمیشن"].length; gameObject1.animation.Play("اسم انیمیشن");
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) باشد یا نباشد.
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(سازنده ی کلاس) یک متغیر نهایی را تنظیم نکند تلاش برای تنظیم آن در خارج از سازنده ی کلاس منجر به خطای کامپایلری می شود.
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 با هر بار تکرار در حلقه از حوزه خارج می شود واقعا با هر تکرار مجددا تعریف می شود.
کمک در فهم پلاگین jar عدد برای یونیتی
این سایت عدد اعصابمو به هم ریخته. چون اصلا داکیومنت هاش
کامل و واضح نیست. مشکل اصلی اینه که ما جاوا کار حرفه ای نیستیم و
داکیومنت یونیتی هم کامل نیست و خیلی ترو تمیز درس ندادن.ما هم بچه
شهرستانیم امکانات رفتن به کلاس های حرفه ای برامون فراهم نبود.لطفا اگه
کسی می دونه راهنمایی کنه.
من فایل adad-client-3.2.jar سایت عدد که واسه تبلیغات برای یونیتی نوشته بودن رو بیرون ریختم.
اما باید کمک بدید ببینیم ازش چیزی می تونیم سر در بیاریم یا نه.
این سورسی که از فایل jar کشیدم بیرون واسه تمام فایلهای جاواشه :
http://s3.picofile.com/file/8230624650/adad_client_3_2_jar_source_from_JADX.zip.html
لطفا دانلود کنید و ببینید سر در میارید یا نه.
یه بخش token هم داره.
ببینید اینو میشه دستکاری کرد و با روشی دیگه یک پلاگین تبلیغات دیگه ساخت ؟
منبع: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 باشه ویلا نمیاد تو لیست)
منبع:gameover.blog.ir
برای اینکار باید 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; }
منبع: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"; } }
اجرا:
منبع: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
منبع :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"); } }
public AndroidJavaObject(string className, params object[] args);className اسم کلاس
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 رو بلد باشید تا مفهوم رو بهتر درک کنید)
AndroidJavaClass pluginClass = new AndroidJavaClass("ir.adad.AdadUnityPlugin"); pluginClass.CallStatic("setDisabled", new object[1] {"true"});یک مدل از کلاس ir.adad.AdadUnityPlugin می سازه با نام pluginClass و سپس متد setDisabled رو با آرایه ای تک عضوی object با مقدار true مقدار میده. به همین سادگی با اندروید ارتباط می گیره و تبلیغات خودش رو به صورت توکار حذف می کنه.
AndroidJavaObject jo = new AndroidJavaObject("android/view/ViewGroup$LayoutParams", width, height);
منبع : gameover.blog.ir
بعضی وقتا از این موردا پیش میاد. scene(صحنه) رو حذف و دوباره ایجاد کنید. mono editor رو هم بندید و اسکریپت دیگه ای ایجاد کنید بعد از چند لحظه مشکل حل میشه. موفق باشید.
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;
منبع: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 }
منبع:gameover.blog.ir
بعضی اوقات نیاز دارید یک 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)
نکته ی مهم دوم:منبع:gameover.blog.ir
الان گیم میکر منسوخ هست و گیم میکر استادیو و یونیتی معمول تره. اما بازم این سورس رو برای شما میذاریم.
//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
منبع: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