Menu
CoddyTech

المسافة بين الأشياء

جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 28 من 85.

تُبيّن Vector3.Distance(a, b) المسافة بين نقطتين، بالوحدات، مقيسةً بخط مستقيم عبر المحاور الثلاثة. وهي طول الخطوة بينهما، (a - b).magnitude، لذا لا يهم ترتيب a وb. المسافة من (0, 0, 0) إلى (3, 0, 4) هي 5.

بمقارنة المسافة برقم، يعرف البرنامج النصي متى يكون شيء ما قريبًا. يستطيع هذا المخيّم تدفئة يديه فقط عندما يكون على بُعد 4 وحدات من نار المخيّم، ويحدّد Inspector موضعها:

public Vector3 campfire = new Vector3(3, 0, 4);

void Update()
{
    float d = Vector3.Distance(transform.position, campfire);
    if (d < 4f && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("You warm your hands");
    }
}

تُحتسب الارتفاع أيضًا ضمن المسافة: فالمخيّم الذي يعلو النار بمقدار 5 وحدات يبعد عنها 5 وحدات، لا 0. عندما لا ينبغي احتساب الارتفاع، قارِن بين نقطتين لهما قيمة y نفسها.

challenge icon

التحدي

سهل

خفّف سرعة الشخص المتجوّل إلى النصف في المستنقع.

  1. أسفل float s = speed;، اكتب if (Vector3.Distance(transform.position, swamp) < 3f).
  2. داخلها، عيّن s = speed / 2;. اترك الحقل speed وأسطر الحركة كما هي.

اضغط «العب» وامشِ مباشرةً عبر المستنقع: ستتباطأ سرعة الشخص المتجوّل فيه. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;
    public Vector3 swamp = new Vector3(0, 0.5f, 0);

    void Update()
    {
        float s = speed;
        // عندما تكون على بُعد 3 وحدات أو أقل من المستنقع، تحرّك بنصف السرعة.

        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += direction.normalized * s * Time.deltaTime;
    }
}

جميع دروس أساسيات البرمجة النصية في Unity

تدرّب بنفسك: Playground لـ Unity