پریدن در یونیتی
#1
Sad 
سلام
در قسمت 3d یونیتی وقتی من به یه شیع دستور پریدن میدم
مثلا میگم وقتی دکمه space فشار داده شد 
شیء 3d به مقدار مشخصی به هوا بپره
___________________
وقتی پلیر دکمه space رو فشار میده میپر هوا بعد که هنوز نیومده زمین دکمه پرش رو میزنه باز هم به مقدار قبلی باز هم همان قدر که گفته بودم اضافه میشه و هر بار که ای کار رو کنه با هم میشه
حدس فوتبالی :

دریاف از بازار           دریافت از مایکت

بازی با ریاضی :

دریافت از بازار

  پاسخ


 سپاس شده توسط:
#2
یه if دیگه هم اضافه کن و بگواگر space رو زد و اگر پلیر روی زمین بود یا اگر y همون مقداری که رو زمینه بود بپره.
وبلاگی برای کانستراکتی ها
                                                 buildgame.blog.ir

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

                                                       لرنینگ تی وی
  پاسخ


 سپاس شده توسط: developer
#3
کد:
using UnityEngine;
using System.Collections;

public class jump : MonoBehaviour {

    bool grounded = true;
    Rigidbody body;
    float jumpForce = 5f;
    RaycastHit hitGround;

    void Start () {
    
        body = GetComponent<Rigidbody>();

    }
    

    void Update () {
    
        if(grounded && Input.GetKeyDown(KeyCode.Space))
        {
            body.velocity = new Vector3 (body.velocity.x, jumpForce, body.velocity.z);
        }

        Vector3 down = transform.TransformDirection(transform.up) * 1f;

        Debug.DrawRay(transform.position, -down, Color.red);

            if(Physics.Raycast(transform.position, -down, out hitGround, 1f))

            {
                if(hitGround.collider.CompareTag("ground"))
                {
                    grounded = true;
                Debug.Log("grounded = true");
                }
        }else {
            grounded = false;
            Debug.Log("grounded = false");
        }


    }
}




ببین یک متغیر از نوع RayCastHit تعریف کردم که وظیفه محاسبه برخورد رو داره به اسم hitGround

در متد Update مدام چک کردم اگر فاصله کاراکتر که می خواد پرش کنه از زمین کم تر از 1 بود پرش کنه در غیر این صورت متغیر بولین grounded غلط میشه و امکان پرش بیش تر نیست



با استفاده از دستور transform.TransformDirection جهت y  کاراکتر را گرفتم و در اندازه مورد نظر ضرب کردم شما می تونید این اندازه را یک متغیر عمومی تعریف کنید تا آسان از داخل انجین تغیرش بدید



با استفاده از کلاس فیزیک و متد Raycast اشعه از پوزیشن کاراکتر به سمت y های منفی یا پائین زدم و چک کردم اگر آبجکت دارای تگ ground بود متغیر بولین ما صحیح بشه که امکان پرش داشته باشه 



با استفاده از متد Debug.DrawRay هم اشعه رو به رنگ قرمز در صحنه ترسیم کردم تا شما عملکردش رو کامل ببینید

دقت کنید تگ زمین را حتما باید روی ground قرار بدید 

چون در شرط به این نام مقایسه کردیم

سوالی داشتید بپرسید


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

[تصویر:  imageTut.png]
  پاسخ


 سپاس شده توسط: empire of vampire ، shayan100 ، amirho24
#4
ممنون
حدس فوتبالی :

دریاف از بازار           دریافت از مایکت

بازی با ریاضی :

دریافت از بازار

  پاسخ


 سپاس شده توسط: developer
#5
(1395/4/4، 12:00 عصر)developer' نوشته است:
کد:
using UnityEngine;
using System.Collections;

public class jump : MonoBehaviour {

bool grounded = true;
Rigidbody body;
float jumpForce = 5f;
RaycastHit hitGround;

void Start () {

body = GetComponent<Rigidbody>;();

}


void Update () {

if(grounded && Input.GetKeyDown(KeyCode.Space))
{
body.velocity = new Vector3 (body.velocity.x, jumpForce, body.velocity.z);
}

Vector3 down = transform.TransformDirection(transform.up) * 1f;

Debug.DrawRay(transform.position, -down, Color.red);

if(Physics.Raycast(transform.position, -down, out hitGround, 1f))

{
if(hitGround.collider.CompareTag("ground"))
{
grounded = true;
Debug.Log("grounded = true");
}
}else {
grounded = false;
Debug.Log("grounded = false");
}


}
}





ببین یک متغیر از نوع RayCastHit تعریف کردم که وظیفه محاسبه برخورد رو داره به اسم hitGround

در متد Update مدام چک کردم اگر فاصله کاراکتر که می خواد پرش کنه از زمین کم تر از 1 بود پرش کنه در غیر این صورت متغیر بولین grounded غلط میشه و امکان پرش بیش تر نیست



با استفاده از دستور transform.TransformDirection جهت y  کاراکتر را گرفتم و در اندازه مورد نظر ضرب کردم شما می تونید این اندازه را یک متغیر عمومی تعریف کنید تا آسان از داخل انجین تغیرش بدید



با استفاده از کلاس فیزیک و متد Raycast اشعه از پوزیشن کاراکتر به سمت y های منفی یا پائین زدم و چک کردم اگر آبجکت دارای تگ ground بود متغیر بولین ما صحیح بشه که امکان پرش داشته باشه 



با استفاده از متد Debug.DrawRay هم اشعه رو به رنگ قرمز در صحنه ترسیم کردم تا شما عملکردش رو کامل ببینید

دقت کنید تگ زمین را حتما باید روی ground قرار بدید 

چون در شرط به این نام مقایسه کردیم

سوالی داشتید بپرسید



برای من کار نمیکنه هرچی میزنم رو اسپیس و پیام false همش برام پرینت میشه

 



 
  پاسخ


 سپاس شده توسط:


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  سیستمم مورد نیاز برای یونیتی 5 ^_^ Ali ^_^ 5 3,135 1402/3/5، 10:31 عصر
آخرین ارسال: M.Y
  کمترین حجم بازی محمد 82 3 752 1401/11/16، 11:29 صبح
آخرین ارسال: mostafanastary
  خروجی IL2CPP در یونیتی arshia ajoudani 2 1,156 1401/11/11، 11:09 صبح
آخرین ارسال: abedi
  خروجی وب M.Y 0 778 1401/8/1، 04:36 عصر
آخرین ارسال: M.Y
  سوال در مورد دوره شوتر اول شخص استاد رجب زاده amin hosseini 1 1,397 1400/12/20، 11:01 عصر
آخرین ارسال: ᔕinaᗪehghani

پرش به انجمن: