Search Unity

Need help with Multiple Line renderers..

Discussion in 'Scripting' started by SimasS, Jan 24, 2015.

  1. SimasS

    SimasS

    Joined:
    Jan 4, 2015
    Posts:
    4
    Hi guys, so I'm trying to create a shotgun for my game. The rays are working and enemies get damaged in radius of -3 +3, but I dont know how to create a line renderer for each "bullet".

    This allows me to shoot rays:

    Code (CSharp):
    1. void Shoot ()
    2.     {
    3.         Vector3 test1 = new Vector3 (0, 0, 2);
    4.         Vector3 test2 = new Vector3 (0, 0, -2);
    5.         Vector3 test3 = new Vector3 (0, 0, 3);
    6.         Vector3 test4 = new Vector3 (0, 0, -3);
    7.         Vector3 test5 = new Vector3 (0, 0, 1);
    8.  
    9.  
    10.         shootRay.origin = transform.position;
    11.         shootRay.direction = transform.forward;
    12.         shootRay2.origin = transform.position + test1;
    13.         shootRay2.direction = transform.forward;
    14.         shootRay3.origin = transform.position + test2;
    15.         shootRay3.direction = transform.forward;
    16.         shootRay4.origin = transform.position + test3;
    17.         shootRay4.direction = transform.forward;
    18.         shootRay5.origin = transform.position + test4;
    19.         shootRay5.direction = transform.forward;
    20.         shootRay6.origin = transform.position + test5;
    21.         shootRay6.direction = transform.forward;
    22. }
    I have created few different Line Renderers in my prefabs folder and I want to use them in the array which I made:

    Code (CSharp):
    1. public LineRenderer[] lines;
    P.S. When I put my Line Renderers to this array and start the game - they disappear for some reason...

    So the question is: how do I get my line renderers to do this :

    Code (CSharp):
    1. Line1.enabled = true;
    2. Line1.SetPosition (0, transform.position);
    3. Line1.SetPosition (1, shootRay.origin + shootRay.direction * range);
     
    Last edited: Jan 24, 2015
  2. SimasS

    SimasS

    Joined:
    Jan 4, 2015
    Posts:
    4
    so I'm still trying to get multiple line renderers..

    I've tried creating a list of line renderers and add gameobject prefabs with line renderers in them to the list.

    Code (CSharp):
    1. LineRenderer line1;
    2. public LineRenderer[] lines;
    3.  
    4. void Awake ()
    5. {
    6.    line1 = lines[0].gameObject.GetComponent<LineRenderer>();
    7. }
    8.  
    9. void Shoot ()
    10. {
    11.     line1.enabled = true;
    12.     line1.SetPosition (0, transform.position);
    13.     line1.SetPosition (1, shootRay.origin + shootRay.direction * range);
    14. }
    Compiler doesn't give any errors, but no lines are being created.

    I also tried adding my gameobjects with line renderers to my weapon as children and then calling them:

    Code (CSharp):
    1. line1 = GetComponentInChildren<LineRenderer>();
    which works, but I can only get 1 line renderer this way..
     
    Last edited: Jan 26, 2015
  3. SimasS

    SimasS

    Joined:
    Jan 4, 2015
    Posts:
    4
    Ok finally I managed to get it working....

    Code (CSharp):
    1.         GameObject Line1;
    2.     GameObject Line2;
    3.     GameObject Line3;
    4.     GameObject Line4;
    5.     GameObject Line5;
    6.     GameObject Line6;
    7.     LineRenderer line1;
    8.     LineRenderer line2;
    9.     LineRenderer line3;
    10.     LineRenderer line4;
    11.     LineRenderer line5;
    12.     LineRenderer line6;
    13.         Ray shootRay1;
    14.     Ray shootRay2;
    15.     Ray shootRay3;
    16.     Ray shootRay4;
    17.     Ray shootRay5;
    18.     Ray shootRay6;
    19.  
    20. void Awake ()
    21. {
    22.  
    23.         Line1 = GameObject.Find ("Line1");
    24.         line1 = Line1.GetComponent<LineRenderer> ();
    25.        
    26.         Line2 = GameObject.Find ("Line2");
    27.         line2 = Line2.GetComponent<LineRenderer> ();
    28.  
    29.         Line3 = GameObject.Find ("Line3");
    30.         line3 = Line3.GetComponent<LineRenderer> ();
    31.  
    32.         Line4 = GameObject.Find ("Line4");
    33.         line4 = Line4.GetComponent<LineRenderer> ();
    34.        
    35.         Line5 = GameObject.Find ("Line5");
    36.         line5 = Line5.GetComponent<LineRenderer> ();
    37.        
    38.         Line6 = GameObject.Find ("Line6");
    39.         line6 = Line6.GetComponent<LineRenderer> ();
    40. }
    41.  
    42. void Shoot ()
    43. {
    44.         Vector3 test1 = new Vector3 (0, 0, 2);
    45.         Vector3 test2 = new Vector3 (0, 0, -2);
    46.         Vector3 test3 = new Vector3 (0, 0, 3);
    47.         Vector3 test4 = new Vector3 (0, 0, -3);
    48.         Vector3 test5 = new Vector3 (0, 0, 1);
    49.  
    50.  
    51.         shootRay1.origin = transform.position;
    52.         shootRay1.direction = transform.forward;
    53.         shootRay2.origin = transform.position + test1;
    54.         shootRay2.direction = transform.forward;
    55.         shootRay3.origin = transform.position + test2;
    56.         shootRay3.direction = transform.forward;
    57.         shootRay4.origin = transform.position + test3;
    58.         shootRay4.direction = transform.forward;
    59.         shootRay5.origin = transform.position + test4;
    60.         shootRay5.direction = transform.forward;
    61.         shootRay6.origin = transform.position + test5;
    62.         shootRay6.direction = transform.forward;
    63.  
    64.         timer = 0f;
    65.         line1.enabled = true;
    66.         line1.SetPosition (0, transform.position);
    67.         line1.SetPosition (1, shootRay1.origin +              shootRay1.direction * range);
    68.  
    69.         line2.enabled = true;
    70.         line2.SetPosition (0, transform.position);
    71.         line2.SetPosition (1, shootRay2.origin + shootRay2.direction * range);
    72.  
    73.         line3.enabled = true;
    74.         line3.SetPosition (0, transform.position);
    75.         line3.SetPosition (1, shootRay3.origin + shootRay3.direction * range);
    76.    
    77.         line4.enabled = true;
    78.         line4.SetPosition (0, transform.position);
    79.         line4.SetPosition (1, shootRay4.origin + shootRay4.direction * range);
    80.        
    81.         line5.enabled = true;
    82.         line5.SetPosition (0, transform.position);
    83.         line5.SetPosition (1, shootRay5.origin + shootRay5.direction * range);
    84.        
    85.         line6.enabled = true;
    86.         line6.SetPosition (0, transform.position);
    87.         line6.SetPosition (1, shootRay6.origin + shootRay6.direction * range);
    88. }
    89.  
    probably not the most efficient coding.. o_O
     
  4. djfunkey

    djfunkey

    Joined:
    Jul 16, 2012
    Posts:
    201
    Use Arrays or Lists in your code, it will optimize it 10x better
     
    ZO5KmUG6R likes this.
  5. SimasS

    SimasS

    Joined:
    Jan 4, 2015
    Posts:
    4
    Hey djfunkey. I've tried creating an array of line renderers like this:

    Code (CSharp):
    1. LineRenderer line1;
    2. public LineRenderer[] lines;
    3. void Awake ()
    4. {
    5.    line1 = lines[0].gameObject.GetComponent<LineRenderer>();
    6. }
    7. void Shoot ()
    8. {
    9.     line1.enabled = true;
    10.     line1.SetPosition (0, transform.position);
    11.     line1.SetPosition (1, shootRay.origin + shootRay.direction * range);
    12. }
    But I couldnt get any lines rendered at all. Could you help me setting it up?