نگاه کردن دو اسپرایت به همدیگر در یونیتی از نمای بالا+ پهلو(پلتفرم)
شنبه, ۱۴ آذر ۱۳۹۴، ۰۵:۵۰ ب.ظ
منبع:gameover.blog.ir
اسکریپت سیشارپ face2face زیر رو بدید به هر دو اسپرایت دلخواهتون.
سپس در inspector اسپرایت دشمن یا اسپرایتی که می خواید بهش نگاه بشه رو بکشید روی متغیر target .
//Author:Sajjad3011 //face2face.cs using UnityEngine; using System.Collections; public class face2face: MonoBehaviour { public Transform target; private Vector3 v_diff; private float atan2; void Update() { v_diff = (target.position - transform.position); atan2 = Mathf.Atan2 ( v_diff.y, v_diff.x ); transform.rotation = Quaternion.Euler(0f, 0f, atan2 * Mathf.Rad2Deg -90); } }
مثال بالا برای حالت top-down بود.
اما مثال(توضیح) زیر برای حالت platform یا از پهلو هست.
فرض کنید دو گیم ابجکت دو بعدی داریم می خوایم به هم نگاه کنن در هر حالتی.
هر شی اگه در سمت چپ بود به سمت راست وگرنه به چپ نگاه کنه.(به هر شی یک اسکریپت مشترک میدیم).
روش کار:
اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت
ببینید
شما x دو گیم ابجکت رو نسبت به هم مقایسه کنید
اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت
این کار رو برای هر دو گیم ابجکت دو بعدی تکرار می کنیم
private float xScale,yScale;
void Start(){
xScale = transform.localScale.x;
yScale = transform.localScale.y;
}
void Start(){
xScale = transform.localScale.x;
yScale = transform.localScale.y;
}
سپس در FixedUpdate یا Update یا OnGUI کد زیر رو می ذاریم:( هر کدوم راحت ترید، فرقشون اینه که OnGUI بیشتر از FixedUpdate و FixedUpdate بیشتر از Update فراخوانی میشه تو هر فریم زمان و خب دقت اونی که بیشتر فراخانی میشه بیشتری اما از اونطرف هم سربار محاسبات داریم به خاطر اینکه هی پردازنده باید سیگنال بفرسته برای اجرای تابع یا رویدادی که بیشتر باید چک بشه)
signX = (x1<x2)? +1 : -1 ;
توضیح:علامت سوال، عملگر شرطی هست، اگه x1 از x2 کمتر بود، علامت مثبت یک میره توش ویلا منفی یک.
علامت بدست اومده ضرب می شه در این فرمول:
_transform.localScale = new Vector2(signX * xScale,yScale);
من C# تسلط دارم اما پایه یونیتی رو بلد نیستم آموزش پایه ای ندارید ؟؟؟