کانال بازی سازی تلگرام
کد بهینه حرکت/پرش/دابل جامپ/راه رفتن دو بعدی player در یونیتی 5 با استفاده از Easy touch version 3 سیشارپ :: آموزش ساخت بازی اندروید+پکیج های تخصصی

آموزش ساخت بازی اندروید+پکیج های تخصصی

در گیم اور، همیشه حق با مشتری است و در صورت نارضایی با هم به توافق می رسیم.
--
تمام اعمالی که انجام می دهیم، حتی اگر ذره ای و مثقالی باشد، به خودمان باز می گردد و بازتابش آنها را در زندگی خواهیم دید. زلزال ۷
او کسی است که (روح) شما را در شب (به هنگام خواب) میگیرد; و از آنچه در روز کرده ‏اید، با خبر است; سپس در روز شما را (از خواب) برمیانگیزد; و (این وضع همچنان ادامه مییابد) تا سرآمد معینی فرا رسد; سپس بازگشت شما به سوی اوست; و سپس شما را از آنچه عمل میکردید، با خبر میسازد. انعام ۶۰
دلها به یاد خدا آرام میگیرد. رعد آیه ۲۷
بدانید زندگی دنیا تنها بازی و سرگرمی، و تجمل پرستی و تفاخر در میان شما و افزون طلبی در اموال و فرزندان است . حدید آیه ۲۰
آن خدایی که آدمی را از خون بسته (که تحول نطفه است) بیافرید.
بخوان و (بدان که) پروردگار تو کریم‌ترین کریمان عالم است.
آن خدایی که بشر را علم نوشتن به قلم آموخت.
به آدمی آنچه را که نمی‌دانست تعلیم داد.
راستی که انسان سرکش و مغرور می‌شود.
چون که خود را در غنا و دارایی ببیند. علق ۲- ۷
این زندگانی چند روزه دنیا افسوس و بازیچه‌ای بیش نیست، عنکبوت ۶۴
در روی زمین به تکبر راه مرو که نمی توانی زمین را بشکافی و هرگز قامتت به بلندای کوهها نمی رسد. اسراء ۳۷
در آنچه خداوند بر تو بخشیده است، سرای آخرت را بجوی و سهم خود را از دنیا فراموش مکن و همانگونه که خدا به تو نیکی کرده است نیکی کن و هرگز فساد در زمین منما که خدا مفسدان را دوست ندارد. قصص ۷۷
و هرگاه نعمت و رحمتی به انسان بچشانیم و سپس آن را از او برگیریم او مأیوس و نومید میشود و به کفران و ناسپاسی بر میخیزد. هود ۹
بندگان مرا آگاه ساز که من بسیار آمرزنده و مهربانم. حجر ۴۹
از رحمت خدا نا امید مباشید که جز کافر هیچ کس از رحمت خدا نا امید نیست. یوسف ۸۷
پس به یاد من باشید تا به یاد شما باشم. بقره ۱۵۲
زندگانی دنیا چیزی جز متاع فریبنده نیست . آل عمران ۱۸۵
از آنچه به شما روزی داده ایم پیش از آنکه روزی فرا رسد که نه معامله ای وجود دارد و نه دوستی و شفاعت ، انفاق کنید. بقره ٢۴۵
بسا چیزی را ناخوش داشته باشید که آن به سود شماست و بسا چیزی را دوست داشته باشید که به زیان شماست، و خدا میداند و شما نمیدانید. بقره ۲۱۶
ما آیات (خود) را برای شما بیان کردیم شاید اندیشه کنید...حدید ۱۷

پیوندهای روزانه
پیوندها

منبع:gameover.blog.ir

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

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



//optimized Player 2d move+shoot+jump+double jump
//edited:1/2/2016
//csharp language
//Author:Sajjad3011
//unity 5.2 final
//Easy touch joystick version 3
//gameover.blog.ir
//promakers.ir
using UnityEngine;
using System.Collections;
using System.Reflection;
using UnityEditor;
public class player : MonoBehaviour {
	
	public float speed=0.1f,jumpForce=10f;
	private bool grounded=false;
	public Animator anim;
	private float xScale,yScale;
	public Rigidbody2D rb2d;
	private float signX;
	private Transform _transform;
	
	void Start ()
	{
		xScale = transform.localScale.x;
		yScale = transform.localScale.y;
		_transform = this.transform;//cache for optimization
	}	
	void FixedUpdate () 
	{
		if (rb2d.velocity.y == 0) 
		{
			grounded=true;
			anim.SetBool("onGround", true);//we are on air
		} else {
			grounded = false;
		}
		if(grounded && !Input.anyKey)//if we are on ground and no key pressed
		{
			rb2d.velocity = new Vector2 (0,0);//stop(x,y)
			//anim.SetInteger("state",1);//play idle animation
			StartCoroutine (switchAnimation (1));
		}

		if (Input.GetKey (KeyCode.LeftArrow))//if Left
		{
			anim.enabled=true;
			//anim.SetInteger("state",2);//play Run animation
			StartCoroutine (switchAnimation (2));
			//rb2d.velocity = new Vector2 (-speed ,rb2d.velocity.y);//move left 
			_transform.position += new Vector3(-speed, 0, 0);
			_transform.localScale = new Vector2 (-xScale,yScale);//face left	  
		}
		if (Input.GetKey (KeyCode.RightArrow))//if Right      
		{      
			anim.enabled=true;
			//anim.SetInteger("state",2);//play Run animation
			StartCoroutine (switchAnimation (2));
			//rb2d.velocity = new Vector2 (speed ,rb2d.velocity.y);//move right
			_transform.position += new Vector3(+speed, 0, 0);
			_transform .localScale = new Vector2 (xScale,yScale);//face right
		}
		
		if (Input.GetKeyUp (KeyCode.UpArrow)) StartCoroutine (jump ());
	}//

	void On_JoystickMove( MovingJoystick move){
		//anim.SetInteger("state",2);//run	
		StartCoroutine (switchAnimation (2));
		signX = Mathf.Sign (move.joystickAxis.x);
		_transform.position += new Vector3(signX*speed, 0, 0);
		//rb2d.velocity = new Vector2 (signX *speed ,rb2d.velocity.y);
		_transform.localScale = new Vector2(signX * xScale,yScale);
		if (move.joystickAxis.y > 0) StartCoroutine (jump ());
		
	}
	IEnumerator switchAnimation(int state){
		anim.SetInteger("state",state);//play idle animation
		yield return new WaitForFixedUpdate();
	}
	IEnumerator jump(){
		if (grounded) {
			rb2d.velocity = new Vector2 (rb2d.velocity.x, jumpForce);
			anim.enabled=true;
			anim.SetInteger ("state", 3);//play jump animation
			anim.SetBool ("onGround", false);//we are on air

			yield return new WaitForFixedUpdate();
			
		}//end switch
		else
			;//if on air
		//anim.SetInteger("state",4);//play double jump animation
		//anim.SetInteger("state",1);//play double jump animation
	}//jump()
	
	

}

توضیح:


در این اسکریپت متغیر anim از نوع Animator و به صور public تعریف شده یعنی کامپوننت انیماتور رو که به player دادیم با ماوس باید بگیریم بندازیم روش(در inspector)

قسمت xScale  و yScale هم مقدار مقیاس x و y رو خوندیم و ریختیم توی متغیرها. و با localScale.x کاراکتر رو به سمت چپ و راست می کنیم.

اگه منفی باشه به سمت چپ و اگه ثبت باشه به سمت راست. این مثبت و منفی رو هم با Mathf.Sign می خونیم(math کلاس ریاضی هست و sign علامت رو میده مثلا عدد منفی علامتش -1 هست و عدد مثبت  علامتش +1 هست)

(این قسمت رو با دستور signX = Mathf.Sign (move.joystickAxis.x); با جوی استیک مرتبط می کنیم. چون اگه جوی استیک رو بکشیم به چپ مقدارش یه عدد منفی میشه و اگه به راست ببریم یک عدد مثبت)

در کد فوق اگه دقت کنید فلش چپ و راست رو با transform نوشتم و فلش بالا رو با velocity از rigidbody2d .
velocity به معنی شتاب هست و در فیزیک معمولا پرش رو بهتره با اون بسازیم که جاذبه زیباتر بشه.
اما فلش چپ و راست رو چرا با velocity نساختم دلیلش این بود که وقتی فلش راست رو رها می کردم بلافاصله کاراکتر ایست نمی کرد و یکم راه می رفت بعدش می موند که این رو من نمی خواستم.
دقت کنید که اسم اسکریپت رو بذارید player چون اسم کلاس داخل سورس بالا player هست و حتما باید اسم اسکریپت و اسم کلاس یکسان باشه(توی سیشارپ)

نکته مهم: متغیر _transform برای cache کردن و بهینه سازی ساختیم.
در مثال فوق بای بهیته سازی ، تابع jump و حالات سوئیچ بین وضعیت های انیماتور رو هم coRoutine کردم (IEnumerator )


دانلود پکیج EasyTouch v3.:
http://gameover.blog.ir/1394/08/11/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%BE%DA%A9%DB%8C%D8%AC-%D9%BE%D9%84%D8%A7%DA%AF%DB%8C%D9%86-easy-touch-version-3-1-%D8%A8%D8%B1%D8%A7%DB%8C-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-5
موافقین ۰ مخالفین ۰ ۹۴/۰۸/۱۱
مدیرکل

نظرات (۹)

سلام.
پلاگین  Easy Touch رو که نصب کردیم از کجا این کد ها رو بهش بدیم که پلیر ما رو کنترل کنه.
ممنون
پاسخ:
ابتدا پلاگین رو بکشید روی پروژه و import کنید.
بعدش مسیر یر رو طی کنید :
Tools->apex->hedgehog team->easyTouch->Extensions->Adding a new joystick
با این کار دو آیتم EasyTouch و new joy stick اضافه میشه و موقع اجرا ظاهر میشه.
جوی استیک خودش میاد پایین و سمت چپ و اندازه و برای تنظیم پارامترهاش فقط توی inspector می
تونید خصوصیات رو دستکاری کنید مثلا top left اگه بذارید بالا و چپ صحنه میاد . حالت عادی lower left
هست یعنی پایین و چپ صحنه.
پارامتر Interaction type روی گزینه ی Event Notification .
پارامتر Broadcas Messaging فعال .
پارامتر Receiver gameobject هم روی گیم ابجکت پلیر تنظیم شود یعنی گیم ابجکت Player رو بکشید
بندازید روش.
چون قراره اسکریپتی که می نویسیم بدیم به player و با استفاده از جوی استیک قراره player رو بعد از
اجرای بازی حرکت بدیم.
در قسمت Joystick textures هم می تونید تکستچر و اسپرایت جوی استیک رو ویرایش کنید .
مثلا می تونید برید توی فتوشاپ و یک نقاشی دیگه بکشید png بگیرید و جایگزینش کنید.
-
کدها رو هم توی یک اسکریپت بذارید همنام با کلاس(یعنی player.cs)
سلام.
بسیار کامل عالی بود توضیحاتتون.
یا علی مدد
پاسخ:
سلام.موفق باشید.

سلام ممنون بابت آموزشتون

ولی واسه من پرش کار نمیکنه!!!؟

باید کدهارو تغییر بدم؟

پاسخ:
سلام.
کد کاملا درست و تست شده هست. با یونیتی 5.1 حداقل کار کنید.
دقت کنید ببینید RigidBody2d به ورودی ها دادین یا خیر.
سوالات رو بیاید تو گروه تلگرام بپرسید که بالا وبلاگ لینک گذاشتیم.
دستتون درد نکنه یه سوال دیگه باید چی رو به anim وصل کنم؟؟؟؟ من چیزی پیدا نکردم که بهش وصل کنم
پاسخ:
سلام.

anim متغیر public از نوع Animator هست. متغیرهای پابلیک توی inspector ظاهر میشن و ورودی رو از همونجا هم می تونیم تنظیم کنیم.

ابتدا در کادر پروژه هم راست کلیک و یک animator controller باید بسازید و بعد از دوبار کلیک و باز شدن انیمیشن ها رو بکشید توش رها کنید.سپس انیماتور کنترلر رو بکشید روی متغیر مربوط از animator component کامپوننت رها کنید .

سپس باید یک Animator component بدید به گیم ابجکت player تون بعدش کامپوننت انیماتور رو از inspector با ماوس drag کنید روی متغیر anim در همون inspector.


--

دوستان سوالات رو بیاید توی گروه تلگرام چون اینجا وقت نمیشه.
۲۴ اسفند ۹۴ ، ۲۱:۲۹ فرزانه توکلی
سلام منم دقیقا مشکل آقای فرشیدو دارم
چی باید به انیم بدیم؟
پاسخ:
سلام.

anim متغیر public از نوع Animator هست. متغیرهای پابلیک توی inspector ظاهر میشن و ورودی رو از همونجا هم می تونیم تنظیم کنیم.

ابتدا در کادر پروژه هم راست کلیک و یک animator controller باید بسازید و بعد از دوبار کلیک و باز شدن انیمیشن ها رو بکشید توش رها کنید.سپس انیماتور کنترلر رو بکشید روی متغیر مربوط از animator component کامپوننت رها کنید .

سپس باید یک Animator component بدید به گیم ابجکت player تون بعدش کامپوننت انیماتور رو از inspector با ماوس drag کنید روی متغیر anim در همون inspector.


۲۵ اسفند ۹۴ ، ۱۴:۲۲ فرزانه توکلی
مرسی خوب اینی که شما میفرمایین برای کامپوننت انیماتور هست اگر کامپوننت انیمیشن استفاده کنیم به متغیر anim از نوع animation چی باید الحاق کنیم از inspector؟
با عرض سلام و خسته نباشید میشه لطفا کد مربوط به پرش در فضای سه بعدی رو آموزش بدید
۱۹ تیر ۹۵ ، ۱۹:۲۵ امیر عسکری
سلام.
شما خیلی فعالی!
خیلی خیرخواهی!
خیلی به فکر بقیه هستی!
واقعا تشکر...

امیدوارم هرکی و هرجا هستی، بهترین هارو خدا بهت بده(اگه صلاح دونست)

توی این تاپیک، بیشترین چیزی که تونست مشکلمو حل کنه، توضیحی بود که برای کدها دادی.
خیلی دنبال علتهای بعضی کدها بودم.
امیدوارم این رویه رو پیش بگیری...
پاسخ:
سلام. ممنون.
اگه میشه هر روز روی تبلیغات بالای وبلاگ یکبار کلیک بفرمایید.
این حداقل چیزی هست که از شما می خوایم.
با تشکر.
۱۱ مرداد ۹۵ ، ۰۱:۳۹ علیرضا اتحادی
واقعا مرسی و ممنون 

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی