从墙上弹跳/反射我的玩家

时间:2018-08-03 03:46:27

标签: c# unity3d vector

我正在用DS上的《勇者斗恶龙》英雄火箭煤泥重建一个运动系统。在该游戏中,玩家可以按住A按钮并在一个方向上伸展其黏液主角。松开A的同时松开A会将其朝该方向吊起。

这是它的样子的gif:

The bouncy movement I'm looking for

注意他如何斜向墙壁反弹。我的复制当前看起来像这样(忽略有问题的动画:P)

enter image description here

看起来不错!但是,如果我要对角撞墙,我只会向相反的方向后退,而不是向后反射。

这是我如何处理弹跳墙壁的代码。

IEnumerator wallBounce(Vector2 hitVelocity)
{
    playerAnimator.enabled = true;

    yield return new WaitForSeconds(.3f);
    playerAnimator.CrossFade("Walking " + curDirection, 0); // place holder animation
    pVelocity = Vector2.Scale(-pVelocity,new Vector2(0.25f,0.25f));
    endPos = transform.position + new Vector3(pVelocity.x, pVelocity.y);

    transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
    curState = state.blasting;

    transform.position = Vector3.MoveTowards(transform.position, endPos, 5f * Time.deltaTime);

}

我了解Unity中的Vector3.Reflect方法,但我不确定如何在当前代码中实现它。

1 个答案:

答案 0 :(得分:0)

我似乎已经做到了。

我得到这样的反射矢量:

Vector3 reflectedVelocity = Vector3.Reflect(pVelocity*.5f, foundHit.normal);

然后将其作为hitVelocity传递给wallBounce。                 StartCoroutine(wallBounce(reflectedVelocity));

然后我更改了这一行:

endPos = transform.position + new Vector3(pVelocity.x, pVelocity.y);

进入

endPos = transform.position + hitVelocity;