Как сделать шутер на юнити 3д
Перейти к содержимому

Как сделать шутер на юнити 3д

  • автор:

Как создать шутер от первого лица с поддержкой ИИ в Unity

Шутер от первого лица (FPS) — это поджанр игр-шутеров, в которых игроком управляют от первого лица.

Чтобы создать игру FPS в Unity, нам понадобится контроллер игрока, набор предметов (в данном случае оружия) и враги.

Шаг 1. Создайте контроллер проигрывателя

Здесь мы создадим контроллер, который будет использоваться нашим плеером.

  • Создайте новый игровой объект (Game Object -> Create Empty) и назовите его. «Player»
  • Создайте новую капсулу (Игровой объект -> 3D-объект -> Капсула) и переместите ее внутрь объекта «Player».
  • Удалите компонент Capsule Collider из Capsule и измените его положение на (0, 1, 0).
  • Переместите основную камеру внутри объекта «Player» и измените ее положение на (0, 1.64, 0).
  • Создайте новый скрипт, назовите его «SC_CharacterController» и вставьте в него приведенный ниже код:

SC_CharacterController.cs

using UnityEngine; [RequireComponent(typeof(CharacterController))] public class SC_CharacterController : MonoBehaviour < public float speed = 7.5f; public float jumpSpeed = 8.0f; public float gravity = 20.0f; public Camera playerCamera; public float lookSpeed = 2.0f; public float lookXLimit = 45.0f; CharacterController characterController; Vector3 moveDirection = Vector3.zero; Vector2 rotation = Vector2.zero; [HideInInspector] public bool canMove = true; void Start() < characterController = GetComponent(); rotation.y = transform.eulerAngles.y; > void Update() < if (characterController.isGrounded) < // We are grounded, so recalculate move direction based on axes Vector3 forward = transform.TransformDirection(Vector3.forward); Vector3 right = transform.TransformDirection(Vector3.right); float curSpeedX = canMove ? speed * Input.GetAxis("Vertical") : 0; float curSpeedY = canMove ? speed * Input.GetAxis("Horizontal") : 0; moveDirection = (forward * curSpeedX) + (right * curSpeedY); if (Input.GetButton("Jump") && canMove) < moveDirection.y = jumpSpeed; >> // Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied // as an acceleration (ms^-2) moveDirection.y -= gravity * Time.deltaTime; // Move the controller characterController.Move(moveDirection * Time.deltaTime); // Player and Camera rotation if (canMove) < rotation.y += Input.GetAxis("Mouse X") * lookSpeed; rotation.x += -Input.GetAxis("Mouse Y") * lookSpeed; rotation.x = Mathf.Clamp(rotation.x, -lookXLimit, lookXLimit); playerCamera.transform.localRotation = Quaternion.Euler(rotation.x, 0, 0); transform.eulerAngles = new Vector2(0, rotation.y); >> >
  • Прикрепите скрипт SC_CharacterController к объекту «Player» (вы заметите, что он также добавил еще один компонент под названием «Контроллер символов», изменив его центральное значение на (0, 1, 0))
  • Назначьте основную камеру переменной Player Camera в SC_CharacterController.

Контроллер Player теперь готов:

Шаг 2: Создайте систему оружия

Система оружия игрока будет состоять из трех компонентов: менеджера оружия, сценария оружия и сценария пули.

  • Создайте новый скрипт, назовите его «SC_WeaponManager» и вставьте в него приведенный ниже код:

SC_WeaponManager.cs

using UnityEngine; public class SC_WeaponManager : MonoBehaviour < public Camera playerCamera; public SC_Weapon primaryWeapon; public SC_Weapon secondaryWeapon; [HideInInspector] public SC_Weapon selectedWeapon; // Start is called before the first frame update void Start() < //At the start we enable the primary weapon and disable the secondary primaryWeapon.ActivateWeapon(true); secondaryWeapon.ActivateWeapon(false); selectedWeapon = primaryWeapon; primaryWeapon.manager = this; secondaryWeapon.manager = this; >// Update is called once per frame void Update() < //Select secondary weapon when pressing 1 if (Input.GetKeyDown(KeyCode.Alpha1)) < primaryWeapon.ActivateWeapon(false); secondaryWeapon.ActivateWeapon(true); selectedWeapon = secondaryWeapon; >//Select primary weapon when pressing 2 if (Input.GetKeyDown(KeyCode.Alpha2)) < primaryWeapon.ActivateWeapon(true); secondaryWeapon.ActivateWeapon(false); selectedWeapon = primaryWeapon; >> >
  • Создайте новый скрипт, назовите его «SC_Weapon» и вставьте в него приведенный ниже код:

SC_Weapon.cs

using System.Collections; using UnityEngine; [RequireComponent(typeof(AudioSource))] public class SC_Weapon : MonoBehaviour < public bool singleFire = false; public float fireRate = 0.1f; public GameObject bulletPrefab; public Transform firePoint; public int bulletsPerMagazine = 30; public float timeToReload = 1.5f; public float weaponDamage = 15; //How much damage should this weapon deal public AudioClip fireAudio; public AudioClip reloadAudio; [HideInInspector] public SC_WeaponManager manager; float nextFireTime = 0; bool canFire = true; int bulletsPerMagazineDefault = 0; AudioSource audioSource; // Start is called before the first frame update void Start() < bulletsPerMagazineDefault = bulletsPerMagazine; audioSource = GetComponent(); audioSource.playOnAwake = false; //Make sound 3D audioSource.spatialBlend = 1f; > // Update is called once per frame void Update() < if (Input.GetMouseButtonDown(0) && singleFire) < Fire(); >if (Input.GetMouseButton(0) && !singleFire) < Fire(); >if (Input.GetKeyDown(KeyCode.R) && canFire) < StartCoroutine(Reload()); >> void Fire() < if (canFire) < if (Time.time >nextFireTime) < nextFireTime = Time.time + fireRate; if (bulletsPerMagazine >0) < //Point fire point at the current center of Camera Vector3 firePointPointerPosition = manager.playerCamera.transform.position + manager.playerCamera.transform.forward * 100; RaycastHit hit; if (Physics.Raycast(manager.playerCamera.transform.position, manager.playerCamera.transform.forward, out hit, 100)) < firePointPointerPosition = hit.point; >firePoint.LookAt(firePointPointerPosition); //Fire GameObject bulletObject = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation); SC_Bullet bullet = bulletObject.GetComponent(); //Set bullet damage according to weapon damage value bullet.SetDamage(weaponDamage); bulletsPerMagazine--; audioSource.clip = fireAudio; audioSource.Play(); > else < StartCoroutine(Reload()); >> > > IEnumerator Reload() < canFire = false; audioSource.clip = reloadAudio; audioSource.Play(); yield return new WaitForSeconds(timeToReload); bulletsPerMagazine = bulletsPerMagazineDefault; canFire = true; >//Called from SC_WeaponManager public void ActivateWeapon(bool activate) < StopAllCoroutines(); canFire = true; gameObject.SetActive(activate); >>
  • Создайте новый скрипт, назовите его «SC_Bullet» и вставьте в него приведенный ниже код:

SC_Bullet.cs

using System.Collections; using UnityEngine; public class SC_Bullet : MonoBehaviour < public float bulletSpeed = 345; public float hitForce = 50f; public float destroyAfter = 3.5f; float currentTime = 0; Vector3 newPos; Vector3 oldPos; bool hasHit = false; float damagePoints; // Start is called before the first frame update IEnumerator Start() < newPos = transform.position; oldPos = newPos; while (currentTime < destroyAfter && !hasHit) < Vector3 velocity = transform.forward * bulletSpeed; newPos += velocity * Time.deltaTime; Vector3 direction = newPos - oldPos; float distance = direction.magnitude; RaycastHit hit; // Check if we hit anything on the way if (Physics.Raycast(oldPos, direction, out hit, distance)) < if (hit.rigidbody != null) < hit.rigidbody.AddForce(direction * hitForce); IEntity npc = hit.transform.GetComponent(); if (npc != null) < //Apply damage to NPC npc.ApplyDamage(damagePoints); >> newPos = hit.point; //Adjust new position StartCoroutine(DestroyBullet()); > currentTime += Time.deltaTime; yield return new WaitForFixedUpdate(); transform.position = newPos; oldPos = newPos; > if (!hasHit) < StartCoroutine(DestroyBullet()); >> IEnumerator DestroyBullet() < hasHit = true; yield return new WaitForSeconds(0.5f); Destroy(gameObject); >//Set how much damage this bullet will deal public void SetDamage(float points) < damagePoints = points; >>

Теперь вы заметите, что сценарий SC_Bullet содержит некоторые ошибки. Это потому, что нам осталось сделать последнее — определить интерфейс IEntity.

Интерфейсы в C# полезны, когда вам нужно убедиться, что в скрипте, который их использует, реализованы определенные методы.

Интерфейс IEntity будет иметь один метод ApplyDamage, который позже будет использоваться для нанесения урона врагам и нашему игроку.

  • Создайте новый скрипт, назовите его «SC_InterfaceManager» и вставьте в него приведенный ниже код:

SC_InterfaceManager.cs

//Entity interafce interface IEntity

Настройка менеджера оружия

Менеджер оружия — это объект, который будет находиться под объектом «Основная камера» и содержать все оружие.

  • Создайте новый GameObject и назовите его. «WeaponManager»
  • Переместите WeaponManager внутри основной камеры игрока и измените его положение на (0, 0, 0).
  • Прикрепите скрипт SC_WeaponManager к «WeaponManager»
  • Назначьте основную камеру переменной Player Camera в SC_WeaponManager.

Настройка винтовки

  • Перетащите модель оружия на сцену (или просто создайте куб и растяните его, если у вас еще нет модели).
  • Масштабируйте модель так, чтобы ее размер соответствовал размеру Player Capsule.

В моем случае я буду использовать изготовленную на заказ модель винтовки (BERGARA BA13):

БЕРГАРА BA13

  • Создайте новый GameObject и назовите его «Rifle», затем переместите в него модель винтовки.
  • Переместите объект «Rifle» внутрь объекта «WeaponManager» и поместите его перед камерой следующим образом:

Исправьте проблему с отсечением камеры в Unity.

Чтобы исправить отсечение объекта, просто измените ближнюю плоскость отсечения камеры на что-нибудь меньшее (в моем случае я установил ее на 0,15):

БЕРГАРА BA13

  • Прикрепите скрипт SC_Weapon к объекту винтовки (вы заметите, что он также добавил компонент Audio Source, он необходим для воспроизведения звука стрельбы и перезарядки).

Как видите, SC_Weapon можно назначить 4 переменные. Вы можете сразу назначить переменные Fire audio и Reload audio, если в вашем проекте есть подходящие аудиоклипы.

Переменная Bullet Prefab будет объяснена позже в этом уроке.

На данный момент мы просто назначим переменную Fire point:

  • Создайте новый GameObject, переименуйте его в «FirePoint» и переместите внутрь объекта Rifle. Поместите его прямо перед бочкой или немного внутри, вот так:

  • Назначьте FirePoint Transform переменной Fire point в SC_Weapon.
  • Назначьте винтовку переменной вторичного оружия в скрипте SC_WeaponManager.

Настройка пистолета-пулемета

  • Дублируйте объект «Винтовка» и переименуйте его в «Пистолет-пулемет».
  • Замените внутри него модель пистолета на другую модель (В моем случае я буду использовать кастомную модель TAVOR X95)

ТАВОР X95

  • Переместите преобразование Fire Point, пока оно не будет соответствовать новой модели.

Настройка объекта Weapon Fire Point в Unity.

  • Назначьте пистолет-пулемет переменной основного оружия в скрипте SC_WeaponManager.

Настройка префаба Bullet

Префаб пули будет генерироваться в зависимости от скорострельности оружия и будет использовать Raycast, чтобы определить, попало ли оно во что-нибудь и нанесло ли оно урон.

  • Создайте новый GameObject и назовите его. «Bullet»
  • Добавьте к нему компонент Trail Renderer и измените его переменную Time на 0,1.
  • Установите для кривой ширины меньшее значение (например, начало 0,1, конец 0), чтобы добавить заостренный след.
  • Создайте новый материал, назовите его Bullet_trail_material и измените его шейдер на Particles/Additive.
  • Назначьте вновь созданный материал средству Trail Renderer.
  • Измените цвет средства визуализации следа на другой (например, начало: ярко-оранжевый, конец: темно-оранжевый).

  • Сохраните объект Bullet в Prefab и удалите его со сцены.
  • Назначьте недавно созданный префаб (перетащите его из представления «Проект») переменной префаба винтовки и пули-пулемета.

Оружие теперь готово.

Шаг 3: Создайте вражеский ИИ

Врагами будут простые кубы, которые будут следовать за игроком и атаковать, как только они подойдут достаточно близко. Они будут атаковать волнами, причем с каждой волной придется уничтожить все больше врагов.

Настройка ИИ противника

Ниже я создал 2 варианта Куба (левый предназначен для живого экземпляра, а правый будет создан после убийства врага):

  • Добавьте компонент Rigidbody как в мертвые, так и в живые экземпляры.
  • Сохраните мертвый экземпляр в Prefab и удалите его из сцены.

Теперь живому экземпляру понадобится еще пара компонентов, чтобы иметь возможность перемещаться по игровому уровню и наносить игроку урон.

  • Создайте новый скрипт и назовите его «SC_NPCEnemy», затем вставьте в него приведенный ниже код:

SC_NPCEnemy.cs

using UnityEngine; using UnityEngine.AI; [RequireComponent(typeof(NavMeshAgent))] public class SC_NPCEnemy : MonoBehaviour, IEntity < public float attackDistance = 3f; public float movementSpeed = 4f; public float npcHP = 100; //How much damage will npc deal to the player public float npcDamage = 5; public float attackRate = 0.5f; public Transform firePoint; public GameObject npcDeadPrefab; [HideInInspector] public Transform playerTransform; [HideInInspector] public SC_EnemySpawner es; NavMeshAgent agent; float nextAttackTime = 0; // Start is called before the first frame update void Start() < agent = GetComponent(); agent.stoppingDistance = attackDistance; agent.speed = movementSpeed; //Set Rigidbody to Kinematic to prevent hit register bug if (GetComponent()) < GetComponent().isKinematic = true; > > // Update is called once per frame void Update() < if (agent.remainingDistance - attackDistance < 0.01f) < if(Time.time >nextAttackTime) < nextAttackTime = Time.time + attackRate; //Attack RaycastHit hit; if(Physics.Raycast(firePoint.position, firePoint.forward, out hit, attackDistance)) < if (hit.transform.CompareTag("Player")) < Debug.DrawLine(firePoint.position, firePoint.position + firePoint.forward * attackDistance, Color.cyan); IEntity player = hit.transform.GetComponent(); player.ApplyDamage(npcDamage); > > > > //Move towardst he player agent.destination = playerTransform.position; //Always look at player transform.LookAt(new Vector3(playerTransform.transform.position.x, transform.position.y, playerTransform.position.z)); > public void ApplyDamage(float points) < npcHP -= points; if(npcHP <= 0) < //Destroy the NPC GameObject npcDead = Instantiate(npcDeadPrefab, transform.position, transform.rotation); //Slightly bounce the npc dead prefab up npcDead.GetComponent().velocity = (-(playerTransform.position - transform.position).normalized * 8) + new Vector3(0, 5, 0); Destroy(npcDead, 10); es.EnemyEliminated(this); Destroy(gameObject); > > >
  • Создайте новый скрипт, назовите его «SC_EnemySpawner» и вставьте в него приведенный ниже код:

SC_EnemySpawner.cs

using UnityEngine; using UnityEngine.SceneManagement; public class SC_EnemySpawner : MonoBehaviour < public GameObject enemyPrefab; public SC_DamageReceiver player; public Texture crosshairTexture; public float spawnInterval = 2; //Spawn new enemy each n seconds public int enemiesPerWave = 5; //How many enemies per wave public Transform[] spawnPoints; float nextSpawnTime = 0; int waveNumber = 1; bool waitingForWave = true; float newWaveTimer = 0; int enemiesToEliminate; //How many enemies we already eliminated in the current wave int enemiesEliminated = 0; int totalEnemiesSpawned = 0; // Start is called before the first frame update void Start() < //Lock cursor Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; //Wait 10 seconds for new wave to start newWaveTimer = 10; waitingForWave = true; >// Update is called once per frame void Update() < if (waitingForWave) < if(newWaveTimer >= 0) < newWaveTimer -= Time.deltaTime; >else < //Initialize new wave enemiesToEliminate = waveNumber * enemiesPerWave; enemiesEliminated = 0; totalEnemiesSpawned = 0; waitingForWave = false; >> else < if(Time.time >nextSpawnTime) < nextSpawnTime = Time.time + spawnInterval; //Spawn enemy if(totalEnemiesSpawned < enemiesToEliminate) < Transform randomPoint = spawnPoints[Random.Range(0, spawnPoints.Length - 1)]; GameObject enemy = Instantiate(enemyPrefab, randomPoint.position, Quaternion.identity); SC_NPCEnemy npc = enemy.GetComponent(); npc.playerTransform = player.transform; npc.es = this; totalEnemiesSpawned++; > > > if (player.playerHP > > void OnGUI() < GUI.Box(new Rect(10, Screen.height - 35, 100, 25), ((int)player.playerHP).ToString() + " HP"); GUI.Box(new Rect(Screen.width / 2 - 35, Screen.height - 35, 70, 25), player.weaponManager.selectedWeapon.bulletsPerMagazine.ToString()); if(player.playerHP else < GUI.DrawTexture(new Rect(Screen.width / 2 - 3, Screen.height / 2 - 3, 6, 6), crosshairTexture); >GUI.Box(new Rect(Screen.width / 2 - 50, 10, 100, 25), (enemiesToEliminate - enemiesEliminated).ToString()); if (waitingForWave) < GUI.Box(new Rect(Screen.width / 2 - 125, Screen.height / 4 - 12, 250, 25), "Waiting for Wave " + waveNumber.ToString() + " (" + ((int)newWaveTimer).ToString() + " seconds left. )"); >> public void EnemyEliminated(SC_NPCEnemy enemy) < enemiesEliminated++; if(enemiesToEliminate - enemiesEliminated > >
  • Создайте новый скрипт, назовите его «SC_DamageReceiver» и вставьте в него приведенный ниже код:

SC_DamageReceiver.cs

using UnityEngine; public class SC_DamageReceiver : MonoBehaviour, IEntity < //This script will keep track of player HP public float playerHP = 100; public SC_CharacterController playerController; public SC_WeaponManager weaponManager; public void ApplyDamage(float points) < playerHP -= points; if(playerHP > >
  • Прикрепите сценарий SC_NPCEnemy к живому экземпляру врага (вы заметите, что в него добавлен еще один компонент, называемый NavMesh Agent, который необходим для навигации по NavMesh)
  • Назначьте недавно созданный префаб мертвого экземпляра переменной Npc Dead Prefab.
  • Для Fire Point создайте новый GameObject, переместите его внутрь экземпляра живого врага и поместите немного впереди экземпляра, затем назначьте его переменной Fire Point:

  • Наконец, сохраните живой экземпляр в Prefab и удалите его из сцены.

Настройка генератора врагов

Теперь перейдем к SC_EnemySpawner. Этот скрипт будет порождать врагов волнами, а также отображать на экране некоторую информацию пользовательского интерфейса, например, здоровье игрока, текущие боеприпасы, количество врагов, оставшихся в текущей волне и т. д.

  • Создайте новый GameObject и назовите его. «_EnemySpawner»
  • Прикрепите к нему скрипт SC_EnemySpawner
  • Назначьте вновь созданный ИИ врага переменной Enemy Prefab.
  • Назначьте текстуру ниже переменной текстуры перекрестия.

  • Создайте пару новых игровых объектов и разместите их вокруг сцены, а затем назначьте их массиву точек появления.

Вы заметите, что осталось назначить еще одну переменную — переменную Player.

  • Прикрепите скрипт SC_DamageReceiver к экземпляру Player.
  • Измените тег экземпляра Player на «Player»
  • Назначьте переменные Player Controller и Weapon Manager в SC_DamageReceiver.

  • Назначьте экземпляр Player переменной Player в SC_EnemySpawner.

И, наконец, нам нужно запечь NavMesh в нашей сцене, чтобы вражеский ИИ мог перемещаться.

Кроме того, не забудьте пометить каждый статический объект на сцене как Navigation Static перед запеканием NavMesh:

  • Перейдите в окно NavMesh (Окно -> AI -> Навигация), щелкните вкладку «Выпечка», затем нажмите кнопку «Выпечка». После того, как NavMesh запечется, он должен выглядеть примерно так:

Теперь пришло время нажать Play и протестировать:

Sharp Coder Видео проигрыватель

Все работает так, как ожидалось!

Как создать 2D-шутер в Unity

Создание шутеров позволяет научиться многим вещам, которые пригодятся в разработке игр других жанров.

Евгений Кучерявый

Евгений Кучерявый

Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

На примере шутеров можно научиться нескольким очень полезным приемам работы с Unity: инстанцированию префабов, созданию логики для NPC, изменению здоровья персонажей и так далее.

Перед чтением статьи рекомендуем ознакомиться с другими нашими материалами о базовых навыках работы с Unity, которые пригодятся для создания шутера:

  • Как создать игру в Unity.
  • Создание анимации в Unity.

Что делает шутер шутером

Шутер (от англ. Shoot — стрелять) — это игра, в которой игрок должен стрелять из какого-либо оружия (пистолет, лук, лазерная винтовка), чтобы побеждать врагов. Добавления этой механики в игру достаточно, чтобы ее можно было назвать шутером.

Кроме стрельбы, также можно реализовать и другие возможности:

  • управление транспортом;
  • прокачку персонажа;
  • торговлю;
  • исследование мира;
  • крафтинг (создание игровых предметов).

При этом не важно, в каком сеттинге находится игра (фэнтези, фантастика, Средневековье) и сколько в ней измерений (два или три), — она все равно будет считаться шутером, если есть возможность стрелять. Поэтому в статье основное внимание уделено именно этой механике.

Стрельба

Есть два основных способа реализовать стрельбу:

  • Префабы. Добавляет на карту снаряд, которому можно прописать поведение — направление полета, действия при попадании и так далее.
  • Лучи (Raycast). Движок рисует невидимую линию от какой-нибудь точки в заданном направлении и возвращает данные о том, есть ли что-нибудь на пути.

Каждый стоит разобрать более подробно.

Начало выстрела

В первую очередь нужно подготовить всё, чтобы персонаж мог стрелять. Начать стоит с создания точки, откуда будет лететь снаряд или направляться луч. Для этого добавьте пустой объект с именем FirePoint и поместите его внутрь персонажа, расположив возле дула его оружия:

Затем нужно написать код, который позволит персонажу вращаться вместе с этой точкой. Создайте скрипт Controller.cs и прикрепите его к персонажу:

После этого можно приступить к скрипту, который позволит стрелять. Назовите его Shooting.cs, добавьте к персонажу и используйте следующий код:

Добавьте коллайдер с триггером и создайте скрипт Bullet.cs, в котором будут обрабатываться попадания (он будет рассмотрен чуть позже). Сохраните объект в качестве префаба, а потом перетащите его в компонент Shooting.cs. Туда же перетащите FirePoint:

Теперь нужно написать метод, который будет создавать (инстанцировать) новые снаряды на карте:

Пока снаряд остается на месте. Чтобы это исправить, нужно прописать в Bullet.CS этот код:

Стрельба лучами

В первую очередь нужно добавить персонажу объект Effect -> Line.

Укажите в X — 1, а в Z — 0, а затем поставьте галочку Use World Space. После этого можно изменить толщину линии, поменять цвет, закруглить края и так далее.

Прикрепите получившуюся линию к скрипту Shooting.cs и добавьте следующий метод:

Теперь, выбрав подходящий способ стрельбы, можно реализовать работу с очками здоровья.

Получение повреждений

За очки жизни будет отвечать скрипт Health.cs — его нужно добавить всем объектам, которые должны получать повреждения при попадании.

Примерно такой же код можно добавить в метод запуска луча.

NPC для 2D-шутера

Чтобы игра не превратилась в стрельбу по неподвижным мишеням, нужно написать скрипт поведения объектов — NPC.cs:

Заключение

Это довольно простой шутер, но полученных знаний должно хватить, чтобы разработать что-то более сложное и интересное. Если вы хотите глубже погрузиться в тему разработки игр на Unity, читайте статьи в нашем блоге и записывайтесь на курс «Профессия разработчик игр на Unity».

Как сделать Шутер на Unity за 30 минут

Привет, друзья! В этом уроке мы создадим 3д шутер на Юнити за кратчайший срок: нам понадобится всего 30 минут! Не верите? Долистайте эту статью до конца, чтобы посмотреть наш урок по Юнити. В нашем шутере можно будет играть от первого лица, давайте скорее начинать!

Для начала нам потребуются стандартные ассеты, которые мы можем скачать в Ассет Стор. Открываем Asset Store, вбиваем в поисковую строку Standard Assets. Создаем Plane. Растягиваем его площадь. В папке Character заходим в первую папку и в папке префаб перемещаем на сцену первый префаб. Так как у персонажа есть камера, основная камера нам не нужна, поэтому удаляем ее. Снова переходим в Ассет Стор, выбираем категории и жмем на Props.

шутер на юнити

Перемещаем префаб оружия на сцену и настраиваем его расположение.

шутер +на unity

Если оружие искажено, отражается не полностью, кликаем в иерархии на камеру и в инспекторе в Culling Mask — 0.1.

шутер 3д юнити

В иерархии перемещаем оружие в камеру.


Создаем скрипт, в нем объявляем переменные.

  • урон — damage
  • сила стрельбы — fireSpeed
  • объект камеры — cam
  • дальность стрельбы — range

простая игра на unity
Создаем функцию, в ней объявляем луч. RaycastHit hit.
Пишем if и в нем:

  • Physics.Raycast — это и есть луч. Далее указываем, откуда будет луч исходить. cam.transform.forward — направление луча.
  • out hit — результат выпуска луча.
  • range — ограничиваем выстрел

игры unity шутеры
И когда проверка будет пройдена, мы в консоль будем выводить слово enter.

unity создание шутера

Теперь нам нужно вызвать эту функцию, для этого в Update пишем: если нажали ЛКМ, то вызываем функцию выстрела.

unity создаем шутер

Запускаем и проверяем.

unity 3d шутер
Добавим теперь след от пули, саму пулю и звуки. Объявляем переменные:

  • префаб пули — bull;
  • след от пули — trace;
  • точка спавна — spawnBull;
  • звук — shot;
  • компонент воспроизведения — audioShot;
  • сила force = 310;

unity 3d создать игру
И в функции shootGun пишем воспроизведение звука.

2д шутер на юнити

Воспроизведение системы частиц (следа от пули).

2д игра на unity

И спавн пули.

2d шутер +на unity

Далее переходим в Юнити, создаем пустой объект в пистолете, это и будет точка спавна, добавляем ей иконку.

как сделать шутер на юнити

Настраиваем расположение, ставим ее в начало дула. Теперь в папке ParticleSystem выбираем префаб Flare и перемещаем так же к дулу. В иерархии систему частиц перемещаем на точку спавна. Снова выбираем систему частиц и настраиваем эффект, нам нужно убрать две галки Looping и Play Awake. Делаем так же и во вложенных объектах частиц. Это позволит проигрывать эффект один раз.
На оружие в инспекторе добавляем компонент AudioSource. Теперь заполняем скрипт:
Cam — добавляем камеру.
Bull — находим в проекте префаб пули.
Trace — добавляем созданый эффект из иерархии.
Spawn Bull — точка спавна.
Shot — нажимаем на кружок и выбираем звук.
AudioShot — добавляем оружие потому что, на нем есть этот компонент.

как сделать шутер +на unity

Создадим отдельный скрипт для пули и в нем объявлим скорость пули. Далее прикладываем силу и уничтожаем ее через 0.5 секунд. Перемещаем скрипт на префаб пули.

как делать игры на unity

Также на префаб добавляем Capsule collider и ставим галку isTrigger. Теперь создадим новый скрипт, который будет уничтожать объект, в который мы попали.

создание 3d игры на unity

Нажимаем в окне проекта Юнити на кнопку All prefab, находим любой объект врага. Перемещаем его на сцену. Если на нем есть скрипты, отключаем их, сняв галку. Теперь переместим наш скрипт на врага. Чтобы скрипт сработал, на пулю нужно добавить тег bull. Создаем тег.

2д игра на unity

И назначаем его префабу пули. Запускаем и проверяем. Далее добавим силу: когда пуля будет попадать в объект, на него будет воздействовать сила. Переходим в скрипт gunManager, где у нас основная функция выстрела. Переменная силы у нас уже объявлена, нам осталось только прописать воздействие. Проверяем, есть ли физика у объекта. Если да, то мы прикладываем силу.

игру unity 3д

Сохраняем и проверяем.

Вот и все! Если вы хотите поближе познакомиться с разработкой игр на Unity 3D и программированием на языке C#, приходите к нам на курс. Мы в школе «Пиксель» учим детей 10-14 лет разбираться во всех инструментах Юнити, писать скрипт на Си Шарп, создавать многоуровневые сложные игры. Присоединяйтесь!

Как создать 3D-шутер в Unity: пошаговый гайд для начинающих

Хотите создать свой собственный шутер на Unity 3D, но не знаете, с чего начать? Наша статья поможет вам разобраться с основами программирования, создания моделей и визуализации игрового мира. Получите подробные инструкции и советы от опытных разработчиков и создайте свой собственный шутер на Unity 3D прямо сейчас!

Unity 3D — одна из самых популярных игровых платформ на сегодняшний день. Широкие возможности по разработке коммерческих и некоммерческих проектов наряду с бесплатностью этого движка привлекают огромное количество начинающих и профессиональных разработчиков.

В этом руководстве мы рассмотрим пошаговую инструкцию по созданию шутера на Unity 3D, а также поделимся практическими советами, которые помогут в разработке собственной игры. Наша статья предназначена в первую очередь для начинающих, но может быть полезна и более опытным разработчикам.

Также мы рассмотрим основы программирования на C#, на примере разработки простого, но в то же время интересного проекта. Если вы хотите начать свой путь в игровой индустрии, то этот гайд будет хорошим началом для вас.

Как создать шутер на Unity 3D

Как создать шутер на Unity 3D

Unity 3D является одним из лучших инструментов для разработки игр, в том числе и такого жанра, как шутеры. Создание шутера на Unity 3D может показаться сложным процессом, но при правильной организации работы и использовании правильных инструментов, этот процесс станет гораздо проще.

Первый шаг в создании шутера на Unity 3D — это определение концепции игры. Это включает в себя выбор темы, сюжета и основных механик игры. Определение целей и основных элементов игрового процесса также является важным шагом в создании шутера на Unity 3D.

Далее следует создание игровой сцены, которая включает в себя фоновую музыку, анимацию и другие элементы. Убедитесь, что игровая сцена создана с максимальной эффективностью и легко масштабируется, чтобы обеспечить оптимальное качество работы игры.

Основные механики игры также играют важную роль в создании шутера на Unity 3D. Это включает в себя работу с механикой управления, полетов, стрельбы и других элементов игры. Во время создания игры, необходимо предусмотреть возможность настройки параметров для вариации уровней и механик в процессе игры.

Для полного погружения игрока в процесс, необходимо учесть аудиовизуальный аспект игры. Это включает в себя работу с графикой, звуками и музыкой игры. Сделайте фоновую музыку и звуковые эффекты соответствующими настроению и тематике игры.

Наконец, процесс тестирования и отладки игры является неотъемлемой частью ее создания на Unity 3D. Он должен включать в себя проверку игровых уровней, механик и элементов, а также исправление возможных ошибок и недоработок перед выпуском игры на рынок.

Создание шутера на Unity 3D может быть сложным процессом, который требует возможностей и правильной организации для достижения желаемых результатов. Но при правильной организации работы и использовании правильных инструментов это возможно, и Вы сможете создать захватывающий шутер с уникальной механикой и высококачественными графикой и звуком.

Практические советы и руководство для начинающих

Создание шутера на Unity 3D – занятие не из легких, но возможное для всех. Важно знать несколько правил, которые помогут избежать типичных ошибок и оптимизировать работу:

  • Начинайте с малого. Попробуйте создать простую игру с прямолинейным сюжетом и минимумом особенностей. И уже после этого переходите к более сложным проектам.
  • Ищите ответы в документации. Unity 3D предоставляет обширную документацию и большое сообщество разработчиков, где можно найти ответы на большинство вопросов.
  • Не забывайте об оптимизации. При создании игры на Unity 3D важно учитывать ее оптимизацию, особенно если речь идет о шутере. Добавление слишком большого количества объектов и сложных анимаций может привести к падению производительности.
  • Тестируйте и отлаживайте. Важно тестировать игру на разных устройствах и платформах, и устранять возможные ошибки в программном коде и графике.
  • Никогда не стесняйтесь учиться. Unity 3D – гибкая система с настроенной на удобство разработки, но изучение ее всегда остается процессом постоянного обучения.

Прежде чем начинать разработку шутера на Unity 3D, важно знать не только основы программирования, но и понимание элементов игрового уровня и балансировки игровой механики.

Следуя вышеперечисленным советам, возможно создание красивой и захватывающей игры, которую будет интересно играть и тестировать.

Выбор и подготовка платформы

Для создания шутера на Unity 3D необходимо выбрать подходящую платформу. Начать можно с популярных: PC, Mac, iOS, Android, Xbox, PlayStation. Каждая из них имеет свои особенности и требования, которые необходимо учитывать при создании игры.

Перед началом работы нужно убедиться, что компьютер соответствует системным требованиям Unity 3D. Ожидаемое количество игроков также влияет на выбор платформы. Если игра предназначена для большого количества игроков, следует выбирать серверные решения.

Важной частью подготовки платформы является тестирование. Перед выпуском игры на рынок необходимо провести тестирование на различных платформах. Необходимо убедиться в стабильности игры на всех устройствах и в различных условиях использования.

Выбор и подготовка платформы – это важный этап при создании шутера на Unity 3D. Это позволит создать стабильную и удобную игру для игроков, что в свою очередь приведет к успеху проекта.

Изучение инструментов Unity 3D

Изучение инструментов Unity 3D

Unity 3D является одним из лучших инструментов для создания игр, включая шутеры. Для начала работы с Unity 3D нужно изучить основные его компоненты.

Одним из первых компонентов является Точка Изначального Зрения (Point of View — POV). С помощью POV игрок может управлять персонажем и наблюдать за окружающим миром. Для изменения POV используется Camera Object.

Для создания прочной игры на Unity 3D также нужно ознакомиться с компонентами Physics и Colliders. Physics определяет законы движения и взаимодействия объектов в игре, а Colliders определяет поведение столкновения между объектами.

Не менее важным компонентом является аудио-система Unity 3D. Для создания реалистичной звуковой обстановки в игре можно использовать Audio Source и Audio Listener. Кроме того, для размещения звука в 3D пространстве используется Spatial Sound.

Если количество объектов в игре слишком велико, то можно использовать компоненты Batch Mode и Occlusion Culling. Batch Mode объединяет множество мелких объектов в один большой, а Occlusion Culling позволяет скрыть объекты, находящиеся за другими объектами, чтобы уменьшить нагрузку на процессор игры.

Наконец, для обработки и управления сценой могут быть использованы компоненты Scripting и Animator. Scripting позволяет написать скрипты для изменения поведения объектов в игре, а Animator управляет анимациями для персонажей и объектов.

  • Вывод: Изучение компонентов Unity 3D является необходимой частью процесса создания шутера на этой платформе. Нужно освоить основные компоненты, такие как POV, Physics, Colliders, аудио-систему, Batch Mode и Occlusion Culling, Scripting и Animator.

Создание игрового мира и окружения

Создание игрового мира и окружения

Чтобы создать шутер на Unity 3D, необходимо изучить процесс создания игрового мира и окружения. Важно создать реалистичный и интересный мир, который будет вдохновлять игрока. Начало этого процесса — создание террейна. Unity предоставляет инструменты для создания террейна путем моделирования структуры земли, добавления текстур и других элементов.

Для создания окружения можно использовать реальные местности или создавать их самостоятельно. Чтобы создать атмосферу, можно добавить растительность, реки, озера или другие элементы окружения, которые будут поддерживать игровой сюжет и сценарий.

Важным моментом при создании окружения является освещение. Unity предоставляет мощные инструменты для создания различных эффектов освещения, основанных на физических законах света и тени.

Создание игрового мира и окружения требует времени и терпения. Но результат будет впечатляющим и незабываемым для игроков, которые побывают в вашем мире.

  1. Изучите процесс создания террейна на Unity
  2. Добавьте растительность, реки и озера в окружениe
  3. Не забудьте про освещение, чтобы создать правильную атмосферу

Создание игровых объектов и персонажей

Один из важных аспектов создания шутера в Unity 3D — это создание игровых объектов и персонажей. Важно понимать, что создание этих элементов игры требует определенных знаний и навыков, поэтому новичкам стоит пройти специальные обучающие курсы или посмотреть уроки на YouTube.

Для создания игровых объектов и персонажей в Unity используются различные инструменты, включая спрайты, модели 3D и другие. Выбор подходящих средств зависит от требований проекта и желаемого эффекта. Например, если выбрана 2D-графика, то для создания персонажей и объектов могут применяться спрайты с различными видами анимации.

Кроме того, важно уделить внимание дизайну персонажей и игровых объектов, так как это сильно влияет на их привлекательность для игроков. Количество деталей, цветовая гамма и текстуры должны быть сбалансированы и соответствовать стилю игры.

После создания игровых объектов и персонажей следует настроить их поведение, назначить им нужные анимации и физику. Для этого можно использовать компоненты Unity, такие как Animator, Rigidbody и другие. Важно также уделить внимание их скриптам, так как они определяют конкретное поведение объектов в игре.

В целом, создание игровых объектов и персонажей — это важный шаг в создании шутера в Unity 3D. Тщательное планирование, дизайн и настройка помогут получить качественный и привлекательный результат для игроков.

Добавление анимации и звуковых эффектов

Добавление анимации и звуковых эффектов

Для создания качественного и реалистичного шутера на Unity 3D необходимо добавить анимацию оружия, персонажей и врагов. Для этого можно использовать анимационные контроллеры и анимационные курсы, которые предоставляет Unity.

Также в игру нужно добавить звуковые эффекты, такие как звук выстрела, звук попадания пули в цель, звук перезарядки оружия и т.д. Для этого можно использовать библиотеки звуковых эффектов, которые можно найти в интернете, или создавать собственные звуковые эффекты в специальных программах.

Звуковые эффекты и анимация должны быть синхронизированы с игровым процессом, чтобы создать максимально реалистичную атмосферу игры. Например, при выстреле оружия должен проигрываться звук выстрела, анимация отдачи и эффект выстрела на экране.

Также можно добавить к игре музыку, которая будет играть на фоне. Это поможет создать нужную атмосферу игры и подчеркнуть ее атрибуты. Например, мрачная музыка подойдет для постапокалиптического шутера, а динамичная музыка будет приятна в динамичном шутере.

Важно учитывать, что добавление анимации, звуковых эффектов и музыки может значительно увеличить размер игры и затормозить ее работу. Поэтому следует выбирать оптимальный подход к добавлению эффектов в зависимости от целевой платформы и желаемых результатов игры.

Создание и редактирование скриптов

Создание и редактирование скриптов

Один из самых важных шагов в создании своего собственного шутера на Unity 3D — это написание скриптов. Скрипты позволяют программировать поведение объектов в игре, и без них игра будет бесполезна.

Создание скрипта в Unity 3D очень простое. Для этого нужно зайти в раздел «Assets» в главном меню, нажать правой кнопкой мыши и выбрать пункт «Create > C# Script». После этого откроется новое окно, где вы сможете назвать свой скрипт.

Редактирование скрипта также достаточно простое. Для этого нужно дважды кликнуть на файл скрипта в окне «Project». Это откроет скрипт в выбранной вами среде разработки. Вы сможете менять код, сохранять изменения, и возвращаться к Unity 3D для попробовать в действии ваш измененный скрипт.

Вам может потребоваться также научиться использовать Unity API (Application Programming Interface). Это набор инструкций и функций, которые Unity предоставляет разработчикам для работы с игрой. Вы можете использовать различные функции для перемещения объектов, проверки коллизий, визуального отображения текста и других задач.

Написание хорошего скрипта — это искусство, которое требует времени и практики. Но с помощью Unity 3D вы сможете создать отличный шутер, который будет привлекать внимание игроков и показывать ваших навыки программирования.

Программирование игровой логики

Один из важных аспектов создания шутера на Unity 3D — это программирование игровой логики. Это означает, что разработчик должен определить, как будет выглядеть игровой процесс, каким образом будут взаимодействовать персонажи и как игрок сможет влиять на игру.

Для того чтобы создать игровую логику, нужно использовать язык программирования C#. Он используется в Unity 3D и позволяет разработчикам создавать скрипты, которые определяют поведение объектов в игре. В шутере на Unity 3D, скрипты могут управлять логикой пуль, поведением камеры, управлением персонажей и многими другими аспектами игрового процесса.

Для того чтобы успешно программировать игровую логику, нужно подробно изучить документацию Unity 3D, особенно касающуюся скриптования. Также полезно ознакомиться со сторонними источниками, такими как форумы и блоги Unity 3D разработчиков, чтобы получить дополнительные советы и рекомендации.

Наконец, чтобы успешно программировать игровую логику, необходимо иметь хорошие знания языка программирования C# и практический опыт программирования в Unity 3D. Для начинающих разработчиков, рекомендуется начинать с простых проектов и постепенно набираться опыта.

  • Выучить C#
  • Изучить документацию Unity 3D
  • Изучать форумы и блоги Unity 3D разработчиков
  • Начинать с простых проектов и постепенно набираться опыта

Добавление элементов ИИ

Добавление элементов ИИ

Искусственный интеллект (ИИ) является неотъемлемой частью любого шутера, который хочет дать игрокам настоящую боевую среду. Добавление ИИ в ваш шутер поможет создать интересные миссии, увлекательные сражения и настоящую игровую атмосферу.

Перед тем, как создавать ИИ, вы должны понимать, как игрок будет взаимодействовать с вашими врагами. Определить функции ИИ, такие как навигация, стрельба, прицеливание и поведение, поможет создать систему, которая даст игрокам настоящий вызов.

Создание базового ИИ начнется с вычисления расстояния между врагом и игроком, а также установки пути следования ИИ к игроку. Не забывайте добавлять различные реакции на различные ситуации в игре для увеличения сложности.

Помимо этого, вы можете добавлять элементы ИИ, такие как графы с поведениями или используя нейронные сети, чтобы улучшить поведение врага. Вы можете использовать процедурную генерацию уровней, чтобы создать более разнообразные и интересные миссии.

Добавление ИИ к вашему шутеру может быть сложным, но оно стоит того. Он поможет создать настоящую боевую атмосферу, увлекательную игру и настоящий вызов для игроков.

Тестирование и отладка

При создании шутера на Unity 3D тестирование и отладка игры являются неотъемлемой частью процесса разработки. Независимо от того, насколько маленьким или большим является ваш проект, тестирование поможет выявить проблемы и неисправности, которые впоследствии можно будет устранить, чтобы улучшить игровой процесс.

Прежде всего, стоит убедиться в том, что все элементы игры функционируют правильно. Начните с проверки управления, прицеливания, выстрелов и предметов, которые персонаж может подобрать и использовать. Убедитесь, что все функции игры работают стабильно и не вызывают ошибок.

Однако не стоит ограничиваться только базовой проверкой. Отладка игры позволяет обнаруживать проблемы, связанные с графикой, звуком и другими элементами. Старайтесь проводить тестирование на разных платформах и на различных устройствах, чтобы убедиться, что игра работает корректно во всех условиях.

Кроме того, помните о том, что в процессе разработки игры можно использовать инструменты отладки, которые позволят быстро обнаруживать ошибки и устранять их. Например, использование консоли отладки поможет легко находить ошибки в скриптах и параметрах игры. Кроме того, можно использовать сценарии тестирования, которые позволяют убедиться в правильном функционировании конкретной части игры.

Важной частью тестирования и отладки является сбор обратной связи от тестеров и игроков. Прослушивайте их мнение о проекте, обращайте внимание на особенности игрового процесса и старайтесь улучшить игру, исходя из этой информации.

Тестирование и отладка являются неотъемлемой частью процесса создания шутера на Unity 3D. Старайтесь проводить проверку игры на всех условиях и использовать инструменты отладки, чтобы быстро находить и устранять ошибки. Не забывайте учитывать мнение тестеров и игроков для улучшения игры.

Оптимизация производительности

Оптимизация производительности – это важный аспект любой игры, включая шутеры на Unity 3D. Неправильное использование ресурсов компьютера может привести к задержкам и падению частоты кадров, что уменьшит игровой опыт.

Первым шагом для оптимизации производительности является оптимизация графики. Использование меньшего количества полигонов, текстур и эффектов позволит уменьшить нагрузку на процессор и графический процессор. Это может существенно повысить частоту кадров и уменьшить задержки.

Кроме того, убедитесь, что вы используете оптимальные настройки своей сцены. Удалите ненужные объекты, выключите динамические эффекты и уменьшите количество света, особенно в отдаленных областях карты.

Не стоит забывать и о коде. Неэффективные алгоритмы могут значительно замедлить работу вашей игры. Используйте стандартные методы оптимизации, такие как кеширование переменных и использование корутинов. Также следите за производительностью в редакторе Unity, используйте профилирование для нахождения узких мест в вашем коде.

Кроме этого, не забывайте об оптимизации звука. Использование слишком многих проигрывателей звука может увеличить нагрузку на процессор и привести к задержкам.

В общем, оптимизация производительности – это важный этап при создании шутера на Unity 3D. Следуйте этим советам и ваша игра будет работать эффективно и плавно на всех устройствах, где она запускается.

Релиз и дальнейшее развитие

После завершения разработки и тестирования вы готовы к релизу своего шутера на Unity 3D. Чтобы ваша игра получила максимальную популярность, рекомендуется использовать платформы Steam или другие игровые сервисы. Будьте готовы к множеству отзывов и отчетов об ошибках. Важно прислушиваться к фидбеку игроков и реагировать на них, чтобы улучшать и развивать свой проект дальше.

Для дальнейшего развития вашего шутера на Unity 3D можете добавлять новые уровни, персонажей, оружие и другие игровые элементы. Не забывайте улучшать графику и оптимизировать производительность игры. На этом этапе важно поддерживать игру и выпускать ежеквартальные обновления с исправлениями ошибок и новыми функциями.

  • Добавление мультиплеера – режим мультиплеера может значительно увеличить популярность вашей игры. Реализуйте возможность играть с друзьями или незнакомцами по Интернету.
  • Моддинг и поддержка сообщества – создайте свой форум или группу в социальных сетях, где игроки могут общаться, делиться опытом и создавать модификации для игры.
  • Новые режимы игры – добавьте новые режимы игры для увеличения разнообразия игрового процесса.
  • Игровые события – организуйте специальные игровые события, чтобы привлечь новых игроков и удержать существующих.

Вопрос-ответ:

Какие навыки нужны для начала создания шутера на Unity 3D?

Для создания шутера на Unity 3D необходимы знания программирования на языке C# и базовые знания в проектировании игр.

Какие библиотеки и плагины следует использовать для создания шутера на Unity 3D?

Существует множество библиотек и плагинов для Unity 3D, которые можно использовать при создании шутера. Но, в целом, основными библиотеками будут Physics Engine, которая отвечает за физику в игре, и Animation Engine для анимации персонажей и объектов.

Как создать модели персонажей для шутера на Unity 3D?

Для создания моделей персонажей можно использовать программы для 3D-моделирования, такие как Blender, Maya, 3ds Max и др. Но, если вы новичок, то стоит использовать Сharacter Creator, который не требует знаний в 3D-моделировании.

Как добавить звуковые эффекты в шутер на Unity 3D?

Для добавления звуковых эффектов в шутер необходимо использовать движок звука, например, Fmod или Wwise. Нужно создать звуковую систему с необходимыми звуковыми эффектами и проанализировать звуковое пространство, чтобы расставить звуковые источники в игре.

Как создать искусственный интеллект для врагов в шутере на Unity 3D?

Для создания искусственного интеллекта для врагов можно использовать алгоритмы решения задач, такие как поиск пути от врага до игрока, алгоритмы уклонения от пуль, алгоритмы обнаружения игрока и др. Также можно использовать нейронные сети для создания более сложных искусственных интеллектов.

Как добавить мультиплеер в шутер на Unity 3D?

Для добавления мультиплеера в шутер нужно использовать Unity Networking или Photon Unity Networking. Нужно создать сервер, который будет управлять соединениями игроков, и настроить алгоритм передачи данных между игроками.

Каким образом можно реализовать физику персонажей и объектов в шутере на Unity 3D?

Для реализации физики персонажей и объектов в шутере на Unity 3D нужно использовать физический движок. Unity 3D использует стандартный физический движок, который позволяет настроить массу, скорость, гравитацию и другие физические параметры объектов в игре.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *