تابع Lerp لرپ در یونیتی،تابع Slerp در unity_حرکت آرام از نقطه اول به دوم،حرکت نرم بین دو نقطه در یونیتی
gameover.blog.ir
#یونیتی
آموزش بردار نرمال در یونیتی /کاربرد متد نرمالایز در یونیتی/کاربرد normalize/کاربرد تابع normalize در یونیتی/حرکت به سمت مقصد توسط بردار نرمال(بردار عمود بر هدف یا بردار حرکت مستقیم به سمت هدف
تابع Lerp از کلاس Vector3 :
در شکل به وضوح می بینید اگر ما فاصله تا هدف رو 5 قسمت کنیم تابع نرمال xyz ای میده که اگر جمع کنیم با پوز فعلی، یک واحد به سمت هدف حرکت انجام میشه.
🔶 #یونیتی
نکته: بی نرمالایز هم به سمت هدف حرکت انجام میشه ولی ابتدا سرعت زیاد و وقتی به هدف نزدیک میشیم،سرعت کمه،چون تفاضل فاصله ها کم شده در speed ضرب کنیم سرعت ثابت نیست،ولی با نرمال سرعت همیشه ثابت هست. لرزش هم داریم در انتها.
🔶🔶🔶نکته ی بعدی : متد لرپ یا تابع Lerp در حرکت نرم ،نسبت به روش normalize بهتر و جدیدتر هست. اما مقایسه ما از این جهت هست که قدرت تابع لرپ تکمیل تر از نرمالایز هست. یعنی لرپ امکانات بیشتری هم داره ولی اینکه بگیم nomalize منسوخ هست نه اینکار هم نمی کنیم. فعلا اون توی جایگاه خودش بمونه ولی فقط قصد ما اثبات قدرت لرپ بود. همین(بیسواد)
مثال ساده :
Public Transform target;
void Update(){
transform.position = Vector3.Lerp(transform.position, target.position, speed * Time.deltaTime);
}
slerp هم مثل lerp هست. شما lerp رو درک کنید اونم یادمی گیرید.
یه اسکریپت cs با کد زیر ایجاد کنید :
//lerp.cs using UnityEngine; using System public class LightLerp: MonoBehaviour { private Vector3 newPosition; void Awake() { newPosition = transform.position; } void Update() { PositionChanging(); } PositionChanging() { Vector3 positionA = new Vector3(-5,3,0); Vector3 positionB = new Vector3(5,3,0); if(Input.GetKeyDown(KeyCode.Q)) newPosition = positionA; if(Input.GetKeyDown(KeyCode.E)) newPosition = positionB; transform.posision=newPosision; } }
transform.position = Vector3.Lerp(transform.position, newPosition, smooth * Time.deltaTime);
transform.position = Vector3.Lerp(transform.position, newPosition, smooth * Time.deltaTime);
حالت دوم :
light.intensity = Mathf.Lerp(light.intensity, newIntensity, smooth * Time.deltaTime);
حالت سوم :
light.color = Color.Lerp(light.color, newColour, smooth * Time.deltaTime);
-
این کلیپ بی کیفیت که من ساختم رو ببینید تا قدرت Lerp رو درک کنید :
http://s5.picofile.com/file/8153633500/clip_lerp_func_unity3d_sajjad3011.zip.html
-
حالا روش ساخت :
یه پروژه 3d ایجاد کنید با این اجزا : main Camera ، plane و Point Light
اسکریپت js زیر رو بدید به نور نقطه ای (point Light):
#pragma strict public var smooth : float; private var newPosition : Vector3; private var newIntensity : float; private var newColour : Color; function Awake () { newPosition = transform.position; newIntensity = light.intensity; newColour = light.color; } function Update () { PositionChanging(); IntensityChanging(); ColourChanging(); } function PositionChanging () { var positionA : Vector3 = new Vector3(-5, 3, 0); var positionB : Vector3 = new Vector3(5, 3, 0); if(Input.GetKeyDown(KeyCode.Q)) newPosition = positionA; if(Input.GetKeyDown(KeyCode.E)) newPosition = positionB; transform.position = Vector3.Lerp(transform.position, newPosition, smooth * Time.deltaTime); } function IntensityChanging () { var intensityA : float = 0.5f; var intensityB : float = 5f; if(Input.GetKeyDown(KeyCode.A)) newIntensity = intensityA; if(Input.GetKeyDown(KeyCode.D)) newIntensity = intensityB; light.intensity = Mathf.Lerp(light.intensity, newIntensity, smooth * Time.deltaTime); } function ColourChanging () { var colourA : Color = Color.red; var colourB : Color = Color.green; if(Input.GetKeyDown(KeyCode.Z)) newColour = colourA; if(Input.GetKeyDown(KeyCode.C)) newColour = colourB; light.color = Color.Lerp(light.color, newColour, smooth * Time.deltaTime); }
بعد از افزودن اسکریپت فوق به نور نقطه ای، نور رو انتخاب کنید و در پنجره ی خصوصیات یا inspector پارامتر Smooth رو بدید 1 یا 2 (یه عدد غیر صفر معمولا از 1 به بالا بدید که قبلا توضیحش دادم)
اجرا کنید .
با کلید های زیر بازی کنید:
Q و E
A و D
Z و C
--
خروجی :
می بینید چقدر زیباست ؟ دقیقا عین چشماتون
همین الان تست کنید و ببینید چه قدر قشنگه کار با یونیتی.
کاربرد این کد در هوش مصنوعی هم هست و دستوری به اسم (Quaternion.Slerp(From,To,Time داریم که برای درکش فقط کافیه همین Lerp ای که بالا توضیح دادم رو تست کنید و بعدش Slerp همون پارامترها رو می گیره که یه جایی به دردتون میخوره توضیحات من.