پیاده سازی normalized با استفاده از lerp_ کاربرد تابع normalazied در یونیتی

ساخت وبلاگ

@gameoverblog

gameover.blog.ir

#یونیتی 


نویسنده: بیسواد از گیم اور 

آموزش بردار نرمال در یونیتی /کاربرد متد نرمالایز در یونیتی/کاربرد normalize/کاربرد تابع normalized در یونیتی/حرکت به سمت مقصد توسط بردار نرمال(بردار عمود بر هدف یا بردار حرکت مستقیم به سمت هدف


تابع Lerp از کلاس Vector3 :


در شکل به وضوح می بینید اگر ما فاصله تا هدف رو 5 قسمت کنیم تابع نرمال xyz ای میده که اگر جمع کنیم با پوز فعلی، یک واحد به سمت هدف حرکت انجام میشه.


#یونیتی


نکته: بی نرمالایز هم به سمت هدف حرکت انجام میشه ولی ابتدا سرعت زیاد و وقتی به هدف نزدیک میشیم،سرعت کمه،چون تفاضل فاصله ها کم شده در speed ضرب کنیم سرعت ثابت نیست،ولی با نرمال سرعت همیشه ثابت هست. لرزش هم داریم در انتها.




نکته ی بعدی : متد لرپ یا تابع Lerp در حرکت نرم ،نسبت به روش normalize بهتر و جدیدتر هست. اما مقایسه ما از این جهت هست که قدرت تابع لرپ تکمیل تر از نرمالایز هست. یعنی لرپ امکانات بیشتری هم داره ولی اینکه بگیم nomalize منسوخ هست نه اینکار هم نمی کنیم. فعلا اون توی جایگاه خودش بمونه ولی فقط قصد ما اثبات قدرت لرپ بود. همین(بیسواد)


مثال ساده :


Public Transform target;

void Update(){

transform.position = Vector3.Lerp(transform.position, target.position, speed  * Time.deltaTime);

}




ادامه (کاربرد تابع Lerp)

حرکت به اندازه ای که تابه لرپ نسبت به ضریب 0.1f  از مبدا t1 به مقصد t2 محاسبه می کنه.
نمی تونیم بگیم 0.1f قدر. چون کار تابع لرپ اینه که اگه پارامتر سوم 1 باشه پوزیشن t2  و اگه 0 باشه پوزیشن t1 و اگه 0.5 باشه پوزیشن بین  t1 و t2 رو برگشت می ده.





using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NORMAL : MonoBehaviour {

    public Transform t1, t2;
 
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.A))
        {

        t1.position = Vector3.Lerp(t1.position, t2.position, 0.1f);

        }

    }
}

در این مثال با فشردن کلید A ، جسم مبدا به سمت مقصد حرکت می کنه. 
هر بار  به اندازه ای که خود تابع لرپ نسبت به ضریب 0.1f محاسبه می کنه.(دقت کنید نگفتم به طول یک، چون طول یک رو تابع نرمالایز می داد و جلو تر روش پیاده سازی نرمالایز رو با لرپ می گم )

اسکریپت رو بندازید روی هر جسمی که دوست دارید .

سپس گیم ابجکت اول  و دوم رو به ترتیب درگ کنید روی متغیر t1 و t2.

اجرا بگیرید. جسم مقصد رو جابجا کنید تا جسم مبدا بیاد دنبالش.






پیاده سازی normalized با استفاده از lerp/پیاده سازی متد نرمالایز با استفاده از متد لرپ/ساخت normalized با استفاده از Lerp/شبیه سازی تابع/متد normalized با استفاده از متد/تابع Lerp


'تمام محاسبه و کد توسط گیم اور انجام شده و کپی از جایی نیست.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NORMAL : MonoBehaviour {

    public Vector3 t1, t2;
    float speed = 0.01f;
    void Start()
    {
        t1 = new Vector3(0, 0, 0);
        t2 = new Vector3(1, 2, 2);
    
    }
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.A))
        {
            Debug.Log(Vector3.Lerp(t1, t2, 1.0f/Vector3.Distance(t1,t2)));
            Debug.Log((t2-t1).normalized);
        Debug.Log("Thank u bisavad ma behet eftekhar mikonim");
        }

    }
}

دقت کنید که خروجی هر دو، برداری هست که اگر با بردار اول جمع بشه به اندازه ی یک واحد به سمت بردار دوم حرکت میشه کرد.



تابع لرپ/متد لرپ/تابع Lerp/متد Lerp  از کلاس Vector3

شکل کلی


public static Vector3 Lerp(Vector3 a, Vector3 b, float t);


خروجی:
اگر t=0 بردار a
اگر t=1 بردار b
اگر t=0.5  بردار بین a,b 

در غیر اینصورت برداری روی فاصله ی بین بردار a و b
بر گشت داده میشه.

اگه  بخوایم  تابع normalized رو با Lerp پیاده سازی کنیم باید عدد 1 رو تقسیم به فاصله ی بین دو بردار کنیم،چون یک قسمت از این فاصله رو باید بدیم تا بردار حرکت به ما تحویل داده بشه.

دوستان این نکات رو بنویسید توی دفترتون. چون هر جایی گفته نشده.
همکاری_به چند نویسندگی زیر 15 سال برای وبلاگ نیاز داریم...
ما را در سایت همکاری_به چند نویسندگی زیر 15 سال برای وبلاگ نیاز داریم دنبال می کنید

برچسب : نویسنده : 8gameover9 بازدید : 261 تاريخ : سه شنبه 26 دی 1396 ساعت: 4:07