«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
کد بهینه حرکت/پرش/دابل جامپ/راه رفتن دو بعدی player در یونیتی 5 با استفاده از Easy touch version 3 سیشارپ :: گیم اور _ بازیسازی با unity + مطالب متفرقه

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

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

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

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

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

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

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

منبع: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="">
تجدید کد امنیتی