Interested In Buying-RTS Game Question

Hey

So, i am interested in grabbing the pro version of this asset, but i have a few questions

my end goal is an RTS/Moba game.
i noticed that, if i go to 4.2.8, i can find in the docs information about Sc2/RTS classes
but, in the most recent version 4.2.18, i can not find anything about RTS
does that mean the feature was removed? or are there no plans on adding it?

One more question about the future of this asset, basically, i am developing using 2021.3.29f1, and we really will be unable to move to 2022 iteration

so, will there be a 2021 branch that also recieves updates? and will the RTS ever come to the most recent version, or do i have to keep using an older version? (or is it just a bug in docs?)

honestly, i learned about the asset (and he did not mention anything about the RTS demo so i am extra worried?)

so in short in terms of path finding/units, like for example giving a move command they just move as group properly, and stop properly without continiously bumping into each other, or if i give an attack command, enemies would stop, and then they’d cause an encriclement around the taret and stuff, basically i want units acting properly (pathfinding, not jittering, and not pushing each other) in a group can this asset handle that?

note, i have 8 years of programming expereince, its just that, i do not want to spend 2 years just building things related to pathing, or making sure groups of units move properly and do not get stuck with each other, or all of them try to go towards the same already filled path, etc etc…

Edit:
i also noticed the most recent version that contained anything about RTS, was in 2019? like 4 years ago?
is it like out of date, or was it an experiment that never finished/will never be finished? or are there plans on bringing it into the asset properly?

This question was answered via email.

1 Like

for anyone reading this into the future and is interested in buying as well
just buy the asset, the latest RTS demo is very good (noting that you need 2022
but, fear not, 2022.3.7f1 is a very stable iteration, that is not laggy, or slow or crashing ) (ryzen 4600h, 16 gb ram, 1660 TI) laptop.

integrating it into your project is very easy, just add three components to your units
Seeker
RichAI
RvoController

then create the A* Game Object, create your recast graph, and finally attach an RVO Simulator component on the A* game Object

and you’re done

just use the RichAI game object, as if its the NavMeshAgent and you’re ready to go.

Bonus:

if you want a square formation i got this code you can use

private Vector3 CalculateFormationPosition(Vector3 targetPosition, int index, List<GameUnit> units)
    {
        int rows = Mathf.CeilToInt(Mathf.Sqrt(units.Count));
        int cols = Mathf.CeilToInt((float)units.Count / rows);

        float totalWidth = cols * formationSpacing;
        float totalHeight = rows * formationSpacing;

        int row = index / cols;
        int col = index % cols;

        Vector3 startOffset = new Vector3(-totalWidth / 2f, 0f, totalHeight / 2f);

        Vector3 offset = new Vector3(col * formationSpacing, 0f, -row * formationSpacing);

        Vector3 formationPosition = targetPosition + startOffset + offset;
	    GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
	    go.transform.position = formationPosition;
	    go.transform.localScale = Vector3.one *0.25f;
	    if(go.GetComponent<Collider>())
	    {
	    	go.GetComponent<Collider>().enabled = false;
	    }
        return formationPosition;
    }

or you could use the formation movement that is from the RTS Demo

public void MoveGroupTo(List<GameUnit> group, Vector3 destination)
    {
        if (group.Count == 0) return;

        var positions = group.Select(u => u.transform.position).ToList();

        var previousMean = Vector3.zero;
        for (int i = 0; i < positions.Count; i++) previousMean += positions[i];
        previousMean /= positions.Count;

        var standardDeviation = Mathf.Sqrt(group.Average(u => Vector3.SqrMagnitude(u.transform.position - previousMean)));
        var thresholdDistance = standardDeviation * 1.0f;

        if (Vector3.Distance(destination, previousMean) > thresholdDistance)
        {
            //Pathfinding.PathUtilities.GetPointsAroundPointWorldFlexible(destination, Quaternion.identity, positions);
            Pathfinding.PathUtilities.FormationPacked(positions, destination, group[0].radius * 1.1f);
        }
        else
        {
            //Pathfinding.PathUtilities.GetPointsAroundPointWorld(destination, AstarPath.active.data.recastGraph, positions, 0, 0.5f * 2);
            for (int i = 0; i < positions.Count; i++) positions[i] = destination;
        }

        for (int i = 0; i < group.Count; i++)
        {
            group[i].MoveTo(positions[i]);
        }
    }

just change “GameUnit” class, to whatever your class is called.
MoveTo function is as simple as saying

void MoveTo(Vector3 newPosition)
{
GetComponent<RichAI>().isStopped=false;
GetComponent<RichAI>().destination = newPosition;
}

though a small warning this line of code, is somewhat complicated, no idea how it works but it does :smiley:

            Pathfinding.PathUtilities.FormationPacked(positions, destination, group[0].radius * 1.1f);
2 Likes