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