How To Create Dot Direction When Pressed?

Hello, I’m beginner to C# and still learning this week. I want to create some simple game project for mobile.

I want to create dot direction like this when player pressed

But it never happen when I drag my mouse pointer.

Here direction dot effect scripts

using UnityEngine;

public class PlayerVFX : MonoBehaviour
{

    public GameObject dotPrefabs;

    public int dotAmount;

    float m_dotGaps;

    GameObject[] m_dotArrays;
    // Start is called before the first frame update
    void Start()
    {
        m_dotGaps = 1f
            / dotAmount;

        Debug.Log(m_dotGaps);

        SpawnDOts();
    }
void SpawnDOts()

    {
        m_dotArrays = new GameObject[dotAmount];

        for (int i = 0; i < dotAmount; i++)
        {
            GameObject _dot = Instantiate(dotPrefabs);
            _dot.SetActive(false);
            m_dotArrays[i] = _dot;
        }       
    }
public void SetDotPos(Vector3 startPos, Vector3 endPos)
    {
        for (int i = 0; i < dotAmount; i++)
        {
            Vector3 _targetPos = Vector2.Lerp(startPos,endPos, (i +1) * m_dotGaps);

            m_dotArrays[i].transform.position = _targetPos;
           
        }
    }

public void DotLineSwitchActiveState(bool state)
    {
        for (int i = 0; i < dotAmount; i++)
        {
            m_dotArrays[i].SetActive(state);
        }
    }
}

And this playercontroller scripts

using UnityEngine;

public class PlayerController : MonoBehaviour
{
  public InputData inputData;
  public float moveSpeed;
  Vector3 m_clickedPos;
  Vector3 m_releasePos;
  Vector3 m_dir;

  Rigidbody2D m_rigid2D;

  Camera m_cam;

  PlayerVFX m_playerVFX;


void Start()

    {
   
        GetComponent();
    }

void GetComponent()

    {
        m_rigid2D = GetComponent<Rigidbody2D>();
        m_playerVFX = GetComponent<PlayerVFX>();

        m_cam = FindObjectOfType<Camera>();
    }

void Update()

    {
        HandleMovement();
    }

void HandleMovement()
    {
        if(inputData.isPressed == true)

            {
                m_clickedPos = m_cam.ScreenToWorldPoint(Input.mousePosition);
                m_clickedPos = new Vector3(m_clickedPos.x, m_clickedPos.y,0f);

                ResetPlayerPos();

                m_playerVFX.DotLineSwitchActiveState(true);
            }

        if(inputData.isHeld == true)
            {
                m_playerVFX.SetDotPos(m_clickedPos, m_cam.ScreenToWorldPoint(Input.mousePosition));
            }   

         if(inputData.isReleases == true)

            {
                m_releasePos = m_cam.ScreenToViewportPoint(Input.mousePosition);
                m_releasePos = new Vector3(m_releasePos.x, m_releasePos.y,0f);

                m_playerVFX.DotLineSwitchActiveState(false);

                calculateDirection();
                MovePlayerInDir();
            }
    }
void calculateDirection()
{
    m_dir = (m_releasePos - m_clickedPos).normalized;   
}   
void MovePlayerInDir()
    {
        m_rigid2D.velocity = m_dir * moveSpeed;
    }
void ResetPlayerPos()

    {
        transform.position = m_clickedPos;
        m_rigid2D.velocity = Vector3.zero;
    }

}

Thanks for your advice and sorry for my english :slight_smile:

Your code looks fine, so I recreated your code in Unity and it does indeed work. Double check your “InputData”, and see if your Console has any errors.

This is the only function I changed:

void HandleMovement()
{
    if (Input.GetMouseButtonDown(0))
    {
        m_clickedPos = m_cam.ScreenToWorldPoint(Input.mousePosition);
        m_clickedPos = new Vector3(m_clickedPos.x, m_clickedPos.y, 0f);

        ResetPlayerPos();

        m_playerVFX.DotLineSwitchActiveState(true);
    }

    if (Input.GetMouseButton(0))
    {
        m_playerVFX.SetDotPos(m_clickedPos, m_cam.ScreenToWorldPoint(Input.mousePosition));
    }

    if (Input.GetMouseButtonUp(0))
    {
        m_releasePos = m_cam.ScreenToViewportPoint(Input.mousePosition);
        m_releasePos = new Vector3(m_releasePos.x, m_releasePos.y, 0f);

        m_playerVFX.DotLineSwitchActiveState(false);

        calculateDirection();
        MovePlayerInDir();
    }
}