برنامه نویس hossien014.github.io
بدست اوردن مختصات گوشه های باکس کُلایدر "box colider" در یونیتی
بسم الله الرحمن الرحیم
بدست اوردن مختصات گوشه های باکس کلایدر برای من که خیلی کاربرد داشته امیدوارم بدرد شما هم بخوره .
کلایدر سه بعدی BoxColider
اگر از box colider سه بعدی استفاده می کنید کافیه از این کد استفاده کنید(البته کد ها داخل سایت ویرگول بخاطر اندازه یکم نامرتب نشون داده میشن)
کد زیر یک گیم ابجکت میگرد و مختصات هر هشت گوشه باکس کلایدر چسبیده به گیم ابجکت را در قالب یک اریه از وکتور3 "vector3" بر میگرداند.
public static Vector3[] GetColiderCorners(GameObject obj)
{
if (obj.transform.GetComponent<BoxCollider>() != null)
{
Vector3[] vertices = new Vector3[8];
BoxCollider b = obj.GetComponent<BoxCollider>();
vertices[0] = obj.transform.TransformPoint(b.center + new Vector3(-b.size.x, -b.size.y, -b.size.z) * 0.5f);
vertices[1] = obj.transform.TransformPoint(b.center + new Vector3(b.size.x, -b.size.y, -b.size.z) * 0.5f);
vertices[2] = obj.transform.TransformPoint(b.center + new Vector3(b.size.x, -b.size.y, b.size.z) * 0.5f);
vertices[3] = obj.transform.TransformPoint(b.center + new Vector3(-b.size.x, -b.size.y, b.size.z) * 0.5f);
vertices[4] = obj.transform.TransformPoint(b.center + new Vector3(-b.size.x, b.size.y, -b.size.z) * 0.5f);
vertices[5] = obj.transform.TransformPoint(b.center + new Vector3(b.size.x, b.size.y, -b.size.z) * 0.5f);
vertices[6] = obj.transform.TransformPoint(b.center + new Vector3(b.size.x, b.size.y, b.size.z) * 0.5f);
vertices[7] = obj.transform.TransformPoint(b.center + new Vector3(-b.size.x, b.size.y, b.size.z) * 0.5f);
return vertices;
}
Debug.LogError("game objcet should have boxcolider");
return null;
}
کلایدر دوبعدی BoxColider2D
اما برای گرفت مختصات گوشه های باکس کلایدر دو بعدی از کد زیر استفاده کنید
public static Vector3[] GetColiderCorners2D(GameObject obj)
{
Vector3[] corners = new Vector3[4];
if (obj.transform.GetComponent<BoxCollider2D>() != null)
{
BoxCollider2D b = obj.transform.GetComponent<BoxCollider2D>();
corners[0] = obj.transform.TransformPoint(b.offset + new Vector2(b.size.x, b.size.y) * 0.5f); // right up
corners[1] = obj.transform.TransformPoint(b.offset + new Vector2(-b.size.x, b.size.y) * 0.5f); // left up
corners[2] = obj.transform.TransformPoint(b.offset + new Vector2(b.size.x, -b.size.y) * 0.5f); // right down
corners[3] = obj.transform.TransformPoint(b.offset + new Vector2(-b.size.x, -b.size.y) * 0.5f); // left down
return corners;
}
Debug.LogError("game object should have box colider 2d");
return null;
}
دستور TransformPoint در یونیتی چیست؟
در کد های بالا به مراتب از دستور transformpoint استفاده شده است. اما این دستور چکاری می کند.
این دستور بر روی vector 3 اجرا می شود و یک vector 3 میگرید و ان مختصات را بر اساس مختصات اول اعمال می کند.
Vector3 TransformPoint(Vector3 position);
مثلا اگر دو ابجکت به اسم a و b داشته باشید و بخواهید ابجکت b دو واحد بالای ابجکت a برود باشد از این دستور استفاده می کنیم
public class ExampleClass : MonoBehaviour
{
public GameObject someObject;
public Vector3 thePosition;
void Start()
{
// سمت راست ابجکت فعلی یک ابجکت به وجود می اورد
thePosition = transform.TransformPoint(Vector3.right * 2);
Instantiate(someObject, thePosition, someObject.transform.rotation);
}
}
مطلبی دیگر از این انتشارات
مراحل توسعه بازی های ویدئویی - 6 مرحله شروع طراحی بازی های ویدئویی برای تازه کاران
مطلبی دیگر از این انتشارات
دانلود رایگان فایل های اماده بازی سازی -free game assets
مطلبی دیگر از این انتشارات
درون یابی خطی یا Lerp چیست unity c#