Side movement 3d runner
Hello. In my 3d runner I'm moving chararcter without any force, so now I need to write code using MovePosition. For now in coroutines I change delta X position and in FixedUpdate move character.
Moving position:
m_playerPhysics.MovePosition(new Vector3(m_currentPositionX, m_jumpStartY + m_playerCollider.height / 2 + m_CurrentJumpHeight, 0));
Changing delta X:
private void LeftSwype()
{
//StopCoroutine(MoveRight());
StopAllCoroutines();
StartCoroutine(MoveLeft());
}
private void RightSwype()
{
//StopCoroutine(MoveLeft());
StopAllCoroutines();
StartCoroutine(MoveRight());
}
private IEnumerator MoveLeft()
{
var startPosX = m_currentPositionX;
float targetPosX = 0;
if (m_currentPositionX == 0)
{
targetPosX = -m_SideMovementLimit;
}
else if (startPosX > 0)
{
targetPosX = 0;
}
else
{
yield break;
}
while (true)
{
//m_currentPositionX = Mathf.Lerp(m_currentPositionX, targetPosX, m_SideMovementSpeed);
if (targetPosX == -m_SideMovementLimit && m_currentPositionX + m_SideMovementLimit < 0.05f)
{
m_currentPositionX = -m_SideMovementLimit;
yield break;
}
else if (targetPosX == 0 && m_currentPositionX < 0.05f)
{
m_currentPositionX = 0;
yield break;
}
m_currentPositionX -= m_SideMovementSpeed;
yield return null;
}
}
private IEnumerator MoveRight()
{
var startPosX = m_currentPositionX;
float targetPosX = 0;
if (m_currentPositionX == 0)
{
targetPosX = m_SideMovementLimit;
}
else if (startPosX < 0)
{
targetPosX = 0;
}
else
{
yield break;
}
while (true)
{
//m_currentPositionX = Mathf.Lerp(m_currentPositionX, targetPosX, m_SideMovementSpeed);
if (targetPosX == m_SideMovementLimit && m_SideMovementLimit - m_currentPositionX < 0.05f)
{
m_currentPositionX = m_SideMovementLimit;
yield break;
}
else if (targetPosX == 0 && -m_currentPositionX < 0.05f)
{
m_currentPositionX = 0;
yield break;
}
m_currentPositionX += m_SideMovementSpeed;
yield return null;
}
}
Is that a good way? Actually, also I have problems with pressing right when moving left. Sometimes moving just stops in the middle of action.
Comment