Menu
CoddyTech

מהירות אלכסונית

חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 27 מתוך 85.

החזק את החצים ימינה ולמעלה יחד, והצירים הגולמיים נותנים את הכיוון (1, 0, 1). האורך שלו, .magnitude, הוא השורש הריבועי של 1 + 1, בערך 1.41. הולך רגל שנע באמצעותו עובר 1.41 יחידות באלכסון בזמן שהוא עובר יחידה אחת ישר קדימה: מהירות גבוהה ב־41%.

.normalized מחזיר עותק של וקטור שמצביע לאותו כיוון ואורכו בדיוק יחידה אחת: (1, 0, 1) הופך בערך ל־(0.71, 0, 0.71), ו־(0, 0, 5) הופך ל־(0, 0, 1). כשמכפילים אותו במהירות, התנועה היא באותה מהירות בכל כיוון. הדבורה הזאת עפה לעבר הפרח במהירות של 2 יחידות לשנייה, בין שהפרח רחוק ובין שהוא קרוב; ללא .normalized היא הייתה עפה מהר יותר ככל שהפרח רחוק יותר:

public Vector3 flower = new Vector3(4, 1, 3);
public float speed = 2f;

void Update()
{
    Vector3 toFlower = flower - transform.position;
    transform.position += toFlower.normalized * speed * Time.deltaTime;
}

Vector3.zero.normalized נשאר (0, 0, 0), כי לאפס אין כיוון. v.normalized משאיר את v כפי שהוא; v.Normalize() משנה את v עצמו.

challenge icon

אתגר

קל

גרום להולך לנוע באותה מהירות גם באלכסון.

  1. בתוך Update(), בנה את Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));.
  2. הוסף את direction.normalized * speed * Time.deltaTime אל transform.position.

לחץ על "שחק" והחזק שני מקשי חצים: ההולך ינוע באלכסון במהירות שאינה עולה על מהירותו בתנועה ישרה. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        // מקשי החצים או WASD: תנועה לאורך x ו-z במהירות speed, זהה גם בתנועה אלכסונית.
    }
}

כל השיעורים ביחידה יסודות הסקריפטים ב-Unity

תרגלו בעצמכם: Unity אונליין