我正在用DS上的《勇者斗恶龙》英雄火箭煤泥重建一个运动系统。在该游戏中,玩家可以按住A按钮并在一个方向上伸展其黏液主角。松开A的同时松开A会将其朝该方向吊起。
这是它的样子的gif:
注意他如何斜向墙壁反弹。我的复制当前看起来像这样(忽略有问题的动画:P)
看起来不错!但是,如果我要对角撞墙,我只会向相反的方向后退,而不是向后反射。
这是我如何处理弹跳墙壁的代码。
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方法,但我不确定如何在当前代码中实现它。
答案 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;