چرخهی راهرفتن (Walk Cycle) انیمیشنی لوپشونده است که در آن دو گام، یکی با هر پا، پشت سر هم تکرار میشود. اگر این چرخه درست ساخته شود، بقیهی حرکتهای کاراکتر هم راحتتر کنار آن مینشینند.
چهار ژست کلیدی
هر گام را با چهار ژست بساز و بقیهی فریمها را به درونیابی و ظرافتکاری بسپار:
| ژست | چه اتفاقی میافتد |
|---|---|
| Contact | پاشنهی جلو روی زمین مینشیند؛ گامها در بیشترین فاصلهاند. |
| Down | وزن روی پای جلو میافتد؛ لگن در پایینترین نقطه است. |
| Passing | پای عقب از کنار پای تکیهگاه رد میشود و زانو بالا میآید. |
| Up | بدن روی پای تکیهگاه بالا میرود؛ لگن در بالاترین نقطه است. |
برای دو پا همین چهار ژست را با سمت مخالف تکرار میکنی؛ یعنی کل چرخه هشت ژست دارد.
ساخت چرخه گامبهگام
- انیمیشن جدید بساز و طول آن را برای یک چرخهی کامل بگذار. برای راهرفتن معمولی حدود ۰٫۸ تا ۱ ثانیه نقطهی شروع خوبی است.
- ژست Contact پای راستجلو را در فریم صفر بساز. کلید همهی استخوانهای مهم را بزن.
- ژست Contact مخالف (پای چپجلو) را در نیمهی زمان بساز.
- فریم صفر را در انتها کپی کن تا لوپ بدون پرش شود.
- بعد Down و Passing و Up را برای هر نیمه اضافه کن.
- در Graph منحنیها را بررسی کن؛ حرکت لگن معمولاً منحنی نرم و موجی شکل میخواهد.
- برای پاها از IK استفاده کن. استخوان هدف (کف پا) را حرکت بده و زانو خودش میپیچد.
- بازوها مخالف پاها حرکت میکنند: پای راست جلو، دست چپ جلو.
- کف پای تکیهگاه در تمام مدت تماس با زمین یک نقطهی ثابت نسبت به زمین است (نه نسبت به بدن).
تفاوت دویدن با راهرفتن
- زمان کوتاهتر: چرخهی دویدن کوتاهتر است؛ برای شروع حدود ۰٫۵ تا ۰٫۷ ثانیه را امتحان کن.
- فاز پرواز: در دویدن لحظهای هر دو پا از زمین جدا میشوند. این فاز را جدا و واضح بساز.
- شیب بدن: تنه کمی به جلو متمایل میشود، و هرچه سریعتر بدود بیشتر.
- دامنهی بیشتر: بازوها خم میشوند و بزرگتر میچرخند؛ زانوها بالاتر میآیند.
- مرکز ثقل: لگن مسیر قوسدارتر و پرشیتر دارد.
حرکت ثانویه
وقتی اسکلت اصلی درست شد، حرکتهای فرعی حس زندهبودن را اضافه میکنند:
- مو، شنل و بند: چند فریم دیرتر از بدن حرکت کنند (Follow Through).
- سر: کمی ثابتتر از لگن بماند تا نگاه کاراکتر پایدار باشد.
- سلاح یا کیف: با اختلاف زمانی بالا و پایین برود.
حذف سُر خوردن پا
اگر کاراکتر سریعتر یا کندتر از انیمیشن راه برود، پا روی زمین میلغزد. راهحل، هماهنگ کردن سرعت حرکت با طول گام انیمیشن است.
اگر در انیمیشن، هر چرخهی کامل کاراکتر را به اندازهی stride (برحسب واحد Unity) جلو ببرد و مدت چرخه cycleTime ثانیه باشد، سرعت مرجع انیمیشن برابر stride / cycleTime است. سرعت واقعی را با آن مقایسه کن و سرعت پخش را متناسب تغییر بده:
using UnityEngine;
using Spine.Unity;
public class WalkSpeedSync : MonoBehaviour
{
[SerializeField] float stride = 1.2f; // فاصلهی طیشده در یک چرخهی کامل
[SerializeField] float cycleTime = 0.9f; // طول چرخه در Spine (ثانیه)
SkeletonAnimation skeleton;
float baseSpeed;
void Awake()
{
skeleton = GetComponent<SkeletonAnimation>();
baseSpeed = stride / cycleTime;
}
// moveSpeed: سرعت واقعی کاراکتر (واحد بر ثانیه)
public void SetMoveSpeed(float moveSpeed)
{
skeleton.timeScale = Mathf.Clamp(moveSpeed / baseSpeed, 0.5f, 2f);
}
}
- اگر سرعت خیلی تغییر میکند، بهجای کش دادن یک انیمیشن، بین Walk و Run با میکس عبور کن.
- مقدار
timeScaleرا محدود نگه دار؛ انیمیشن بیش از حد کند یا تند طبیعی نمیماند.
چکلیست
- فریم اول و آخر چرخه یکساناند.
- پای تکیهگاه روی زمین ثابت میماند.
- بازوها و پاها مخالف هم حرکت میکنند.
- لگن مسیر موجی دارد، نه خط صاف.
- سرعت پخش با سرعت حرکت در بازی همخوان است.
پروژهای با Spine یا Unity داری؟
برای انیمیشن کاراکتر، UI و پیادهسازی در Unity میتوانیم با هم صحبت کنیم.
Telegram View Portfolio