【发布时间】:2018-03-03 09:59:37
【问题描述】:
基本上我的代码运行良好,一切都很好。我唯一的问题是角色正在改变位置是从这一行开始的几秒钟
float perc = currentLerpTime / lerpTime;
var _CurrentPosition = gameObject.transform.position.x;
var DesiredPosition = Mathf.Lerp (_CurrentPosition, _CurrentPosition + evadeForce, perc);
gameObject.transform.position = new Vector2 (DesiredPosition, gameObject.transform.position.y);
上面的代码获取当前位置然后 lerps 到新位置然后应用它。但它发生得太快了,就像玩家正在消失一样。相反,我希望它慢一点。
基本上不是在 0.1 秒内从 A 到 B,我希望它在 1 秒内从 A 到 B。
这里是完整的代码:
IEnumerator _EvadeAttacks()
{
Physics2D.IgnoreLayerCollision(playerLayer, EnemyLayer, true);
currentLerpTime = 0f;
currentLerpTime += Time.deltaTime;
if (currentLerpTime > lerpTime) {
currentLerpTime = lerpTime;
}
if (!evadeLeft)
{
Debug.Log ("workingright");
float perc = currentLerpTime / lerpTime;
var _CurrentPosition = gameObject.transform.position.x;
var DesiredPosition = Mathf.Lerp (_CurrentPosition, _CurrentPosition + evadeForce, perc);
gameObject.transform.position = new Vector2 (DesiredPosition, gameObject.transform.position.y);
hasEvaded = true;
} else if (evadeLeft)
{
Debug.Log ("workingleft");
float perc = currentLerpTime / lerpTime;
var _CurrentPosition = gameObject.transform.position.x;
var DesiredPosition = Mathf.Lerp (_CurrentPosition, _CurrentPosition - evadeForce, perc);
gameObject.transform.position = new Vector2 (DesiredPosition, gameObject.transform.position.y);
hasEvaded = true;
}
canWalk = true;
yield return new WaitForSeconds(SecondsToWaitForEvadeCollider);
Physics2D.IgnoreLayerCollision(playerLayer, EnemyLayer, false);
yield return new WaitForSeconds (SecondsToWaitForEvadeReset);
hasEvaded = false;
}
【问题讨论】: