C# Урок #1 Приседание для FPS

Программирование на Юнити.

C# Урок #1 Приседание для FPS

Сообщение Yan_Zhelanov 11 июл 2014, 18:29

В интернете не нашёл скрипта на C# приседания(Crouch), поэтому сам решил написать свой скрипт и сделать мини урок. Может кому понадобится...
Чем этот скрипт отличается от JS скрипта?
1. В нём нет ошибок
2. Я его буду обновлять
3. Тут есть подсказки =3

1. Создаём "C# Script" с именем "Crouch"
2. Удаляем в нём весь код
3. И вставляем туда этот скрипт(v.1.0):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Crouch : MonoBehaviour
{
        public CharacterController Controller; // Объявляем контроллер
        private Vector3 NewPos; // Сюда будем сохранять позицию
        private int NewHeight = 0; // На сколько будем приседать, не советую изменять.
        private bool Check = false; // Присели мы или нет
        // Use this for initialization
        void Start ()
        {
        }

        // Update is called once per frame
        void Update ()
        {
                NewPos = new Vector3(transform.position.x, transform.position.y + 0.6f, transform.position.z);
                // Загружаем позицию
                if (Controller.isGrounded && Input.GetKeyDown (KeyCode.LeftControl))
                //Если мы на земле и мы нажали левый ctrl
                {
                        if (Check == false) // Если мы не сидим
                        {
                                On(); // То выполняем функцию "On" описанную ниже
                        }
                        else if (Check == true) // Если мы сидим
                        {
                                Off(); //То выполняем функцию "Off" описанную ниже(логично же, не правда ли?)
                        }
                }
                if (Input.GetKey (KeyCode.LeftShift)) // Если зажат L.Shift
                {
                        if (Check == true) // Если мы сидим
                        {
                        Off();         
                        }
                }
        }

        void On() // Функция "On"
        {
                Check = true; // Загружаем в бул, то что мы сидим, то-есть "true"
                Controller.height = NewHeight;
                // Понижаем контроллер(Если у нас height контроллера была равна "2", то теперь будет равна значению "NewHeight")
        }

        void Off() // Функция "Off"
        {
                Check = false;
                Controller.height += 2; // Тут добавляем к значению "height" 2 единицы
                transform.position = NewPos;  // Загружаем позицию
        }
}
 

4. Закидываем этот скрипт к Controller'у
5. И добавляем в наш Controller "First Person Controller"

MINI UPDATE v.1.1
Что нового? Ускорил работу скрипта!

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Crouch : MonoBehaviour
{
        public CharacterController Controller; // Объявляем контроллер
        private Vector3 NewPos; // Сюда будем сохранять позицию
        private int NewHeight = 0; // На сколько будем приседать, не советую изменять.
        private bool Check = false; // Присели мы или нет
        // Use this for initialization
        void Start ()
        {
        }

        // Update is called once per frame
        void Update ()
        {
                NewPos = new Vector3(transform.position.x, transform.position.y + 0.6f, transform.position.z);
                // Загружаем позицию
                if (Controller.isGrounded && Input.GetKeyDown (KeyCode.LeftControl))
                //Если мы на земле и мы нажали левый ctrl
                {
                        if (!Check) // Если мы не сидим
                        {
                                On(); // То выполняем функцию "On" описанную ниже
                        }
                        else if (Check) // Если мы сидим
                        {
                                Off(); //То выполняем функцию "Off" описанную ниже(логично же, не правда ли?)
                        }
                }
                if (Input.GetKey (KeyCode.LeftShift)) // Если зажат L.Shift
                {
                        if (Check) // Если мы сидим
                        {
                                Off();         
                        }
                }
        }

        void On() // Функция "On"
        {
                Check = true; // Загружаем в бул, то что мы сидим, то-есть "true"
                Controller.height = NewHeight;
                // Понижаем контроллер(Если у нас height контроллера была равна "2", то теперь будет равна значению "NewHeight")
        }

        void Off() // Функция "Off"
        {
                Check = false;
                Controller.height += 2; // Тут добавляем к значению "height" 2 единицы
                transform.position = NewPos;  // Загружаем позицию
        }
}
 
Последний раз редактировалось Yan_Zhelanov 07 авг 2014, 15:12, всего редактировалось 7 раз(а).
Beginner С# Scripter
Мои уроки по скриптингу:
Скрытый текст:
C# Урок #1 Приседание для FPS - viewtopic.php?f=18&t=26187#p178809
Yan_Zhelanov
UNец
 
Сообщения: 16
Зарегистрирован: 11 июл 2014, 17:43

Re: C# Урок #1 Приседание для FPS

Сообщение vector 14 июл 2014, 11:09

Хорош, но "встает" рывком
все отлично.
vector tod (xbox live)
Учусь в КВВАУЛ (Краснодарское высшее военно авиационное училище летчиков)
Аватара пользователя
vector
UNIт
 
Сообщения: 75
Зарегистрирован: 27 янв 2013, 19:51
Откуда: краснодар

Re: C# Урок #1 Приседание для FPS

Сообщение vector 14 июл 2014, 11:36

чтобы от рывка избавится можно использовать анимацию или vector3.lerp, но прежде проверить есть ли чего над головой
все отлично.
vector tod (xbox live)
Учусь в КВВАУЛ (Краснодарское высшее военно авиационное училище летчиков)
Аватара пользователя
vector
UNIт
 
Сообщения: 75
Зарегистрирован: 27 янв 2013, 19:51
Откуда: краснодар

Re: C# Урок #1 Приседание для FPS

Сообщение Yan_Zhelanov 15 июл 2014, 22:03

Я займусь этим =)
Beginner С# Scripter
Мои уроки по скриптингу:
Скрытый текст:
C# Урок #1 Приседание для FPS - viewtopic.php?f=18&t=26187#p178809
Yan_Zhelanov
UNец
 
Сообщения: 16
Зарегистрирован: 11 июл 2014, 17:43

Re: C# Урок #1 Приседание для FPS

Сообщение SerLord 20 мар 2015, 12:38

После приседания контроллер падает под землю.
Всегда был с людьми,но везде был один.
Скрытый текст:
Хочешь жить - прими Смерть, хочешь умереть - думай о Жизни.
Аватара пользователя
SerLord
UNец
 
Сообщения: 11
Зарегистрирован: 15 мар 2015, 20:36
Откуда: Украина

Re: C# Урок #1 Приседание для FPS

Сообщение Yan_Zhelanov 20 мар 2015, 17:05

SerLord писал(а):После приседания контроллер падает под землю.

Возможно ты выставил большой Controller.height!
Beginner С# Scripter
Мои уроки по скриптингу:
Скрытый текст:
C# Урок #1 Приседание для FPS - viewtopic.php?f=18&t=26187#p178809
Yan_Zhelanov
UNец
 
Сообщения: 16
Зарегистрирован: 11 июл 2014, 17:43

Re: C# Урок #1 Приседание для FPS

Сообщение Lailore 21 мар 2015, 03:15

Синтаксис:
Используется csharp
....
// Update is called once per frame
        void Update ()
        {
....
&& Input.GetKeyDown (KeyCode.LeftControl)
....
 

Скажу только по поводу этих мест. В обязанности компонента "приседания" не должно входить отслеживания нажатие клавиши. Лучше сделать отдельный компонент, который будет отвечать за input пользователя(как бонус, мы получаем легкий способ изменения настроек всего ввода пользователя, в плоть до поддержки джойстика или тач интерфейса), а скрипт приседания, просто подписывается на событие менеджера управления(и как следствие в нем пропадает необходимость каждый кадр что-то проверять и делать, компонент реагирует только на событие)
Аватара пользователя
Lailore
UNIт
 
Сообщения: 148
Зарегистрирован: 08 дек 2014, 23:53


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10