Jusper Jusper

Случайно сделали битву сварщиков
https://devtribe.ru/p/slash-polygon

Jusper Jusper

Внезапно на сайте потерялся 15-й выпуск. Перевыложили.

Jusper Jusper

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

Jusper Jusper

ruggaraxe,

Да, в этом плане все ок. Логично, что графен на старой машине, если не упарываться, не взлетит. Но я рад, что это было не 5 фпс, как даже в некоторых АА (типа Pillars of Eternity в некоторых схватках...

Jusper Jusper

ruggaraxe,

Подкреплю ее к публикации.

ruggaraxe ruggaraxe

Jusper, вот ссылка на анкету (я затупил со ссылкой с топике, сорри)
https://docs.google.com/forms/d/e/1FAIpQLSd_Wn53lJFrnfGpWI2IX...

ruggaraxe ruggaraxe

Jusper, честно говоря, да на 800х600 даже не проверяли... :) сорри. Ориентировались на FullHD и выше. Хотя над интерфейсом конечно же надо еще хорошенько поработать.
Тултипы постараемся сделать обязательно к следующей версии...

GenElCon GenElCon

Jusper,

Наверное. В прошлом они сделали Endless Legend - посмотри и сразу станет ясно в какую сторону они работают.

Jusper Jusper

GenElCon,

Я не очень понял по трейлеру геймплей. Это что-то типа цивы? Или это RTS?

GenElCon GenElCon

Humankind от разработчиков Endless Legends (и Space, но тут важно именно Legends).
А также согревающие сердца олдов трейлеры Port Royal 4 и Knights of Honor.

Jusper Jusper

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

Jusper Jusper

Первое, оно же самое тяжелое - UI. Я конечно, понимаю, что 800x600 совсем уже не в моде (завтра проверю на нормальной широформатной машине). Заблюренный текст я еще прочитать могу, но вот конкретно размер его крайне мал...

...
Jusper Jusper

ruggaraxe, я поиграл на старом маке 2012 года (Macbook Pro, Intel HD 4000), рад что с учетом довольно нагруженной по свету и теням картинке игруля не лагает как последняя сволочь (лагает конечно, но очень терпимо...

Jusper Jusper

Вот тут можно посмотреть игровой процесс. Видно, что в Новиграде просаживается FPS.

Jusper Jusper

С учетом тотального количества наигранных на свиче часов, думаю, что именно Switch станет для меня платформой, где я пройду Ведьмака.

Jusper Jusper

alexprey, это первое. Второе это постэффект, которыЙ засвечивает весь песок.

alexprey alexprey

Jusper,

Да, по мне так перебор с интенсивностью освещения

Логотип проекта Unreal Engine

Пилим платформер на UE4 - часть 8 (C++)

Пилим платформер на UE4 - часть 8 (C++)

Делаем летающую платформу, используя C++ вместо блюпринтов. Платформа умеет летать между набором фиксированных точек, замирая на каждой на указанный интервал времени.

Исходники из видео

CPP:

#include "FloatPlatform.h"
#include <EngineGlobals.h>
#include <Runtime/Engine/Classes/Engine/Engine.h>

FVector spos;
FVector cpos;
FVector tpos;
FVector k;
int32 cpoint=0;
int32 tpoint = 1;
float pointtimer = 0;



// Sets default values
AFloatPlatform::AFloatPlatform()
{
     // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void AFloatPlatform::BeginPlay()
{
    Super::BeginPlay();
    if (lpts > 1)
    {
        cpoint = 0;
        tpoint = 1;
        cpos = points[cpoint];
        SetActorLocation(cpos);
        spos = cpos;
        tpos = DefTPOS(tpoint);
    }

}

// Called every frame
void AFloatPlatform::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    MovePlatf(DeltaTime);
    

}

void AFloatPlatform::MovePlatf(float dt)
{
    int32 ckx;
    int32 ckz;

    cpos = GetActorLocation();

    //вектор дистанции
    FVector dv = tpos - spos;
    float dst=FMath::Abs(dv.FVector::Size());

    //коэффициент направления по Х
    if (tpos.X > cpos.X)
    {
        ckx = 1;
    }
    else
    {
        ckx = -1;
    }
    k.X = (FMath::Abs(dv.X)*ckx) / dst;
    GEngine->AddOnScreenDebugMessage(-1, 0.01f, FColor::Red, FString::Printf(TEXT("ckx=%d; kx=%f; dvX=%f"), ckx, k.X,dv.X));
    
    //у нас 2д игра, нет движения по У
    k.Y = 0;

    //то же для Z
    if (tpos.Z > cpos.Z)
    {
        ckz = 1;
    }
    else
    {
        ckz = -1;
    }
    k.Z = (FMath::Abs(dv.Z)*ckz) / dst;

    //собственно движение
    if (pointtimer <= 0)
    {
        cpos += k * spd*dt;
    }
    else
    {
        pointtimer -= dt;
    }

    //расстояние от текущей точки до активной цели
    float dd = (tpos - cpos).FVector::Size();

    //если платформа возле точки
    if (dd <= (spd * dt * 2))
    {
        //смещаемся на точку вперед
        cpoint++;
        tpoint++;

        //если дошли до номинального конца массива точек, съезжаем на начало
        if (cpoint > (lpts - 1))
        {
            cpoint = 0;
        }
        if (tpoint > (lpts - 1))
        {
            tpoint = 0;
        }
        spos = cpos;
        tpos = DefTPOS(tpoint);

        //принудительно помещаем платформу на заданную точку
        cpos = DefTPOS(cpoint);

        pointtimer = pointtime;
    }    
    
    SetActorLocation(cpos,true);

    if (GEngine) {
        GEngine->AddOnScreenDebugMessage(-1, 0.01f, FColor::Yellow, FString::Printf(TEXT("cp=%d; tp=%d; dd=%f"), cpoint, tpoint, dd));
    }
}

FVector AFloatPlatform::DefTPOS(int32 pnt)
{
    return points[pnt];
}

H:

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "FloatPlatform.generated.h"

UCLASS()
class GENEPRINCESS_API AFloatPlatform : public AActor
{
    GENERATED_BODY()
    
public:    
    AFloatPlatform();

protected:

    //объявления функций
    virtual void BeginPlay() override;
    void MovePlatf(float dt);
    FVector DefTPOS(int32 pnt);

    //объявления свойств
    UPROPERTY(EditAnywhere)
        float spd = 250;
    UPROPERTY(EditAnywhere)
        float lpts = 2;
    UPROPERTY(EditAnywhere)
        float pointtime = 1;
    UPROPERTY(EditAnywhere)
        TArray <FVector> points;
    
    //основные переменные
    FVector spos;
    FVector cpos;
    FVector tpos;
    FVector k;
    int32 cpoint;
    int32 tpoint;
    float pointtimer;
    

public:    
    // Тик
    virtual void Tick(float DeltaTime) override;

    
};


Дарин, наконец-то добрался до просмотра! Вступление огонь! вот только звук речи очень тихий, приходится вслушиваться. С 10 минуту чуть получше стало со звуком.

В целом годно, спасибо за материал!)

Справка