- Home /
Incorrect usage of Vector3.Dot?
Hello, I am trying to make a game similar to Rimworld or Prison Architect, so I have a AI controlled sprite character with 4 different sprites for each main direction and I'm currently trying to calculate the target direction via Vector3.Dot and then assign the correct sprite:
void Update()
{
float dotUp = Vector3.Dot(_navMeshAgent.destination - _thisTransform.position, Vector3.forward);
float dotRight = Vector3.Dot(_navMeshAgent.destination - _thisTransform.position, Vector3.right);
if(dotUp > 0.8f)
{
// walking up
spriteObject.GetComponent<SpriteRenderer>().sprite = sprite_Back;
}
else if(dotUp < -0.8f)
{
// walking down
spriteObject.GetComponent<SpriteRenderer>().sprite = sprite_Front;
}
else if(dotRight > 0.1f)
{
// walking right
spriteObject.GetComponent<SpriteRenderer>().sprite = sprite_Right;
}
else if(dotRight < -0.1f)
{
// walking left
spriteObject.GetComponent<SpriteRenderer>().sprite = sprite_Left;
}
}
The problem is that if the character has to change direction from left to right or vice versa and if he runs a bit up or down diagonally, he ends up looking up or down first before watching right/left. Is there a way that I can use the Vector3.Dot product to make it behave as it should?
Here's a Web Player demo which should clarify what I mean: WebPlayerDemo
Your answer
Follow this Question
Related Questions
How do I transform the position of my cube AWAY from the larger cube its attached to? 0 Answers
[2D] Object at X distance to Y direction from point 1 Answer
2D Sprite in a 3D Game 1 Answer
Fanning out projectiles depending on direction 1 Answer
2 Objects Moving in the Same Direction, which is in front and behind? 1 Answer