J'ai un petit soucis que je n'arrive pas à régler.
Je suis en train de créer un jeu 2D genre Bubble Saga.
Pour viser, je trace à l'aide de LineRenderer, une ligne symbolisant le parcours de la bulle de tir.
Il s'avère que par moment, le ligne s'arrête au premier rebond et par moment la ligne continue.
Je voudrais que la ligne soit continue jusqu'aux bulles visées qu'il y est rebond ou pas en permanence.
Voila l'image de ce que j'obtiens trop souvent
Et voilà l'image de ce que je voudrais en continue
Voilà le script
Code : Tout sélectionner
public class Tir : MonoBehaviour
{
public Bulle Bulle;
private LineRenderer LineRenderer;
private int reflections = 5;
private Ray2D ray;
List<Vector3> Cibles;
bool move;
int index;
void Start()
{
LineRenderer = GetComponent<LineRenderer>();
LineRenderer.material = Bulle.GetComponent<Renderer>().material;
}
void Update()
{
if (!move)
{
LineRenderer.enabled = true;
Cibles = new List<Vector3>();
Cibles.Add(Bulle.transform.position);
Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = (Vector2)((worldMousePos - transform.position));
direction.Normalize();
Bulle.transform.position = transform.position + (Vector3)direction * 0.4f + new Vector3(0, 0, -0.1f);
ray = new Ray2D(Bulle.transform.position, direction);
LineRenderer.positionCount = 1;
LineRenderer.SetPosition(0, Bulle.transform.position);
float remainingLenght = 10;
for (int i = 0; i < reflections; i++)
{
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, remainingLenght);
if (hit)
{
Vector2 point = hit.point;
if (hit.transform.tag == "Bord")
{
if (hit.transform.name == "BordD")
point += new Vector2(-0.2f, 0);
else if (hit.transform.name == "BordG")
point += new Vector2(0.2f, 0);
if (hit.transform.name == "BordH")
point += new Vector2(0, -0.2f);
}
LineRenderer.positionCount += 1;
LineRenderer.SetPosition(LineRenderer.positionCount - 1, point);
Cibles.Add((Vector3)point);// new Vector3(point.x, point.y, -0.1f));
remainingLenght -= Vector3.Distance(ray.origin, hit.point);
ray = new Ray2D(hit.point, Vector2.Reflect(ray.direction, hit.normal));
if (hit.transform.tag == "Bulle")
break;
}
else
{
LineRenderer.positionCount += 1;
LineRenderer.SetPosition(LineRenderer.positionCount - 1, ray.origin + ray.direction * remainingLenght);
}
}
}
}
}
https://drive.google.com/file/d/1zg1AlH ... sp=sharing
Si quelqu'un pouvait m'aider, ce serait super.
Ca n’empêche pas le jeu de tourner, mais si on tire alors que la ligne n'est pas complète, la bulle de tir s'arrête au bout de la ligne. Normal, je relève les points de rebond de la ligne pour déterminer le trajet de la bulle tirée.
Merci