Unity Navmesh Agent blocked - unity3d

I have a project where I am using NavMesh Agent and Obstacles as a core mechanics of the game. I have baked a NavMeshSurface to the ground so the Agents can find their way to the End point. The player is placing Obstacles in front of the Agents to block their path. I am struggling to make the Agents do damage to the Obstacles if they are fully blocked and there is no available path to the end point. Note: (By fully blocked I mean that they are just standing at one place and do nothing. If this happens I want the Agents to start attacking the Obstacles in order to make their own way to the End point) Any suggestions of how to check if there is available path are deeply appreciated! Thank you in advance

Welcome to the community Svetoslav.
Doing quick search on NavMeshAgent check if endpoint is reachable yielded the answer right away (https://answers.unity.com/questions/1254520/how-to-check-if-agent-destination-can-be-reached.html
(answer by Arcana96))
There's a method called CalculatePath which allows you check whether a position is reachable before you move the agent. Here's the documentation:
https://docs.unity3d.com/ScriptReference/NavMeshAgent.CalculatePath.html
Using CalculatePath method returns NavMeshPath object. It can be used to check if endpoint is reachable (check the documentation). After getting positive results, you can set that path to NavMeshAgent's path property.

Related

Netcode Behaviour index was out of bounds. Did you mess up the order of your NetworkBehaviours? Unity Netcode for GameObjects

So I've been following some tutorials online and have been trying to create a multiplayer 3D game, and so far, all I want to do is for two clients to be able to connect to a server, spawn their players (spheres), and move their spheres around and into each other, causing collisions.
I have created a player movement script to handle input - just simple WASD and space-jump movement.
To handle the networking, I followed Tarodev's Netcode video to set everything up.
Here is where the problem begins. Using ParrelSync, I run the game on one editor and a clone on another. I then use a GameObject with the NetworkManager script to start a host on one editor, and a client on the other. Upon connection, the client and host both spawn players, but then the problem begins. As the client's player starts falling down, the host's editor starts experiencing errors and warnings. As mentioned in the title, here they are:
[Netcode] Behaviour index was out of bounds. Did you mess up the order of your NetworkBehaviours?
[Netcode] Network variable delta message received for a non-existent behaviour. NetworkObjectId: 2, NetworkBehaviourIndex: 2
I did a bit of digging and found that the error was being thrown by a function in the NetworkObject script, but I couldn't really understand why or how to fix it, hence this post.
Errors are only thrown on the client when the host moves its player, and errors are only thrown on the host when the client moves its player. The transforms of the players are not being transmitted between host and client at all, despite the player prefab having a Client Network Transform script, and a NetworkObject script.
Here is the link to the code if you want to reproduce the error or understand it better: https://github.com/XR101/Sumo101
Any help would be appreciated as this error is driving me insane.
It seems to me like this could be an error in the order of components on your game objects.
If there's only one component on each object, then make sure you're instantiating them correctly on the server via NetworkServer.Spawn
If you're sure you've done those things, then it's probably a component mismatch due to PlayerMovement and PlayerMovement2 being used. I have zero experience with Unity's networking stuff but it seems from the docs that they're intended to communicate with a NetworkBehaviour of the same type.

UMMORG/Mirror Networking - Moving A Connection From World To Lobby

I have been working for some time on a project using the UMMORG framework, which is built on Mirror networking. However, as of recent, I have been having an issue I just cannot solve.
In my project, when a player character is killed, I want the player to be moved from the game world back to the lobby. Or, in more technical terms, for the player's NetworkConnection to me moved from the Network State 'World' to the Network State 'Lobby.'
I have tried many times, but have been unable to find a way to do this. The consistent issue is with the player NetworkConnection not being found as a key in the Lobby dictionary. However, attempts to manually add the player NetworkConnection to the Lobby dictionary have failed. I'm assuming that Mirror requires a specific process to move a connection back to the lobby, but I just can't figure it out!
TLDR: How can I move a NetworkConnection in Network State 'World' to Network State 'Lobby?'
Thank you so much for your help! I will be checking this thread as often as I can, so if I haven't provided enough information, I would be happy to provide more. I have not changed any of the netcode in my UMMORG project, so if you have found a solution for this in your UMMORG or Mirror project, I would love to hear it! Thanks again!
Did you use MatchInterestManager?
I used MatchInterestManager and attach NetworkMatch to my player script.
Whenever I needed to change player state (for example from Lobby to Game or Game to Lobby), I simply change NetworkMatch.matchID from "lobby".toGuid to "gameName".toGuid.
Feel free to leave comments, and I'll do my best to answer.

Anylogic: Track AGV distance with Logging

I'm trying to track the distance travelled of different path-guided AGVs using the Logging feature. Unfortunately no movement stats of the AGVs are logged. I tried turning off the logging of other agents of the system, but that didn't help. The AGV agents are logged in the agents_log, but no movement stats are saved. Does anyone have an idea where there might be a problem?
All the best!
I'm not sure that movement stats are gathered for transporter fleet agents (cf. resource pool agents or other agents moving via moveTo instructions, MoveTo blocks, or being moved by resource agents).
At least in 8.7.2 nothing seems to be logged both for path-guided (e.g., the Solar Panel Production Line example model) or free-space (e.g., the Transporters Moving in Free Space example model).
I would check with AnyLogic support to see if this is either a bug in 8.7.2 or a limitation of movement capture in AnyLogic.

How do I access my Player Camera Manager (replicated (listen server and client)) in UE4 Blueprints

When I try to access the location of my Player Camera Manager on the server it returns 0, 0, 0.
I think that I tried every option on setting the Player Camera Manager respectively the Player Controller in all the replicated options. To be clear: At first, I used my common sense but after a week of failure I tried every combination with no success.
As an example: Here is how I tried to access the Location and the forward Vector for a Line Trace
I also tried to set the Camera Manager as a variable (I tried both server and client) and then access it on the server.
Does anyone have any ideas on how to fix that?
Any help is much appreciated.
APlayerCameraManager is not an actor that replicates, so I'd expect that blueprints to only work on the client. You'll have to replicate the values you need back to the server.
If you're making a first person game APawn replicates a variable named RemoteViewPitch that may be enough depending on what you're doing.
You can do it just make an interface function with input the information that you need from the manager then go to character and assign that to it then go to the manager blueprint and get the information and use controlled pawn to get ur player ref and call interface function

Resetting the global origin in Unity?

I'm creating a Unet application, where the server is responsible for spawning units, and the clients (obviously) see the units and their movements. Clients can spawn stuff via server commands, and typical interactions.
What i'm hoping to allow, however, is each client to redefine their global 'origin' point. So if i'm in the world and i see it in front of me, i'd like to be able to turn around and determine that "hey! that point over there is now the origin", and have all the components move to that new location (which should be handled automatically by the NetworkTransforms).
Does anyone know how i would be able to accomplish this? Or even implement some sort of NetworkTransformOffset script based off the network transform?
Yes....
By moving everything by an amount equal to -1 * new_origin yourself.