Дрожит персонаж
Добавлено: 21 сен 2020, 19:10
Здравствуйте! Вообщем мне необходимо сделать движение персонажа только по оси Z и ограничением по координатам(т.е., например, больше 8-ми нельзя и меньше 2-ух нельзя). Впринципе более-менее работает то, что написано в скрипте, но когда мышь оставляешь в покое, то персонаж начинает дрожать. Дрожит он, я думаю, из-за того что переменная всегда меняется почему-то, не могу понять почему. Игрушка на андроид, именно под тач еще не делал. Прикладываю еще картинку, как предполагается правильно. По сути движение наверное на движение в пинг понге похоже. По левой части экрана человек водит палец вверх-вниз, ГГ следует за пальцем игрока. Как-то так. Еще соответственно если палец идет вверх, то проигрывается одна анимация, вниз - другая. Это в коде сделано и вроде работает, но нет проверки на состояние, когда палец удерживается на одном месте или отпущен.
Синтаксис:
Используется csharp
public void Move()
{
target = new Vector3(-9, 1.46f, charac.transform.position.z);
ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, ignoreLayers, terr))
{
hit.point = new Vector3(charac.transform.position.x, charac.transform.position.y, Mathf.Clamp(hit.point.z, zMin, zMax));
var MT = Vector3.MoveTowards(target, hit.point, moveSpeed * Time.deltaTime);
charac.transform.position = MT;
}
if (charac.transform.position.z < lastZ)
{
lastZ = charac.transform.position.z;
anim.SetBool("pos_char", false);
anim.SetBool("hold_pos_char", false);
}
else if (charac.transform.position.z > lastZ)
{
lastZ = charac.transform.position.z;
anim.SetBool("pos_char", true);
anim.SetBool("hold_pos_char", false);
}
}
{
target = new Vector3(-9, 1.46f, charac.transform.position.z);
ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, ignoreLayers, terr))
{
hit.point = new Vector3(charac.transform.position.x, charac.transform.position.y, Mathf.Clamp(hit.point.z, zMin, zMax));
var MT = Vector3.MoveTowards(target, hit.point, moveSpeed * Time.deltaTime);
charac.transform.position = MT;
}
if (charac.transform.position.z < lastZ)
{
lastZ = charac.transform.position.z;
anim.SetBool("pos_char", false);
anim.SetBool("hold_pos_char", false);
}
else if (charac.transform.position.z > lastZ)
{
lastZ = charac.transform.position.z;
anim.SetBool("pos_char", true);
anim.SetBool("hold_pos_char", false);
}
}
Скрытый текст: