שאלת קוד ביוניטי...

TheGreatNut

New member
שאלת קוד ביוניטי...

ar speedChange:float; var speedMax:float; private var secondsPast:int; private var currentSpeed:float; private var speedVector3:Vector3; private var motionPhase:String="leftB"; private var firstRun:boolean=false; function Update () { secondsPast=Time.time; if(firstRun==false) { currentSpeed=-speedMax; firstRun=true; } switch(motionPhase) { case "leftB": if(currentSpeed + speedChange >= 0) { currentSpeed = 0; motionPhase = "rightA"; }else{ currentSpeed += speedChange; } break; case "rightA": if(currentSpeed + speedChange >= speedMax) { currentSpeed = speedMax; motionPhase = "rightB"; }else{ currentSpeed += speedChange; } break; case "rightB": if(currentSpeed + speedChange <= 0) { currentSpeed = 0; motionPhase = "leftA"; }else{ currentSpeed -= speedChange; } break; case "leftA": if(currentSpeed + speedChange <= -speedMax) { currentSpeed = -speedMax; motionPhase = "leftB"; }else{ currentSpeed -= speedChange; } break; } } function FixedUpdate() { speedVector3 = Vector3(0, 0, currentSpeed * Time.deltaTime); rigidbody.MovePosition(rigidbody.position + speedVector3); }
 

TheGreatNut

New member
הנה...

השאלה היא כזאת. הקוד הזה מוצמד לקובייה פשוטה שבעצם זזה ימינה ושמאלה ללא הפסקה. העניין הוא שמשום מה היא תמיד זזה יותר שמאלה מאשר ימינה ככה שלאט לאט המיקום הראשוני שלה משתנה יותר ויותר. אני מניח שזה קשור לעניין הפריימים של יוניטי, אבל אני לא יודע ממש מה הולך שם. יש למישהו תשובה?
 

De-Panther

New member
אמנם ענו לך במקום אחר, ולא ממש יצא לי להכנס..

לתוך הסקריפט עצמו. אבל כמה דברים שכדאי לך לשים לב אליהם: הפקודה הספציפית הזו של מוב, זזה לפי דלטה טיים. במקרה הספציפי שלך הוא קבוע, אבל במקרים אחרים הוא לא חייב להיות. דלטה טיים הוא ההפרש בין הפריים הנוכחי לקודם, ככזה, הוא פחות משניה.(מספר קטן ולא שלם) מה שאומר, שאם המהירות בה הכפלת את הדלטה טיים היא 1. אז בכל פריים הדמות תזוז 0.02. מה שגם יכול לגרום לזה שהיא לא תגיע בדיוק לנקודה שבה רצית שהקוביה תעצור, אלא תעבור אותה בקצת. בשביל זה, אתה צריך לבדוק גם אם היא עברה את נקודת המקסימום שקבעת, או אם היא שווה לנקודת המקסימום שקבעת. ואם היא עברה, אז למקם אותה בנקודת המקסימום. בנוסף, את הבדיקות עדיף שתעשה בפיקסד אפדייט(הפונקציה בה אתה תאכלס מזיז את הקוביה), משום שבאפדייט ובפיקסד אפדייט היא יכולה להיות במקומות שונים.
 

TheGreatNut

New member
תודה. עובד. שיניתי את זה לבדיקה של...

מיקום. ועכשיו הבנתי גם מה זה FIXEDUPDATE.
 
למעלה