je suis actuellement en train de developper un petit jeu de plateau a deplacement case par case et je souhaiterai mettre en evidence les cases accessibles par le joueur a chaque tour (cases autour de la position du joueur dont la distance est inferieure ou egale a un entier).
Pour cela j'utilise donc les raycast d'Unity, j'ai donc reussi a imaginer une partie d'algo qui me permet pour l'instant de trouver les cases autours du joueur mais sulement pour un quart du cercle et je fais donc appelle a votre aide pour m'aider a generaliser cet algo pour qu'il fasse un tour complet.
Vector3 targetRay = new Vector3();
Vector3 directionRay = new Vector3();
//build a ray with the origin equals to the current node and direction equals to one of the basic vectors
for(int j = currentPm; j > 0; j--)
{
for(int i = 0; i < j + 1; i++)
{
//create a ray from the camera to a position on the ground which is reachable for the player
targetRay = new Vector3(players[tour%nbPlayer].transform.position.x, -0.15f, players[tour%2].transform.position.z);
directionRay = (j - i) * movement[0] + i * movement[3];
targetRay += directionRay;
Debug.Log(targetRay);
targetRay = Camera.main.WorldToScreenPoint(targetRay);
ray = Camera.main.ScreenPointToRay (targetRay);
//store the index of the layer we want to cast the ray on
int layerMask = 1 << 8;
//if the ray hits something in the given layer
if (Physics.Raycast(ray, out hit, 100, layerMask))
{
Debug.Log("hit");
//if the ray touch the ground
if (hit.collider.tag == "Ground")
{
Debug.Log ("Ground");
//set the material of this case to the hilight material
GameObject caseHitted = hit.collider.gameObject;
caseHitted.renderer.material = newMaterial;
}
}
}
}
- Edité par Zboubz 9 décembre 2014 à 2:12:55
https://github.com/Zboub
Algorithme pour trouver des cases autour d'une pos
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.