Effective way to make NavMeshAgents jump/climb obstacles in Unity? - c#

So I'm working on a zombie game and I want my zombies to be able to climb/jump over certain obstacles around the map. I know that I can create nav mesh links to achieve this but when doing it it feels forced as the zombies will go to the link to connect the climb/jump instead of just going over the obstacle. I am having trouble in my research finding an effective way to do this.
Basically here is what I want to achieve:
1.) When a zombie reaches a certain obstacle (fence, car, crate, etc.) that is climbable, instead of running around the obstacle to get to the player I want the zombie to climb or jump over the obstacle.
2.) When the player climbs on top of an obstacle I want the zombies to also be able to climb on the obstacle to be able to attack the player.
Does anyone have suggestions on effective ways to go about this or possible methods I could further research? From the hours I've spent researching this I'm not having any luck finding something that goes with what I want to achieve.

Related

How to make realistic shot in Unity

I'm just wondering how to make shots in my game more realistic. I mean there are two main ways in implementing shots. First: throw a small projectile and let it detect collisions. Second: use raycast. But in real world (and apparently I noticed this in PUBG) bullets fly really quick but not immediately. Here is why you should aim near your target if it's far away from you to hit it. Because if you aim right where it is it will move and your bullet will miss the target.
I'm just curious if any of you, guys have a nice solution to this problem. Also I wish to find a way to use raycast not every frame. In such things like detecting if you will actually hit the wall when shooting. If you have any good ideas how to implement spread and recoil for different types of weapons I will be happy to read them.
Blue point is bullet point of frame. and in very frame send a new raycast to check cross any human. like red line in this picture.
and bullet path use unity built-in Physics system to do it.

How to turn off Pathfinding in navmesh unity?

I use navmesh agent for my Isometric game (diablo like)
how then in all diablo-projects did they make it possible to rest against the wall?
how to off pathfind in nav mesh agent ?
I just want to hit the wall (or game object)
Example
ExampleInPoe
I tried everything, I can't figure out how to do it
You have to use NavmeshObstacles like explained here https://learn.unity.com/tutorial/navigation-basics#5c7f8528edbc2a002053b49c in Step 5.
So your navmesh basically ignores the wall - but the object prevents the player from passing. During runtime you can just remove the object and the path will be walkable.
Update:
In order to force the player to run into the wall (I assume when you say 'rest' against the wall you mean that), you could add a script that recognizes the player when they're close and then takes over their movement to let them smash the wall.
But this isn't a specific question anymore. So I'd rather recommend that you check out the Unity Tutorial section: https://learn.unity.com/search?k=%5B%22tag%3A5d351f087fbf7d006af48180%22%5D And try to get a better understanding of navigation and player movement in general.

How to add colliders to complex maze

I downloaded a maze sprite for expiremental purpose to use in my game and I'm trying to add colliders to the wall. But since the maze is complex, it is quite a lot of work to add a Box collider 2D to each wall.
I tried using the Polygon collider 2D and it was some sort of inaccurate mesh looking collider.Is there any better way to add colliders to a maze or is it possible to do it programmatically adding colliders by somehow detecting the structure of the maze?
Here is something similar to the maze I'm using:
Add comment
There are a few answers to this question, depending on your approach.
1. Sprite-based Approach (where you have an image of a maze)
Make sure that the sprite is transparent, and only opaque on the wall areas (a PNG image can have transparency). After you do this, then you should be able to attach a polygon collider to automatically create a collider. If the image is too big/complex like you say, then you might want to split it up into several different images (4 quadrants for example), and then arrange them and attach a polygon collider to each object. In general, the simpler a collider is, the more accurate and efficient it is.
The downside to the above approach is that you are having to do a lot of manual work. If you knew that you had a lot of hand-drawn mazes that you would need to build colliders for like this, then it might be worth automating the process described above with a script, but that could get complicated fast unless you know what you're doing. Essentially, the automation script could recursively split the sprite into quadrants, create corresponding GameObjects, and add PolygonColliders to each one.
Manually splitting the image in a photo-editing program or making an algorithm to generate the maze and colliders might be faster for you than automation, depending on how much you want to get into the code.
2. Algorithm-based Approach
Luckily, there are a lot of maze programming tutorials online. Most are for 3D mazes, but the logic is the same to make a 2D maze. If you're interested in this option, then I found tutorials on the topic here, and here. In order to add collision after the maze is generated in each of these tutorials you can add a BoxCollider2D to each side of each cell which has a wall (or if using a prefab, add a BoxCollider2D to the prefab).

How to make camera shake when player collides with an obstacle?

I don't get how to make the camera shake when my player collides with the obstacle.
I can suggest you a lot of different ways to do it, depending on what you trying to do,
and what you already did...
Like, I can think you just started learning Unity and suggest you to use OnTrigger methods to detect collision with your player, then implement a method to apply a noise to your camera position.. But, is your cam a ThirdPerson one? FirstPerson? Fixed? 2D topdown? 2D platform? 2,5D?
Do you get it? Is important to follow the guide to Ask a Question... Try to answer these questions, saying what you already did, what you already tried and I'm sure you'll find help.

Controlling Player Movement After Per Pixel Collision

I have implemented a full per pixel collision system that accounts for rotation, and its very accurate. It returns a simple bool on collision.
However I am not sure how to handle the collision from the player movement point of view.
E.g. In the picture above, if the player is holding up on the left stick, he should be stopped, but if he is holding up + right diagonal on the left stick, he should slide northeast alongside the side of the red square almost naturally.
How do I go about this, to make the player’s momentum stop, but still give control for the player to move in direction not blocked by a collision.
I could do this kind of thing with simple untransformed rectangles, but going into per-pixel texture collision has made my brain explode today so I’m hoping you guys can help. Any advice would be massively appreciated.
It is possible. For that you need to implement physics engine with your pixel based collision if you are willing to give natural effect in your game.
For that either you write your own game engine or use engine that is already there. For 2D game I highly recommended Farseer Physics Engine. It is out there for a long time. Now in stable condition and it surely wonderful.
It is developed using XNA only from scratch, and also performance wise it is far good.
Have a look at this. I hope I was able to give you answer. Please let me know if more details needed.

Categories

Resources