הוספה של Crouching לנגן FPS ב-Unity
הוספת מנגנון כריעה יכולה להעמיק את ההתעמקות ולספק עומק טקטי למשחק, במיוחד במשחקים בגוף ראשון ובמשחקים מבוססי התגנבות. בהתבסס על Unity בקר FPS שלנו, מדריך זה מציג כיצד להוסיף תכונת כפיפה חלקה ב-Unity.
דרישות מוקדמות
- היכרות בסיסית עם Unity ממשק.
- הבנת Unity 'CharacterController'.
- הסקריפט של בקר FPS מתוך המדריך Unity FPS Controller.
שלבים
- ב-class בשם 'SC_FPSController', מתוך המדריך Unity FPS Controller, הוסף את המשתנים הבאים כדי להתמודד עם כפיפות:
public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
- שנה את שיטת 'Start()' כדי לאחסן את הגובה המקורי של 'CharacterController' ולהגדיר את עמדות המצלמה:
void Start()
{
characterController = GetComponent<CharacterController>();
originalHeight = characterController.height;
// Define camera positions for standing and crouching
cameraStandPosition = playerCamera.transform.localPosition;
cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);
// Lock cursor
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
- בשיטת 'Update()', בדוק אם יש לחיצה על מקש השיפוע והחלף את המשתנה 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
isCrouching = !isCrouching;
if (isCrouching)
{
characterController.height = crouchHeight;
walkingSpeed = crouchSpeed;
}
else
{
characterController.height = originalHeight;
walkingSpeed = 7.5f;
}
}
- מחוץ לבלוק הקודם, יישם את המעבר החלק עבור מיקום המצלמה בין כפיפה לעמידה:
if (isCrouching)
{
playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
- התאם את מהירות התנועה של השחקן על סמך המצב הנוכחי:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;
שאלות:
- למה להשתמש ב-'Vector3.Lerp()' למעבר מצלמה בזמן כפיפה?: הפונקציה 'Vector3.Lerp()' משמשת לאינטרפולציה חלקה בין שני וקטורים. בהקשר זה, היא מאפשרת למצלמה לעבור בצורה זורמת בין עמדות עמידה לכיפוף במקום להצמד בפתאומיות.
- מה תפקידו של 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' קובע באיזו מהירות מתרחש המעבר בין עמדות המצלמה השפופה והעמידה. ערך גבוה יותר מביא למעבר מהיר יותר.
- האם ניתן להתאים אישית את מפתח השיפוע?: בהחלט. מקש השיפוע מוגדר כעת ל-'C' ('KeyCode.C'). החלף אותו בכל 'KeyCode' רצוי כדי להתאים את מפתח השיפוע.
סיכום
שילוב של מכונאי שכופף חלק ב-Unity, הכולל התאמת גודל colider ומיקום המצלמה, יכול להעלות משמעותית את טבילת השחקן. מדריך זה סיפק שיטה להשיג זאת במעבר טבעי וזורם.