Unity. почему код только один раз сработал? Uptade->GetKeyDown()

public static Vector3[] detD(float MaxR, float PositionX, float PositionY, int num)
   {
       Vector3[] fr = new Vector3[2*num];
       int gh = 0;
       for (int r = 0; r < 2*num; r++)
       {
           float bol = (r-gh) * 2 * MaxR / num;
           if (r == 0)
           {
               fr[r] = new Vector3(PositionX -  bol, PositionY,
                   Convert.ToSingle(Math.Sqrt(MaxR * MaxR -
                                              (PositionX -  bol) * (PositionX - bol))));
           } else if (r == 2*num-1)
           {
               fr[r] = new Vector3(PositionX - bol, PositionY,
                   Convert.ToSingle(Math.Sqrt(MaxR * MaxR -
                                              (PositionX - bol) * (PositionX - bol))));
           }
           else
           {
               fr[r] = new Vector3(PositionX - bol, PositionY,
                   Convert.ToSingle(Math.Sqrt(MaxR * MaxR -
                                              (PositionX - bol) * (PositionX -  bol))));
               fr[++r] = new Vector3(fr[r-1].x, 0, -fr[r-1].z);
               gh++;
           }
       }

       return fr;
   }

   private  Vector3[] gt = detD(6, 6, 3, 20);
   private int numberSloat = 0;
   public float MouseSpeed = 100f;
   private float xrotation = 0f;
   private float yrotation = 0f;
   private float zrotation = 0f;
   public float MaxX;
   public float MaxZ;
   public float speedMh;
   private void Update()
   {
       int fr=0;
       if (Input.GetKey("x"))
       {
           float MouseX = Input.GetAxis("Mouse X") * MouseSpeed * Time.deltaTime;
           float MouseY = Input.GetAxis("Mouse Y") * MouseSpeed * Time.deltaTime;
           xrotation -= MouseX;
           yrotation -= MouseY;
           xrotation = Mathf.Clamp(xrotation, -90f, 90f);
           yrotation = Mathf.Clamp(yrotation, -90f, 90f);
           transform.rotation = Quaternion.Euler(yrotation, -xrotation, 0f);
       }

       if (Input.GetKeyDown(KeyCode.A))
       {
           transform.position = gt[fr++];
       }
   }

во многих случаях я сталкиваюсь с этой проблемой. Код работает только 1 раз

 if (Input.GetKeyDown(KeyCode.A))
        {
            transform.position = gt[fr++];
        }

этот часть не работает многократно


Ответы (1 шт):

Автор решения: CrazyElf
private void Update()
{
   int fr=0;

   // ...

   if (Input.GetKeyDown(KeyCode.A))
   {
       transform.position = gt[fr++];
   }
}

У вас fr обнуляется каждый раз при вхождении в функцию и transform.position получает одно и то же значение при нажатии клавиши, fr у вас всегда тут равно 0.

→ Ссылка