«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
حرکت و پرش پلیر سه بعدی با استفاده از کاراکتر کنترلر و دستور Input.GetAxis("Horizontal") بدون افت فریم ریت: :: گیم اور _ بازیسازی با unity + مطالب متفرقه

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

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

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

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

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

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

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

gameover.blog.ir

حرکت پلیر سه بعدی با استفاده از کاراکتر کنترلر و دستور Input.GetAxis("Horizontal") بدون افت فریم ریت:

دستور Input.GetAxis  چیست و چگونه کار می کند؟

این دستور کلیدهای افقی و عمودی WASD رو چک می کنه.

اگه هیچکدوم فشرده نبود صفر 0 برگشت میده ویلا یا منفی یک -1 یا  مثبت یک +1 برگشت میده.


WS بالا پایین یا عمودی
AD چپ و راست یا افقی
خودمون تعیین می کنیم کدوم رو چک کنه.


 اگه افقی فلش چپ و راست AD باید ورودی بدیم horizontal .


مثال:

Input.GetAxis("Horizontal")


 اگه عمودی  فلش بالا پایین WS باید ورودی بدیم vertical .

مثال:

Input.GetAxis("Vertical")

حالا کجا ازش استفاده میشه؟

برای حرکت کاراکتر میایم xz رو تنظیم می کنیم. x یعنی چپ راست و z یعنی جلو عقب بر حسب مثبت یا منفی بودن مقداری که بهشون میدیم.

پس برای مثال داریم:

moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));

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

moveDirection = transform.TransformDirection(moveDirection);



دستور Transform Direction، مقادیر XYZ محلی را به مقادیر جهانی تبدیل میکنه.

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

moveDirection *= speed;

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


مثلا برای پرش میایم y رو تنظیم می کنیم:


if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
}


jumpSpeed هم متغیری هست قبلا فرض کردیم تعریف شده و سرعت پرش رو مشخص می کنه.

نکته: در حالت پیش فرض، کلید پرش، کلید space است.

ولی شخصیت ما چطوری بعد از پرش به زمین فرود بیاد؟

فرض می کنیم  player ما کامپوننت    rigidBody نداره .پس شرط بذارید تا زمانیکه y از صفر بیشتر بود این خط اجرا بشه:


moveDirection.y -= gravity * Time.deltaTime;


gravity هم جاذبه هست و از قبل تعریف می کنیم.

Time.deltaTime باعث میشه y طبق زمان کم بشه نه در فریم.(پس یه حرکت فرود نرم تر خواهد داشت)

در نهایت بای یک متغیر از نوع CharacterController  بسازید و کامپوننت کاراکتر کنترلر بدید به player و drag کنید روی این متغیر:

public CharacterController controller;


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

controller.Move (moveDirection * Time.deltaTime) ;




این هم یک اسکریپت ساده برای پرش و حرکت کاراکتر با استفاده از space و فلش های جهت نما(نکته:یک کامپوننت Character Controller بدید به Player و بعدش این اسکریپت زیر رو):

using UnityEngine;
using System.Collections;
public class RotateCamera : MonoBehaviour {
		private Vector3 moveDirection = Vector3.zero;
		void  Update (){
			float speed=5;
			float jumpSpeed=5;
			float gravity=5;
			float x,y,z;
			CharacterController controller = GetComponent<CharacterController>();
			if (controller.isGrounded) {
				// We are grounded, so recalculate
				// move direction directly from axes
				moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
				moveDirection = transform.TransformDirection(moveDirection);
				moveDirection *= speed;
				
				if (Input.GetButton ("Jump")) {
					moveDirection.y = jumpSpeed;
				}
			}
			// Apply gravity
			moveDirection.y -= gravity * Time.deltaTime;        
			// Move the controller
			controller.Move(moveDirection * Time.deltaTime);  
		} 
	}



نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

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