«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
فرق Vector3.Distance و Vector3.magnitude و Vector3.sqrMagnitude :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته

بایگانی
پیوندها

۱ مطلب با کلمه‌ی کلیدی «فرق Vector3.Distance و Vector3.magnitude و Vector3.sqrMagnitude» ثبت شده است

gameover.blog.ir


یک اسکریپت سیشارپ به نام fasele (همنام با کلاسی که توی کد زیر نوشتم) بسازید.

دو متغیر go1 و go2 برای دریافات دو گیم ابجکت از inspector تعریف کنید که public باشه.((اگه private باشه خصوصی هست و تو inspector دیده نمیشه))

سپس توسط تابع محاسبه ی فاصله ی بین دو بردار سه بعدی (Vector3.Distance) فاصله رو حساب می کنیم و نمایش می دیم.


مثال csharp:
using UnityEngine;
using System.Collections;

public class fasele : MonoBehaviour {
    public GameObject go1;
    public GameObject go2;
    private float dist;

    void Update () {
        dist = Vector3.Distance (go1.transform.position, go2.transform.position);
        Debug.Log (dist);
    }
}


یادتون نره به دو گیم ابجکت رو که می خواید فاصله ی بینشون رو به طور داینامیک محاسبه کنید با ماوس توی inspector بندازید روی متغیرهای go1 و go2.

نکته : Vector3.Distance(a,b) معادل (a-b).magnitude هست. همینور معادل:

float distance = (g.transform.position - this. transform. position).sqrMagnitude;



فرق Vector3.Distance و Vector3.magnitude و Vector3.sqrMagnitude :



Vector3.Distance:
// C#
     public static float Distance(Vector3 a, Vector3 b)
     {
         Vector3 vector = new Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
         return Mathf.Sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);
     }
Vector3.magnitude:
// C#
     public static float Magnitude(Vector3 a)
     {
         return Mathf.Sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
     }


Vector3.sqrMagnitude:
// C#
     public static float SqrMagnitude(Vector3 a)
     {
         return a.x * a.x + a.y * a.y + a.z * a.z;
     }

sqrMagnitude سریع از Magnitude هست.

Vector3.Distance هم می یاد بر حسب تفریق برداری و سپس مجموع مربع هر یک از پارامترهای xو y و z فاصله رو محاسبه می کنه.(در کتب ریاضی می تونید اثبات این فرمول ها رو پیدا کنید)
۵ نظر موافقین ۰ مخالفین ۰ ۰۲ مرداد ۹۴ ، ۱۴:۱۰
مدیرکل