рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдПрдХрддрд╛ рдЧреЗрдВрдж рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ 2d

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдпрд╣ рд▓реЗрдЦ рдПрдХрддрд╛ рдореЗрдВ рдЧреЗрдВрдж рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред рдПрдХрддрд╛ рд╕рдВрд╕реНрдХрд░рдг 2019.0.6f

рд╣рдо рд▓рд╛рдЗрди рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдирд░реЗрдВрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓рд╛рдЗрдирд░реЗрдВрдбрд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВ:



рдЬрд┐рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рд░реЗрдЦрд╛ рдореЛрдЯрд╛рдИ
  2. рд░реЗрдЦрд╛ рдХрд╛ рд░рдВрдЧ
  3. рд╕рд╛рдордЧреНрд░реА

2 рдбреА рдореЗрдВ рд▓рд╛рдЗрдирд░реЗрдВрдбрд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "рд╕реНрдкреНрд░рд╛рдЗрдЯ / рдбрд┐рдлреЙрд▓реНрдЯ" рд╢реЗрдбрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рдПрдХ рдмреЙрд▓рдЯреНрд░реИрдХреНрдЯрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

рдХреНрд╖реЗрддреНрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
public class TrajectoryRenderer : MonoBehaviour
{
      [SerializeField] LineRenderer lineRenderer; //  LineRenderer
      [SerializeField] int lineCount; // ,  ,     
      [SerializeField] float lineLenght; // 
      [SerializeField] Ball ball; //   
}


рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рд▓рд╛рдЗрдирд░реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рдЬреА  рд╢реВрдиреНрдп  рдкреНрд░рд╛рд░рдВрдн ( )
{
      рд▓рд╛рдЗрдирд░реЗрдВрдбрд░ ред positionCount  =  lineCount ;
}

рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЕрдкрдбреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рджреБрдирд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдореЗрдВ рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХреИрдорд░рд╛ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕реНрдХреНрд░реАрдирдЯреНрд╡реЛрд░реНрдбрдкреЙрдЗрдВрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рд╡реЗрдХреНрдЯрд░ 2 рдорд╛рдЙрд╕рдкреЛрд╕  =  рдХреИрдорд░рд╛ ред рдореБрдЦреНрдп ред ScreenToWorldPoint ( рдЗрдирдкреБрдЯ ред рдорд╛рдЙрд╕рдкреЛрдЬрд┐рд╢рди ) ;

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЧреЗрдВрдж рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Vector2 рджрд┐рд╢рд╛  =  mousePos  -  ( Vector2 ) рдХреЛ рдмрджрд▓рдиреЗ ред рд╕реНрдерд┐рддрд┐ ;
рджрд┐рд╢рд╛ ред рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд ( ) ;

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЧреЗрдВрдж рдХреА рдЧрддрд┐ рдХреЗ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдмреЙрд▓ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред рдЗрд╕рдореЗрдВ, рд╣рдо рдЗрд╕рдХреА рдЧрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджрд╛рдПрдВ рдорд╛рдЙрд╕ рдмрдЯрди рджрдмрд╛рдХрд░ рдЧреЗрдВрдж рдХреЛ рджрд┐рдП рдЧрдП рдЧрддрд┐ рд╕реЗ рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗред

рдмреЙрд▓ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ
public class Ball : MonoBehaviour
{
    Rigidbody2D rb;
    [SerializeField] float velocityScaler;
    public float velocity;
 
    Vector2 mousePos;
 
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
 
    private void Update()
    {
        mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        velocity = Vector2.Distance(transform.position, mousePos) * velocityScaler;
 
        if (Input.GetMouseButtonUp(0))
        {
            Vector2 direction = (mousePos - (Vector2)rb.transform.position);
            direction.Normalize();
            rb.velocity = direction * velocity;
        }
    }
}


рдЧреЗрдВрдж рдХреА рдЧрддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг
var vx = ball.velocity * direction.x;
var vy = ball.velocity * direction.y;


рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд▓рд╛рдЗрдирд░реЗрдВрдбрд░ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдмрд┐рдВрджреБ рд╕реНрдерд┐рддрд┐
for (int i = 0; i < lineCount; i++)
{
      float t = i * lineLenght;
      var nextPos = new Vector2(vx * t, vy * t - (-Physics2D.gravity.y * t*t) / 2);
      lineRenderer.SetPosition(i, (Vector2)transform.position + nextPos);
}


рдкреВрд░рд╛ рдХреЛрдб рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣рд╛рдБ
public class BallTrajectory : MonoBehaviour
{
      [SerializeField] LineRenderer lineRenderer;
      [SerializeField] int lineCount;
      [SerializeField] float lineLenght;
      Ball ball;
 
      private void Start()
      {
            ball = GetComponent<BallController>();
            lineRenderer.positionCount = lineCount;
      }
 
      private void Update()
      {
            Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 direction = mousePos - (Vector2)transform.position;
            direction.Normalize();
 
            var vx = ball.velocity * direction.x;
            var vy = ball.velocity * direction.y;
 
            for (int i = 0; i < lineCount; i++)
            {
                  float t = i * 0.1f;
                  var nextPos = new Vector2(vx * t, vy * t - (-Physics2D.gravity.y * t*t) / 2);
                  lineRenderer.SetPosition(i, (Vector2)transform.position + nextPos);
            }
      }
 
}


рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ



рд╕реНрдкреНрд░рд╛рдЗрдЯ looneybits рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ред

All Articles