- Home /
Can someone help me to find what I am doing wrong?(code attached)
The end result which I want is : user drags his finger on mobile screen to select tiles on which he wants the player to move . the player start moving as soon as user touches "endtile".
In the following code first I am storing the position of all the tiles touched by user in a list and then trying to move player through different points stored in list.
The code upto list storing is working fine but the function moveplayertopos(); is not working as desired. Please help me with some suggestions how to fix it or some other way to achieve the needed. After this my game will be complete.
Thank you
public class find_position_tomoveto : MonoBehaviour {
private List<Transform> tilepos = new List<Transform>();
private List<Transform> finaltilepos = new List<Transform>();
public GameObject player;
public float SpeedOfMovement=1f;
void Start () {
}
void FixedUpdate () {
if (Input.touchCount > 0)
{
if(Input.GetTouch(0).phase == TouchPhase.Began||Input.GetTouch(0).phase == TouchPhase.Moved )
{
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), -Vector2.up);
if (hit.collider != null)
{
if(hit.collider.tag=="tile")
{
tilepos.Add(hit.transform);
}
if (hit.collider.tag=="endtile")
{
tilepos.Add(hit.transform);
RemoveDuplicates();
printposition();
moveplayertopos();
}
}
}
}
}
void RemoveDuplicates(){
for (int i=0;i<tilepos.Count-1;i++)
{
finaltilepos.Add(tilepos[i]);
for (int j=i+1;j<tilepos.Count;j++)
{
if(tilepos[i].position==tilepos[j].position)
{
continue;
}
else
{
i=j-1;
break;
}
}
}
}
void printposition(){
for (int x=0;x<finaltilepos.Count;x++)
{
Debug.Log(finaltilepos[x].position);
}
}
void moveplayertopos(){
if (finaltilepos.Count > 0) {
for (int j=0; j<finaltilepos.Count; j++) {
player.transform.position = Vector3.MoveTowards (player.transform.position,finaltilepos[j].position, SpeedOfMovement * Time.deltaTime);
}
}
}
}
Answer by henry_jvx · Jun 14, 2017 at 08:11 AM
i don't know if this will solve the problem but you are setting the speed by: SpeedOfMovement * Time.deltaTime and you are calling it from "FixedUpdate()".
as i know. multiply speed by Time.deltaTime works when you call it from "Update()" because you need to set the speed based on framerate. but "FixedUpdate()" is a constant time loop. so, multiply speed by deltaTime may cause speed variation.