کشف کنید که چگونه یک عنصر غیرقابل پیش بینی به گیم پلی خود اضافه کنید.
در توسعه بازی، عناصر تصادفی و غیرقابل پیش بینی می توانند تا حد زیادی به تجربه کلی بازی کمک کنند. یک راه خاص برای معرفی چنین عنصری از طریق اجسام متحرک تصادفی است که یک لایه اضافی از تعامل و چالش را اضافه می کند.
اگر با گودو کار می کنید، می توانید با استفاده از GDScript، زبان اسکریپت بومی گودو، به این اثر برسید.
راه اندازی بازی Godot شما
قبل از شروع، یک صحنه اصلی بازی دو بعدی را در موتور بازی گودو تنظیم کنید. یک صحنه 2 بعدی جدید ایجاد کنید و یک گره CharacterBody2D برای شخصیت بازیکن اضافه کنید. گره CharacterBody2D عنصر اصلی برای نمایش شخصیت هایی است که می توانند در اطراف حرکت کنند و با محیط خود تعامل داشته باشند.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
دو گره فرزند به کاراکتر بازیکن اضافه کنید: یک CollisionShape2D با شکل مستطیلی، و یک Sprite2D برای نمایش گرافیکی بازیکن.
برای افزودن قابلیت تحرک به کاراکتر، می توانید از کد GDScript زیر استفاده کنید:
extends CharacterBody2D
var speed = 200
func _physics_process(delta):
var velocity = Vector2()
if Input.is_action_pressed('ui_right'):
velocity.x += 1
if Input.is_action_pressed('ui_left'):
velocity.x -= 1
if Input.is_action_pressed('ui_down'):
velocity.y += 1
if Input.is_action_pressed('ui_up'):
velocity.y -= 1
velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)
برای سرعت حرکت بازیکن خود یک متغیر، سرعت تعریف کنید. تابع _physics_process(delta) حرکت شخصیت را در پاسخ به ورودی های بازیکن کنترل می کند. سرعت و جهت کاراکتر را عادی کنید تا از حرکت ثابت بدون توجه به جهت اطمینان حاصل کنید.
ایجاد اشیاء استاتیک با StaticBody2D
در مرحله بعد، اشیایی ایجاد کنید که بازیکن شما بتواند با آنها تعامل داشته باشد. مثال زیر ایجاد یک شی ایستا را با استفاده از گره StaticBody2D نشان می دهد:
extends StaticBody2D
func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)
اضافه کردن یک الگوریتم حرکت تصادفی برای اجسام استاتیک
اکنون که اشیاء ثابت شما آماده هستند، وقت آن است که تصادفی بودن را به بازی خود اضافه کنید. برای انجام این کار، می توانید از یک الگوریتم حرکت تصادفی ساده استفاده کنید:
extends StaticBody2D
var speed = 100
var value = randf_range(-1, 1)
var direction = Vector2(value,value).normalized()
func _physics_process(delta):
position += direction * speed * delta
سرعت جسم ثابت خود را تعریف کنید. همچنین یک جهت Vector2 ایجاد کنید و آن را با مقادیر تصادفی بین -1 و 1 برای هر دو محور مقداردهی اولیه کنید.
در تابع _physics_process(delta)، موقعیت جسم را با حاصل ضرب جهت، سرعت و دلتای زمان افزایش دهید و باعث میشود که با سرعت معین در جهت حرکت کند.
موقعیت ها و مسیرهای تصادفی برای اجسام استاتیک
شما می توانید تصادفی بودن و غیرقابل پیش بینی بودن را نه تنها با تغییر سرعت و جهت اشیاء بلکه موقعیت و مسیر اولیه آنها افزایش دهید.
extends StaticBody2D
var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value,value).normalized()
func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)
func _physics_process(delta):
position += direction * speed * delta
در اینجا سرعت یک مقدار تصادفی بین 50 و 150 است. موقعیت اولیه شی به طور تصادفی در اندازه viewport در تابع _ready() تعیین می شود و موقعیت شی در تابع _physics_process(delta) درست مانند قبل به روز می شود.
تنظیم سرعت، جهت، و تصادفی
شما می توانید با دستکاری سرعت، جهت و تصادفی بودن حرکت برای اجسام ساکن، گیم پلی تعاملی و جذاب تری طراحی کنید. می توانید این کنترل ها را با استفاده از GDScript ایجاد کنید:
extends StaticBody2D
var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value,value).normalized()
var speed_variation_rate = 0.5
var direction_variation_rate = 0.5
func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)
func _physics_process(delta):
randomize_speed_and_direction()
position += direction * speed * delta
func randomize_speed_and_direction():
if randf() < speed_variation_rate:
speed = randf_range(50, 150)
if randf() < direction_variation_rate:
direction = Vector2(value, value).normalized()
ویژگی های اضافی برای اجسام متحرک تصادفی شما
در حالی که حرکت تصادفی اولیه یک پویایی غیرقابل پیش بینی به بازی شما می افزاید، ویژگی های اضافی بی شماری وجود دارد که می توانید برای بهبود بیشتر بازی خود اضافه کنید. برخی از نمونه ها عبارتند از:
تنوع رنگ
مشابه نحوه تصادفیسازی سرعت و جهت اشیا، میتوانید رنگهای آنها را نیز تصادفی کنید. این می تواند جنبه ای زنده تر و جذاب تر به بازی شما اضافه کند. شما می توانید این کار را با تغییر خاصیت modulate sprite انجام دهید.
sprite.modulate = Color(randf(), randf(), randf())
تنوع سایز
تغییر تصادفی اندازه اشیا سطح دیگری از دشواری و غیرقابل پیش بینی را اضافه می کند. بازیکنان باید دائماً با تغییر اندازه اشیا سازگار شوند. شما می توانید اندازه یک شی را با تنظیم ویژگی مقیاس آن تغییر دهید:
sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))
تخم ریزی شی
به جای داشتن تعداد ثابتی از اجسام متحرک تصادفی، می توانید سیستمی را پیاده سازی کنید که اشیاء جدید را در فواصل زمانی منظم یا تحت شرایط خاص تولید کند. این می تواند لایه جدیدی از دشواری را اضافه کند زیرا بازیکن باید استراتژی خود را با ظاهر شدن اشیاء بیشتر روی صفحه تنظیم کند.
طول عمر شی
علاوه بر تخم ریزی اشیاء جدید، می توانید اشیا را نیز به طور خودکار پس از مدت زمان مشخصی از بین ببرند. این می تواند از شلوغ شدن بیش از حد صفحه جلوگیری کند و گیم پلی بازی را تازه نگه دارد.
فعل و انفعالات
در مورد افزودن فعل و انفعالات خاص بین بازیکن و اشیاء متحرک فکر کنید. به عنوان مثال، برخورد با اشیاء خاص می تواند امتیاز بازیکن را افزایش دهد، سرعت بازیکن را تغییر دهد یا حتی محیط بازی را تغییر دهد. همچنین می توانید به بازیکن اجازه دهید هنگام ایستادن روی یک سکو بپرد.
بهترین روش ها برای اضافه کردن اشیاء متحرک تصادفی
هنگام اضافه کردن اجسام متحرک تصادفی، مهم است که چند روش برتر را برای اطمینان از یک بازی جذاب و متعادل در نظر بگیرید:
ملاحظات عملکرد
اگرچه اضافه کردن هرچه بیشتر اشیاء وسوسه انگیز است، اما به یاد داشته باشید که هر جسم بار محاسباتی موتور بازی را افزایش می دهد. همیشه بازی خود را روی سخت افزار مورد نظر تست کنید تا مطمئن شوید که عملکرد آن تاثیر منفی نمی گذارد.
تعادل تصادفی و بازی پذیری
در حالی که اشیاء تصادفی می توانند غیرقابل پیش بینی بودن سرگرم کننده را اضافه کنند، تصادفی بودن بیش از حد می تواند منجر به ناامیدی شود. برای ایجاد تعادل مناسب بین چالش و لذت، حتما به طور گسترده تست کنید.
برخورد و پاسخ
اطمینان حاصل کنید که بازی برخوردهای بین بازیکن و اشیاء را به درستی مدیریت می کند. اجسام متحرک تصادفی ممکن است باعث ایجاد سناریوهای برخورد غیرمنتظره شوند، بنابراین برای آنها برنامه ریزی کنید و به طور کامل آزمایش کنید.
وضوح بصری
اشیاء متحرک تصادفی باید از پس زمینه و سایر عناصر غیر تعاملی متمایز باشند. این به بازیکنان کمک می کند تا به سرعت موقعیت بازی را درک کنند و اقدامات خود را بر اساس آن برنامه ریزی کنند. همچنین می توانید جلوه های صوتی را به اشیاء خود اضافه کنید تا آنها را برجسته کنید.
تاثیر اجسام متحرک تصادفی بر بازی گودو شما
اجسام متحرک تصادفی می توانند نقش قابل توجهی در جذاب تر کردن بازی گودو شما داشته باشند. آنها یک عنصر غیرقابل پیش بینی را معرفی می کنند که بازیکنان را سرپا نگه می دارد. هر بار که بازیکنی بازی را شروع می کند، با پیکربندی متفاوتی از اشیاء از آنها استقبال می کند و به قابلیت پخش مجدد آن می افزاید.
علاوه بر این، از آنجایی که بازیکنان نمی توانند مسیر اجسام متحرک را پیش بینی کنند، باید برای حرکت در محیط بازی متمرکز و پاسخگو باشند.