If anyone has problems with the OverlapCircles not working to block player movement into "illegal" places as defined by your colliders on the stopsMovement layer, try the following: In the grid object child "Colliders" (or whatever you named it) that you use for defining where colliders should be, make sure Composite Collider 2D has Geometry Type set to Polygons, **not** Outlines. At least that worked for me on Unity 2020.1.
thank you for this, i had this exact issue. i changed the style from outline to polygons during testing to fix it, but i should have looked here first and saved my ass like 2 hours of frustration.
i almost got happy seeing this comment, however it didn't work in my case, only horizontally, if i press vertical keys the player pass through walls :(.... Unity 2021.3.5f
@@sol15_ Already 3 years, I assume you already know it but, just in case, that does show you the values of a private and protected variable on the inspector so you don't have to change it on the code.
I've been watching your tutorials for a long time and I have to say you're getting really better at condensing concepts. Not that the the older tuts were bad. I learned a lot from them, but this format is really helpful.
Turn based strategy tutorial like Heroes of Might and magic udemy.com/course/turn-based-strategy-game-development/learn/lecture/21513708?start=0#overview
hey bro, can i see your script of your four triggers? cause im newbie in the gameDev you can send me on my email edgarlawrence96@gmail.com much appreciatied :D
Excellent tutorial, as always! Have you considered doing a tutorial on mouse-click based grid movement, with your movement range shown by highlighted tiles in your grid (e.g., for a turn-based game)? Even cooler if it also showed your attack range (e.g., for ranged or magic attacks). Thanks for all your excellent tutorials and courses (I've purchased 5 of them on Udemy)!
Awesome, you can also use that system in a reversed way to have a follower system. Every time I move, my character leaves a "token" which is tracked by my follower. The follower moves towards that token until he is on top of it. When I move again, the token's transform is equal to my current position and my follower moves towards that token again. I called the token "lastposition". Works surprisingly well.
What i am trying to do on my first go with unity, not having much luck :( I can easily force the object to move in a single direction, but i cant figure out a way to get the direction based on the side the object was triggered at.
If you are facing the problem of Input Delay, Change Horizontal And Vertical Axis's Sensitivity to 10 and Gravity to 10 in Edit>Project Settings>Input Manager It will fix the issue
@2:00 so you totally skipped on how to create the moviePoint as a child under the player. it was just "ready" to go before you started making the video haha. In case anyone is wondering, right click on the left pane, "add object"
I made my own version of moveTowards, transform.position = (transform.position * moveSpeed + movePoint.position) / (1+moveSpeed); which I use because it's a bit smoother.
4:38 could you instead do if (Input.GetAxisRaw("Horizontal") != 0f) Is that inefficient in any way? Because that's what I've been doing for a while :P nice tutorial though!
If I could add one little tidbit...I think after you check distance, you should reset player transform to the new expected transform. If you are truly doing a grid, you can see that every movement makes the character more and more off the grid. Especially if you are nit-picky and like to put the final transform at the bottom. I was like "no! he put...the transform...at the top!!!!!! Whyyyyy!? he did his figuring after he did the transform!!! whyyyyy!?!?!" which is okay I just ran into the issue where everytime I would hit the button, the character was a little more off the grid. Teleporting him after reaching an okay error offset helped and is unnoticeable to the user.
For anyone stumbling across this comment and wanting a solution to this I would recommend making a bool that needs to be true whenever you move and every time you move start a co-routine setting that variable to false, then using WaitForSeconds() and put in the time you wan't to have between inputs, and then set it to true. This was a very easy solution to implement for me.
Extremely helpful and to the point tutorial, thanks a lot!! Can someone just please help me understand WHY does this work?? I mean, I followed the whole thing and it works like a charm, I just can't wrap my head around WHY it's actually working and the character is never landing outside the grid. Thanks in advance!
It's set to move a specific distance and new movement cannot be requested until that requested movement has been completed. This limits the ability to move diagonally as well, as it is only allowed to execute one movement direction at a time. Here is an order of operations for you: The movepoint teleports to a location that's specifically in the centre of a grind square. The Player sprite moves toward the movepoint When the player sprite and the movepoint have the same x, y values, a new movement for the movement can be done, restarting the cycle. Hope this made sense
Inspired by Hopia Tale on mobile? I just found that game last week and this is what the entire game is based around. Cool tutorial might try it out later.
If you are having problems with the collisions, try to save the input axis value into variables and then use them in the rest of the code //transform.position = Vector3.MoveTowards(transform.position, MovePoint.position, MoveSpeed * Time.deltaTime); float horizontalInputValue = Input.GetAxisRaw("Horizontal"); float verticalInputValue = Input.GetAxisRaw("Vertical"); //if (Vector3.Distance(transform.position, MovePoint.position)
Turn based strategy tutorial like Heroes of Might and magic udemy.com/course/turn-based-strategy-game-development/learn/lecture/21513708?start=0#overview
I think that Brackey, as good as he is, does usually have his projects using pre-made assets. Like for my game engines class, I used a pre-made character controller asset to control the character. Though I am certain he has a video about grid-based movements, I'm uncertain if it's in the top-down series. At the moment, while I have basic experiences with coding, I can't necessarily help you. And the best advice I could give you is to cross-reference this video and the Brackeys video, see if you can rewire the code to make movement more grid-based.
To anyone else with problems with the movePoint transform passing into or through things on the StopMovement layer - try changing the use of Time.deltaTime to Time.fixedDeltaTime, it helped me anyway!
I'm using the new input system. I've managed to make my player move and be animated. The problem is he moves only one grid square left, right, up, or down, but won't move around the "map." I cant figure out the solution...
are you setting the transform.position using = instead of +=? Using += will add the new vector to your position but just using = will set the position directly as your input :)
I would love to know how to do this and interact with objects using unity's Isometric maps. I keep trying to detect objects using 2dRayCast but it never seems to work very well.
Great tutorial! question about the no-diagonal script: If I wanted to make it so that horizontal movement does not take precedence over vertical movement or vice versa how would you do it? I'm trying to make an rpgMaker style game where your most recent input is the one that takes priority Thanks!
hi, can you plz do a video showing how to do a board game on unity, where can the character choose to go or not to the other way? like a square with a line on de midle where they walk on it based on a dice movement..it would be really amazing ;v;
For some reason the movePoint still gets moved when theres an obstacle ahead. I did add a rigidbody and collider to it because I wanted gravity and otherwise it didn't work well.
This is such a great tutorial, exactly what i was looking for, thank you! I have a question though. How did you pull the player sprite out of that sprite sheet? I was trying to slice out the blue guy but then i messed up all my tiles. It seems like i can only get it to slice by 16x16 squares, but somehow in your project i get all the 16x16 tiles AND a 18x26 player?
I am able to get the grid based movement going, and I am now on the step of animating. I am working on a Pokemon clone with this tutorial, so I want an animation going left, right, up, and down. Since this code is a bit complicated, I'm not quite sure how to tell the animator to play a walking left animation when I'm pressing left. Any advice would be much appreciated. Fantastic tutorial! :)
I had the same issue for a few days, what I ended up doing was watching some of his other videos, and adapted that animation system, and one that Brackeys(? maybe?). Basically it takes your input and turns that into something you can then put into the unity Animator blend tree. His tutorial used a bool for transition between idle and moving, and I had a 4 direction idle, so I just sent over the data and set a movement threshold I think. I'm really new at this so I'm sure there are a dozen better ways of doing this, but this is what I got to work for me. using System.Collections; using System.Collections.Generic; using UnityEngine; public class TileMovement : MonoBehaviour { public float moveSpeed = 5f; public Transform movePoint; public LayerMask whatStopsMovement; public Animator animator; //private bool playerMoving; private Vector2 lastMove; private Rigidbody2D myRigidBody; Vector2 movement; // Start is called before the first frame update void Start() { movePoint.parent = null; myRigidBody = GetComponent(); DontDestroyOnLoad(transform.gameObject); } // Update is called once per frame void Update() { //playerMoving = false; transform.position = Vector3.MoveTowards(transform.position, movePoint.position, moveSpeed * Time.deltaTime); if (Vector3.Distance(transform.position, movePoint.position)
Thanks for the tutorial james! One question. What's the difference between Input.GetAxisRaw and Input.GetAxis? I looked at the docs but I'm not exactly the most literate person so I want to clarify. Does Raw mean it gives you ONLY -1 and 1 while GetAxis gives you floating point values like 0.98892? Also... will this still work if the sprites are scaled up?
i keep getting this error "The variable movePoint of Player has not been assigned. You probably need to assign the movePoint variable of the Player script in the inspector." and i have no idea what im supposed to do
Hey i have an issue. The collisions are only working on the X axis, not the Y, so I cant go through the side borders, but I can go through the top and bottom ones. Any ideas?
Super useful, thank you so much! One question that I had though. I set up the LayerMask for the tilemap colliders and that works beautifully. I was wondering if I could do similar for a non-tilemap layer, such as enemies so the player can't move through them too? I tried adding an Enemy layer to the mask in the inspector and setting the enemies to that layer; however, the player still walks through them but is still blocked by the tilemap colliders correctly. Any ideas?
My movepoint keeps getting "trapped" by the various colliders on my map - can anyone help? Is it possible I've set the tilemap colliders up wrong? I'm using edge colliders for my map boundaries, but the movepoint seems to pass beyond the boundary even though the player doesn't pass beyond the collider, but since the movepoint is outside, it gets "hooked" there and can't come back into the safe zone. The tilemap colliders also seems to interpret the shape of the pixel object rather than creating a box the size of a tile, and it creates narrow spaces where the player can't pass. For example, a bed in a room takes up one tile + a little bit of the tile above it and a little bit of the tile below it. So depending on the buffer I set, either I can't access the tiles above and below it at all, or the movepoint gets hooked into the bed collider. Not sure if this makes sense...
i had the same issue, this was my solution. On the tile layer you need to add a Tilemap collider 2D, a RigidBody2D and a Composite Collider 2D Tilemap collider 2D: Used by composite -> on RigidBody2D: BodyType -> Kinematic Composite Collider 2D: Geometry -> Polygons @ 11:55 you can see he has those aswell i hope this helps :)
Although not necessary you could also store the grid size into a variable and multiply the GetAxisRaw output by that. I like doing small things like that to improve readability instead of going back to the project after three months and wondering why you are multiplying by .5
hey, my character still passes through walls and stuff, i use a empty game object to wich i put some box colliders then assigned the whatblocksmovement Layer to, i cant use " normal" tilemap colliders because my map is made out of squares. Can anyone help me? thx
It works but well it doesn't it works half because my block is bit far away and than i cant move further even though i hvae enough space and when i make the circle smaller than it doesn't to the thing at all
If anyone has problems with the OverlapCircles not working to block player movement into "illegal" places as defined by your colliders on the stopsMovement layer, try the following: In the grid object child "Colliders" (or whatever you named it) that you use for defining where colliders should be, make sure Composite Collider 2D has Geometry Type set to Polygons, **not** Outlines. At least that worked for me on Unity 2020.1.
thank you for this, i had this exact issue. i changed the style from outline to polygons during testing to fix it, but i should have looked here first and saved my ass like 2 hours of frustration.
@@Taterzz Same here.
You're a lifesaver man! How did this comment just pop up just as I messed it up lol
i almost got happy seeing this comment, however it didn't work in my case, only horizontally, if i press vertical keys the player pass through walls :(.... Unity 2021.3.5f
this a time-saving comment! thanks for the knowledge
Great tutorial! Thank you
Here is a slightly refactored version of the PlayerController script:
public class PlayerController : MonoBehaviour {
[SerializeField]
private float speed = 5;
[SerializeField]
private Transform movePoint;
[SerializeField]
private LayerMask obstacleMask;
void Start() {
movePoint.parent = null; // Detach partent
}
void Update() {
float movementAmout = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, movePoint.position, movementAmout);
if (Vector3.Distance(transform.position, movePoint.position)
What does [SerializeField] do
thank you!!
@@sol15_ Already 3 years, I assume you already know it but, just in case, that does show you the values of a private and protected variable on the inspector so you don't have to change it on the code.
This video is simple in complexity, yet deep in depth.
This type of content is exactly what people need, thus you're a hero and I thank you!!!
I've been watching your tutorials for a long time and I have to say you're getting really better at condensing concepts. Not that the the older tuts were bad. I learned a lot from them, but this format is really helpful.
3:02 See when you say it, you're "game developer", when I say it I'm "A bad step-dad". Double standards.
Turn based strategy tutorial like Heroes of Might and magic
udemy.com/course/turn-based-strategy-game-development/learn/lecture/21513708?start=0#overview
took me a while lmao
The collision technique was really buggy for me so I placed four triggers around the character to detect obstacles instead. Thanks for the video!
hey bro, can i see your script of your four triggers? cause im newbie in the gameDev
you can send me on my email edgarlawrence96@gmail.com
much appreciatied :D
Still works perfectly in 2024(Unity 6.0). Thank you very much
Protip you can adjust the tile size by multiplying the axis in movePoint.position by your tile size
Woop woop! This is fantastic! =D
Thanks Sam :)
Sykoooo! 😁😁
@@gamesplusjames hey, is it ok for you to give me a hand?
that felling when your code works first time is awesome
Excellent tutorial, as always! Have you considered doing a tutorial on mouse-click based grid movement, with your movement range shown by highlighted tiles in your grid (e.g., for a turn-based game)? Even cooler if it also showed your attack range (e.g., for ranged or magic attacks). Thanks for all your excellent tutorials and courses (I've purchased 5 of them on Udemy)!
Awesome, you can also use that system in a reversed way to have a follower system. Every time I move, my character leaves a "token" which is tracked by my follower. The follower moves towards that token until he is on top of it. When I move again, the token's transform is equal to my current position and my follower moves towards that token again. I called the token "lastposition". Works surprisingly well.
this is the simplest grid movement I've ever watched so far. thank you :)
I bought your Udemy for RPG's but this is really what I was looking for.
I Figured It out! If You are Struggling with this issue too, Create an empty Object called player, then attach the movepoint and sprite to it.
ok this was the best tutorial I have seen so far, clean and easy. Loved it.
Honestly one of the best tutorials I've watched
Something I recommend is moving the overlapcircle check to be outside of the key check. Also put both x and y axis in the vector3.
Bro you're so good at explaining, what a rare gem
Awesome! I'd been struggling to find a good tutorial on this! Very simple and concise but still very clear and informative!
Could you make a video with more mechanics based on grid movement? Eg pushing and pulling objects that should also move on grid
What i am trying to do on my first go with unity, not having much luck :( I can easily force the object to move in a single direction, but i cant figure out a way to get the direction based on the side the object was triggered at.
Alright, that's a nice, easy and clean tutorial
thanks for making my dreams easier
If you are facing the problem of Input Delay,
Change Horizontal And Vertical Axis's Sensitivity to 10 and Gravity to 10 in
Edit>Project Settings>Input Manager
It will fix the issue
Fantastic work, you went into great detail at a comprehensive pace for others to follow along. That's not a common skillset; you're a great teacher!
The best explanation of if and else if. Thank you in advance!
Thank you u finally made it!!! It's been killing me I I stop making my game cause I couldn't figure out grid based movement
8: 27 after having tried this movement system, I am now convinced there potential for a rage game here somewhere.
Great tutorial, James! This was the first time I've done much with Unity and this was concise and easy to understand.
Love it! I'm happy that works in Isometric as well.
Oh I was looking exactly for this! Thanks for sharing!
afaik mathf.abs is more expensive than just getting the inputs into a vector and normalizing it, great vid :)
@2:00 so you totally skipped on how to create the moviePoint as a child under the player. it was just "ready" to go before you started making the video haha. In case anyone is wondering, right click on the left pane, "add object"
I recognize that voice! I did one of your platformer tuts a while back, awesome video btw, just what I needed, thanks! ;D
Thanks man! I've been looking for this!
Exactly what I needed in nice digestible pieces!
I made my own version of moveTowards, transform.position = (transform.position * moveSpeed + movePoint.position) / (1+moveSpeed); which I use because it's a bit smoother.
4:38 could you instead do
if (Input.GetAxisRaw("Horizontal") != 0f)
Is that inefficient in any way? Because that's what I've been doing for a while :P nice tutorial though!
That'll work nicely on keyboard for sure but if using a controller it be a little overly sensitive :)
You should probably use something like git, instead of a Zip hosted on Google Drive. Github is free.
Maybe I should! :D
very clear instructions and explanations. thank you!
This was so helpful thank you!
Have you had any luck getting this sort of movement in the "new" input version?
Thanks so much for the help, your video is very clear and well explained ! :D
If I could add one little tidbit...I think after you check distance, you should reset player transform to the new expected transform. If you are truly doing a grid, you can see that every movement makes the character more and more off the grid. Especially if you are nit-picky and like to put the final transform at the bottom. I was like "no! he put...the transform...at the top!!!!!! Whyyyyy!? he did his figuring after he did the transform!!! whyyyyy!?!?!" which is okay I just ran into the issue where everytime I would hit the button, the character was a little more off the grid. Teleporting him after reaching an okay error offset helped and is unnoticeable to the user.
this video is just what I wanted to learn. thanks!
Love the tutorial!
Like always, great explanation! very easy to understand and interesting...
thanks so much i thought its impossible lol. i think that movePoint event is a so genious idea.
Excellent explanation. You are Amazing
This is exactly what I needed! Thank you so much :)
Great video! So, what if we don't want the user to hold down movement, rather, they're limited to one tile movement per press similar to rogue-likes?
you could store the inputs in a variable and then check that when you're pressing input that it doesn't match what was pressed on the previous frame
For anyone stumbling across this comment and wanting a solution to this I would recommend making a bool that needs to be true whenever you move and every time you move start a co-routine setting that variable to false, then using WaitForSeconds() and put in the time you wan't to have between inputs, and then set it to true. This was a very easy solution to implement for me.
That’s actually a good idea I’m going to use that
serious life saver been searching for this for abit i am terrible with code XD
Helpful as always, thanks a lot!
So helpful. Thanks for the great videos.
Extremely helpful and to the point tutorial, thanks a lot!!
Can someone just please help me understand WHY does this work?? I mean, I followed the whole thing and it works like a charm, I just can't wrap my head around WHY it's actually working and the character is never landing outside the grid.
Thanks in advance!
It's set to move a specific distance and new movement cannot be requested until that requested movement has been completed. This limits the ability to move diagonally as well, as it is only allowed to execute one movement direction at a time. Here is an order of operations for you:
The movepoint teleports to a location that's specifically in the centre of a grind square.
The Player sprite moves toward the movepoint
When the player sprite and the movepoint have the same x, y values, a new movement for the movement can be done, restarting the cycle.
Hope this made sense
Inspired by Hopia Tale on mobile? I just found that game last week and this is what the entire game is based around. Cool tutorial might try it out later.
It's more inspired by classic RPG movement :) Can't say I've heard of Hopia Tale unfortunately :)
If you are having problems with the collisions, try to save the input axis value into variables and then use them in the rest of the code
//transform.position = Vector3.MoveTowards(transform.position, MovePoint.position, MoveSpeed * Time.deltaTime);
float horizontalInputValue = Input.GetAxisRaw("Horizontal");
float verticalInputValue = Input.GetAxisRaw("Vertical");
//if (Vector3.Distance(transform.position, MovePoint.position)
How come the grid size plays no role in this?
If I want the movement to be continuous like in pacman without needing to hold the key down, what do I need to change?
Turn based strategy tutorial like Heroes of Might and magic
udemy.com/course/turn-based-strategy-game-development/learn/lecture/21513708?start=0#overview
set the input to a vector2 variable and only update the variable when the input is not (0, 0)
its probably not that but you could try "re-parenting" the movePoint
This was amazing! Thank you for this. I do have a question as well; Is there a reason to use Vector3 over Vector2 in this case?
It looks like most of transform.position and movePoint.position require a Vector3
Crud... I'm also following Brackey's top down movement tutorial and now I can't figure out how to combine his code with this grid based code :l
I think that Brackey, as good as he is, does usually have his projects using pre-made assets. Like for my game engines class, I used a pre-made character controller asset to control the character. Though I am certain he has a video about grid-based movements, I'm uncertain if it's in the top-down series.
At the moment, while I have basic experiences with coding, I can't necessarily help you. And the best advice I could give you is to cross-reference this video and the Brackeys video, see if you can rewire the code to make movement more grid-based.
Really great video, it's what i was searching for!
Could you make a video about enemy player find system?
Thankl you a lot bro your videos are great!
awesome, can u please do a series of Unity for beginners? you have great teaching skills
Awesome tutorial! Thank you!
what if I want the hero to move only if he's facing the same direction of the input and just change direction standing still otherwise?
awesome! thanks man, excellent job
To anyone else with problems with the movePoint transform passing into or through things on the StopMovement layer - try changing the use of Time.deltaTime to Time.fixedDeltaTime, it helped me anyway!
I'm using the new input system. I've managed to make my player move and be animated. The problem is he moves only one grid square left, right, up, or down, but won't move around the "map." I cant figure out the solution...
are you setting the transform.position using = instead of +=? Using += will add the new vector to your position but just using = will set the position directly as your input :)
gamesplusjames I was looking at operators and wondering if that would fix it haha. I knew it was something simple. Thanks man!
I would love to know how to do this and interact with objects using unity's Isometric maps. I keep trying to detect objects using 2dRayCast but it never seems to work very well.
Great tutorial! question about the no-diagonal script: If I wanted to make it so that horizontal movement does not take precedence over vertical movement or vice versa how would you do it? I'm trying to make an rpgMaker style game where your most recent input is the one that takes priority Thanks!
Excellent! Thanks so much :)
How can i make the player that it continuously moves till it collides or another key is pressed but only turning at a grid?
hi, can you plz do a video showing how to do a board game on unity, where can the character choose to go or not to the other way? like a square with a line on de midle where they walk on it based on a dice movement..it would be really amazing ;v;
For some reason the movePoint still gets moved when theres an obstacle ahead. I did add a rigidbody and collider to it because I wanted gravity and otherwise it didn't work well.
This is such a great tutorial, exactly what i was looking for, thank you! I have a question though. How did you pull the player sprite out of that sprite sheet? I was trying to slice out the blue guy but then i messed up all my tiles. It seems like i can only get it to slice by 16x16 squares, but somehow in your project i get all the 16x16 tiles AND a 18x26 player?
Bro u are a hero
I am able to get the grid based movement going, and I am now on the step of animating. I am working on a Pokemon clone with this tutorial, so I want an animation going left, right, up, and down. Since this code is a bit complicated, I'm not quite sure how to tell the animator to play a walking left animation when I'm pressing left. Any advice would be much appreciated. Fantastic tutorial! :)
I had the same issue for a few days, what I ended up doing was watching some of his other videos, and adapted that animation system, and one that Brackeys(? maybe?). Basically it takes your input and turns that into something you can then put into the unity Animator blend tree. His tutorial used a bool for transition between idle and moving, and I had a 4 direction idle, so I just sent over the data and set a movement threshold I think. I'm really new at this so I'm sure there are a dozen better ways of doing this, but this is what I got to work for me.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TileMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public Transform movePoint;
public LayerMask whatStopsMovement;
public Animator animator;
//private bool playerMoving;
private Vector2 lastMove;
private Rigidbody2D myRigidBody;
Vector2 movement;
// Start is called before the first frame update
void Start()
{
movePoint.parent = null;
myRigidBody = GetComponent();
DontDestroyOnLoad(transform.gameObject);
}
// Update is called once per frame
void Update()
{
//playerMoving = false;
transform.position = Vector3.MoveTowards(transform.position, movePoint.position, moveSpeed * Time.deltaTime);
if (Vector3.Distance(transform.position, movePoint.position)
very good tutorial.
Great tutorial!!
Thank you very much!!!
excellent thank you!
Is there anyway that instead of using the keyboard inputs, I want it to be a mouse click. Loved the tutorial btw
google > unity api > input
I already tried replacing the inputs and lemme tell you, its not that easy.
@@zanereee why? Literally everything is laid out in front of you?
Sorry for not knowing but what is the Player Move Point exactly? Is it a sprite? An empty 2d object? I don't know what to click on Unity to make one.
Thanks for the tutorial james! One question.
What's the difference between Input.GetAxisRaw and Input.GetAxis?
I looked at the docs but I'm not exactly the most literate person so I want to clarify.
Does Raw mean it gives you ONLY -1 and 1
while GetAxis gives you floating point values like 0.98892?
Also... will this still work if the sprites are scaled up?
The GetAxisRaw is the raw input value from the input, no smooting. The GetAxis is slightly smoothed, which is not wanted in this case.
i keep getting this error "The variable movePoint of Player has not been assigned.
You probably need to assign the movePoint variable of the Player script in the inspector." and i have no idea what im supposed to do
Hey i have an issue. The collisions are only working on the X axis, not the Y, so I cant go through the side borders, but I can go through the top and bottom ones. Any ideas?
¿Podrías hacer un video aplicándolo a los enemigos?
How would a simple turn manager for movement work? One that let's a player take a turn and then lets all enemies take their turns.
The answer is: Event system
for some reason the animations aren't working for me. it freezes while the button is being held.
How can I make the player's head not collide with anything
Super useful, thank you so much! One question that I had though. I set up the LayerMask for the tilemap colliders and that works beautifully. I was wondering if I could do similar for a non-tilemap layer, such as enemies so the player can't move through them too? I tried adding an Enemy layer to the mask in the inspector and setting the enemies to that layer; however, the player still walks through them but is still blocked by the tilemap colliders correctly. Any ideas?
Excuse me, what template did you use to creating this project @gamesplusjames ?
My movepoint keeps getting "trapped" by the various colliders on my map - can anyone help? Is it possible I've set the tilemap colliders up wrong? I'm using edge colliders for my map boundaries, but the movepoint seems to pass beyond the boundary even though the player doesn't pass beyond the collider, but since the movepoint is outside, it gets "hooked" there and can't come back into the safe zone.
The tilemap colliders also seems to interpret the shape of the pixel object rather than creating a box the size of a tile, and it creates narrow spaces where the player can't pass. For example, a bed in a room takes up one tile + a little bit of the tile above it and a little bit of the tile below it. So depending on the buffer I set, either I can't access the tiles above and below it at all, or the movepoint gets hooked into the bed collider. Not sure if this makes sense...
I had the same problem, but u asked it 6 months ago and no answer :(
@@tixa4651 2 years
Great Tutorial but i cant seem to get the collision to work in 3d my player still goes through the walls..any idea why?
i had the same issue, this was my solution.
On the tile layer you need to add a Tilemap collider 2D, a RigidBody2D and a Composite Collider 2D
Tilemap collider 2D: Used by composite -> on
RigidBody2D: BodyType -> Kinematic
Composite Collider 2D: Geometry -> Polygons
@ 11:55 you can see he has those aswell
i hope this helps :)
@eloquentraccoon6795 How would that help in a 3D environment?
Can't you have it only when the Key is Down ?
I'd like to download your assets. It looks like no more upload
I reduced my grid size to 0.5
How can I make the character move 0.5, he still moves 1 and skips a grid
The GetAxisRaw("Horizontal")..... gives a value of 1. So divide that by half to get .5
Although not necessary you could also store the grid size into a variable and multiply the GetAxisRaw output by that. I like doing small things like that to improve readability instead of going back to the project after three months and wondering why you are multiplying by .5
I need help with the head, I don't want the head to collide with objects. Does anybody know how to fix this?
hey, my character still passes through walls and stuff, i use a empty game object to wich i put some box colliders then assigned the whatblocksmovement Layer to, i cant use " normal" tilemap colliders because my map is made out of squares. Can anyone help me? thx
How would an enemy use this grid movement to walk around
It works but well it doesn't it works half because my block is bit far away and than i cant move further even though i hvae enough space and when i make the circle smaller than it doesn't to the thing at all