התחלת משחק חלליות 3d (ב-Unity3d)

cerulean

New member
התחלת משחק חלליות 3d (ב-Unity3d)

היי חברים התחלתי יחסית לא מזמן ללמוד unity3d , עכשיו התחלתי לפתח משחק חלליות 3d לא משהו יותר מדי fancy בעיקר בשביל ללמוד ולהתנסות , אפשר להגיד שהכיוון הוא משחק כמו raptor רק 3d. רציתי עזרה שלכם לראות אם אני בכיוון הנכון. עד כה יצרתי את החללית שהיא פשוט מלבן שהמצלמה עוקבת אחריו , החללית יכולה לנוע אך ורק up,down,left,right בציר ה - X,Y ציירתי תמונת חלל פשוטה מאוד וקבעתי אותה כ - skybox.(מצורפת תמונה) הרעיון של המשחק הוא החללית בחלל 3d שאיננה זזה כלל במשחק חוץ מתזוזה על ציר ה -X ,Y ואיננה יכולה להסתובב. זאת בכדי למנוע מצב שצריך לעדכן את התקדמות החללית ושאר האובייקטים אלא לגרום למצב שבו החללית סטטית ובמהלך השלב אוייבים מופיעים ממרחק מסויים מהחללית ומתקדמים לכיוון החללית על פי משתנה גלובלי של מהירות + מהירות ספציפית של האוייב במידה וקיימת. במידה ואוייב עבר את החללית יהיה plane פשוט שברגע שעוברים אותו האוייב נמחק או חוזר מחדש למרחק מסויים מהחללית בכדי לסיים איזו שהיא מטרה כמו להרוג 5 אוייבים מסוג מסויים וכו'. לאחר שהחללית הרגה את כל האוייבים או פשוט התחמקה נעבור לשלב הבא. כמובן שהחללית לא תוכל לעבור איזשהו bounding box. האם לדעתכם יש יתרון בזה שהחללית איננה מתקדמת קדימה בציר ה - Z ? או שעדיף דווקא להיפך ? האם זה לא גורם למצב שבו החללית תגיע למספר Z גבוהה מאוד ויגרום לחישובים מסובכים יותר ? או שזה משהו זניח ? איך מייצגים שלב במשחק כזה ? איפה/מתי אני עושה spwan לאוייבים ? לדוגמא אני יכול ליצור plane שיהיה במרחק קבוע מהחללית ושמנקודה עליו חפצים יאותחלו ויחלו לנוע לעבר החללית , איך אני מייצג את המידע אודות החלליות ב - unity ? איך אני עוקב היכן בדיוק (בזמן) החללית שלי נמצאת ? (האם היא סיימה את השלב או לא) כשעושים spwan לאוייבים אני לא רוצה שהחלליות יטוסו ישירות לעבר המטרה .. איך אני פותר את זה , יוצר לכל חללית מסלול ? מצטער על החפירה הקטנה אך רציתי לשמוע עצות שלכם לאיך להתקדם עם המשחק. תודה מראש! אביב.
 

ahillel

New member
מכיוון שיוניטי עושה גם חישובי פיזיקה

עדיף בדרך כלל שתיצור במשחק מצב ריאליסטי. כלומר- החללית של השחקן "מתקדמת" באופן תיאורטי, אז עדיף שהיא תתקדם גם במשחק עצמו. זה לא חובה כי לפי התיאור שלך זה יראה בסדר גם אם היא לא תתקדם על Z, אבל לדעתי זה בניה נכונה יותר של השלב... בנוגע לסיבוך חישובים: בוא נגיד שיש גבול לשלב הזה ואתה לא מתכוון להשאיר את המחשב דולק 24 שעות עם המשחק הזה כדי לבדוק מה קורה כשהוא מגיע ל Z=10000000000000000000000.... במשחק שאני עושה לא נוצרו לי בעיות בגלל ה Z, ואם אתה רואה שכן נוצרות, אז אתה תמיד יכול לשנות את זה לקנה מידה קטן יותר (וככה הוא יתקדם מרחק קטן יותר כל פריים) או להנמיך את המהירות, או להחזיר את המצב לקדמותו. זמן ביוניטי זה Time.time וזה בטח מיוצג באלפיות שניה מאז שהמשחק התחיל, אם אני זוכר נכון. אם לא, תכתוב בגוגל Unity+Time ותמצא רפרנסים. ככה אני מצאתי כל מה שלא ידעתי. אגב בנוגע לחלליות- אם אתה לא רוצה שהן יטוסו ישירות לחללית שלך אז אתה חייב לעשות שהחללית שלך תתקדם גם על Z כמו שהמלצתי מקודם. אתה יכול לעשות שהיא לא תתקדם אך ורק אם יתר האובייקטים טסים לכיוון החללית, אחרת זה יראה מעוות. בנוגע לSPWAN- אתה לא חייב PLANE ועדיף שלא במשחק שמתרחש בחלל ולא על ה"קרקע". פשוט תבדוק בקוד אם הZ שלהן קטן יותר מהZ של השחקן. ואם כן אז תוסיף לZ שלהם 1000 או כל מספר אחר שמתאים לקנה מידה של העולם שלך. וכשזה קורה תעשה להם ROTATION עם ערכים רנדומליים. ככה תיצור להם כיוונים רנדומליים. אבל לא כל כך מתאים לתיאור של המשחק שלך עד כה. עדיף שהם יטוסו לכיוון הכללי של החללית. תחשוב על זה קצת מדוע זה עדיף. מתי יווצרו בעיות כשהם יטוסו גם לכיוונים אחרים.
 

cerulean

New member
אני מניח שמצב ראליסטי

בהחלט יותר קל להתמודד איתו , בקשר לסיבוך חישובים אני כנראה מנסה לבנות דברים בצורה "יעילה" כי אני לא יודע בדיוק למה המנוע מסוגל אני יבנה את המשחק בצורה ראליסטית עד שאני יראה האטה אם בכלל.. יש עוד משהו שאני לא תופס בקשר למשחק או שלב במשחק , בוא נצא מנקודת הנחה שכל האלמנטים במשחק מוכנים (חלליות , אוייבים וכו' ..) כאשר שחקן מנצח לדוגמא 5 חלליות שזה המטרה בשלב מה קורה לאחר מכן כשמתקדמים לשלב הבא ? האם אני מאפס את כל האלמנטים לנקודת 0 מאתחל אובייקטים חדשים ומתחיל מחדש ? או טוען סצנה חדשה ? מהי הצורה לעשות זאת ב - unity3d ?
 

ahillel

New member
אין צורה מוגדרת

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

De-Panther

New member
או לחליפין, ליצור בקוד את האויבים, שיופיעו...

בהתאם למיקום של השחקן
 

De-Panther

New member
תניע את החללית. כשאתה מניע את החללית קדימה...

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

IdleThought

New member
אז עכשיו יוניטי זה הסטנדרט לתלת מימד?

לא משתמשים יותר ב XNA , PAPERVISION AWAY3D וכו?
 

cerulean

New member
תודה על התגובה

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