Скрипт Рейкаста и луча для пушки танка

Скрипт луча, пушки, рейкаста, raycast для игрока

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

Ну что же, для создания скрипта C# мы будем использовать программу C Sharp Maker, с помощью которой можно создавать скрипты, даже не зная самого языка программирования!

В результате мы получаем код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pushka : MonoBehaviour
{
    RaycastHit Инфо;
    Vector3 Позиция = new Vector3(0, 0, 0);
    Color Цвет1 = new Color(1, 0, 0);
    Color Цвет2 = new Color(0, 1, 0);
    public float Дальность;
    public float x;
    public float y;
    public float z;
    public int Пули;
    public int Очки;

    void Update()
    {
         if (Input.GetKeyDown(KeyCode.Space))
         {
             if (Пули > 0)
             {
                 Vector3 Дополнение = new Vector3(x, y, z);
                 Позиция = this.transform.position + Дополнение;
                 Направление = transform.forward;
                 Ray Луч = new Ray(Позиция, Направление);
                 Пули = Пули - 1;
                 if (Physics.Raycast(Луч, out Инфо))
                 {
                     if (Инфо.collider.gameObject.tag == "Vrag")
                     {
                         Debug.DrawRay(Позиция, Направление * Дальность, Цвет1);
                         Очки = Очки + 1;
                     }
                     else
                     {
                         Debug.DrawRay(Позиция, Направление * Дальность, Цвет2);
                     }
                 }
                 else
                 {
                     Debug.DrawRay(Позиция, Направление * Дальность, Цвет2);
                 }
             }
         }
     }
}

Видео-урок и объяснение скрипта

Чтобы было наглядно и более понятно, мы сделали видео-урок, в котором полностью всё объясняется и разбирается каждая строчка скрипта.

Скачать эту программу C Sharp Maker

Вы можете скачать данную программу, чтобы тоже создавать игры без каких-либо усилий и проблем. Си Шарп Мейкер сам создаёт скрипт из простых блоков, которые расписаны по-русски с отдельным описанием!

Подробное создание скрипта

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

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

Второй вектор будет устанавливать направление танка, поэтому его назовём также — Направление.
Теперь создадим переменную цвета. В этот цвет будет перекрашиваться наш луч от пушки. Назовём Цвет1 и установим значения его цветов. Красный поставим на единицу, а все остальные поставим по нулям, таким образом в итоге будет простой красный цвет.

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

Ещё сразу создадим переменную, которая будет устанавливать дальность видимого нам луча.
И создадим три вещественные переменные, которые будут регулировать смещение луча по осям на танке.
Один называем X.
Второй называем Y.
Третий называем Z, как и оси.

Устанавливаем гипер-блок Всегда и в нём создадим ещё один вектор.
Назовём его Дополнение, ведь он и будет смещать наш луч.

В его значениях прописываем X, Y, и Z.

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

Вектору Позиция присваивать координаты самого игрока. Пишем Позиция и приписываем, что позицию надо смещать на координаты вектора Дополнение.

А вектору Направление задаём направление Вперёд.

Теперь можно создать сам луч, который будет вылетать из пушки.
Так и оставляем Луч. Он будет исходить из координат Позиция по направлению Направление. Мы специально так пишем, чтобы было понятно, за что оно отвечает.

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

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

А Направление ещё умножаем на переменную Дальность, чтобы мы могли регулировать длину луча.

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

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

Теперь скрипт готов для нашего тестирования. Заходим в меню файл и в свойствах проекта изменяем название скрипта.
Вот и всё. Копируем наш код и переходим в Visual Studio.

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 public class Pushka : MonoBehaviour {
     RaycastHit Инфо;
     Vector3 Позиция = new Vector3(0, 0, 0);
     Vector3 Направление = new Vector3(0, 0, 0);
     Color Цвет1 = new Color(1, 0, 0);
     Color Цвет2 = new Color(0, 0, 1);
     public float Дальность;
     public float x;
     public float y;
     public float z;
     void Update(){
         Vector3 Дополнение = new Vector3(x, y, z);
         Позиция = this.transform.position + Дополнение;
         Направление = transform.forward;
         Ray Луч = new Ray(Позиция, Направление);
         if(Physics.Raycast(Луч, out Инфо)){
             if(Инфо.collider.gameObject.tag == "Vrag"){
                 Debug.DrawRay(Позиция, Направление * Дальность, Цвет1);
             }
             else{
                 Debug.DrawRay(Позиция, Направление * Дальность, Цвет2);
             }
         }
         else{
             Debug.DrawRay(Позиция, Направление * Дальность, Цвет2);
         }
     }
 }

Выделяем весь код и вставляем наш скопированный скрипт. Теперь переходим в юнити.

Находим нашего игрока и переносим на него наш скрипт.

Запустим игру, чтобы настроить луч.

Если мы увеличиваем Дальность, то увеличивается и размер луча.

Теперь настроим так, чтобы луч выходил чётко из пушки. Для этого поднимем его по оси Y.
В нашем случае — это ноль сто двадцать пять.

А врагу нужно добавить компонент Rigidbody и Mesh Collider.

Теперь находим вкладку с тегами. Там мы создаём свой тег с именем Vrag.

Главное после добавления своего тега не забыть его поставить на врага. Поэтому выбираем его и устанавливаем наш тег.

Запускаем и пробуем!

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

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

Всё отлично работает. Но этот луч виден лишь в редакторе и он никак не влияет на игру.

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

В Си Шарп Мейкере добавляем ещё одну переменную, которую назовём Пули.
И ещё одну переменную с названием Очки.

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

Если сталкивается не с врагом, то также пули тратятся.

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

А вот если луч попал во вражеский танк, то очки должны прибавляться.
Поэтому тоже пишем, Очки плюс один.

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

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

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

Переносим в эти два блока с условиями остальные блоки.

Главное случайно не перепутать последовательность. Но по блокам проверять легко!
Готово! Нужно теперь вставить этот скрипт в игру.

Снова выделяем всё и вставляем уже новый скрипт.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pushka : MonoBehaviour
{
    RaycastHit Инфо;
    Vector3 Позиция = new Vector3(0, 0, 0);
    Color Цвет1 = new Color(1, 0, 0);
    Color Цвет2 = new Color(0, 1, 0);
    public float Дальность;
    public float x;
    public float y;
    public float z;
    public int Пули;
    public int Очки;

    void Update()
    {
         if (Input.GetKeyDown(KeyCode.Space))
         {
             if (Пули > 0)
             {
                 Vector3 Дополнение = new Vector3(x, y, z);
                 Позиция = this.transform.position + Дополнение;
                 Направление = transform.forward;
                 Ray Луч = new Ray(Позиция, Направление);
                 Пули = Пули - 1;
                 if (Physics.Raycast(Луч, out Инфо))
                 {
                     if (Инфо.collider.gameObject.tag == "Vrag")
                     {
                         Debug.DrawRay(Позиция, Направление * Дальность, Цвет1);
                         Очки = Очки + 1;
                     }
                     else
                     {
                         Debug.DrawRay(Позиция, Направление * Дальность, Цвет2);
                     }
                 }
                 else
                 {
                     Debug.DrawRay(Позиция, Направление * Дальность, Цвет2);
                 }
             }
         }
     }
}

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

Нужно при старте игры игроку дать некоторое количество пуль. Для примера поставим 24.

Отлично! Теперь при нажатии на пробел происходит выстрел. Попробуем сделать выстрел во врага.

И действительно, количество пуль каждый раз уменьшается, а при попадании во врага, нам присваивают очки. Уже получается какая-никакая игра!

Можно теперь поездить и поиграть в игру.

Подпишитесь на канал и поставьте лайк, чтобы увидеть новые видео-уроки и игры.