В этом уроке я покажу один из простейших способов реализации взаимодействия с колшейпом.
И так начнем.
Первым делом создадим два подготовительных класса расширения, который позволят не заморачиваться с setdata/getdata
Первый класс расширения добавляет две функции в колшейп, с помощью первой мы установим функцию, которая будет срабатывать при нажатии клавиши,
вторая - будет вызывать ее.
Второй класс расширит класс персонажа и добавит в него две функции, первая установит колшейп в который вошел персонаж,
а вторая будет возвращать его, если он будет.
Теперь приступим непосредственно к реализации взаимодействия.
Создадим какой то колшейп.
Создадим функцию взаимодействия, которая будет срабатывать в этом колшейпе
Где то в конструкторе присвоим эту функцию колшейпу
Подпишемся на два события, вход плеера в колшейп и выход из него
Когда персонаж войдет в колшейп мы с помощью нашего метода расширения сохраним в персонажа этот колшейп, а когда выйдет - удалим.
Следующим шагом нам надо подписаться на нажатие клавиши.
Когда персонаж нажмет нужную клавишу сработает этот ивент. Внутри происходит проверка стоит ли персонаж в колшейпе, и если стоит то вызовет прописанную
нами функцию которую вы указали при создании колшейпа. Профит.
Теперь, что бы создать колшейп с которым можно взаимодействовать достаточно просто инициализировать новый экземпляр колшейпа, и присвоить ему функцию.
Пример реализации на GitHub
Демонстрация работы:
И так начнем.
Первым делом создадим два подготовительных класса расширения, который позволят не заморачиваться с setdata/getdata
C#:
public static class colshape_exceptions
{
public static void SetInteraction(this ColShape shape, Action<Player, ColShape> action)
{
shape.SetData<Action<Player,ColShape >> ("colShapeInteraction", action);
}
public static void Interaction(this ColShape shape, Player player)
{
if (shape.HasData("colShapeInteraction")) shape.GetData<Action<Player, ColShape>>("colShapeInteraction")?.Invoke(player, shape);
}
}
C#:
public static class player_exceptions
{
public static void SetPlayerColShape(this Player player, ColShape shape)
{
player.SetData<ColShape>("playerColShape", shape);
}
public static ColShape GetPlayerColShape(this Player player)
{
if (player.HasData("playerColShape")) return player.GetData<ColShape>("playerColShape");
else return null;
}
}
Первый класс расширения добавляет две функции в колшейп, с помощью первой мы установим функцию, которая будет срабатывать при нажатии клавиши,
вторая - будет вызывать ее.
Второй класс расширит класс персонажа и добавит в него две функции, первая установит колшейп в который вошел персонаж,
а вторая будет возвращать его, если он будет.
Теперь приступим непосредственно к реализации взаимодействия.
Создадим какой то колшейп.
C#:
ColShape shape1 = NAPI.ColShape.CreateCylinderColShape(new Vector3(-425.32864, 1133.908, 325.90396), 2f, 2f, 0);
Создадим функцию взаимодействия, которая будет срабатывать в этом колшейпе
C#:
private void playerShapeInteraction1( Player player, ColShape shape)
{
player.SendChatMessage("Interact ColShape 1");
}
Где то в конструкторе присвоим эту функцию колшейпу
C#:
shape1.SetInteraction(playerShapeInteraction1);
Подпишемся на два события, вход плеера в колшейп и выход из него
C#:
[ServerEvent(Event.PlayerEnterColshape)]
public void OnPlayerEnterColshape(ColShape colShape, Player player)
{
player.SetPlayerColShape(colShape);
}
[ServerEvent(Event.PlayerExitColshape)]
public void OnPlayerExitColshape(ColShape colShape, Player player)
{
player.SetPlayerColShape(null);
}
Когда персонаж войдет в колшейп мы с помощью нашего метода расширения сохраним в персонажа этот колшейп, а когда выйдет - удалим.
Следующим шагом нам надо подписаться на нажатие клавиши.
C#:
[GTANetworkAPI.RemoteEvent("pressKeyE")]
public void OnPressKeyE(Player player)
{
player.GetPlayerColShape()?.Interaction(player);
}
Когда персонаж нажмет нужную клавишу сработает этот ивент. Внутри происходит проверка стоит ли персонаж в колшейпе, и если стоит то вызовет прописанную
нами функцию которую вы указали при создании колшейпа. Профит.
Теперь, что бы создать колшейп с которым можно взаимодействовать достаточно просто инициализировать новый экземпляр колшейпа, и присвоить ему функцию.
Пример реализации на GitHub
Демонстрация работы:
Последнее редактирование модератором: