当打桨球是反弹奇怪。
private Vector3 direction;
private void Start()
{
direction = transform.up;
}
private void FixedUpdate()
{
transform.Translate(direction * (Time.deltaTime * BallManager.Instance.initialBallSpeed));
}
private void OnCollisionEnter(Collision col)
{
if (col.gameObject.CompareTag("Paddle"))
{
var cp = col.contacts[0];
direction = Vector2.Reflect(direction, PaddleScript.Instance.transform.position.normalized);
}
}
我想使反弹总是以相同的力量向上和向一侧取决于命中点。
1条答案
按热度按时间jmo0nnb31#
首先,当使用物理时,你根本不应该通过
Transform
。您甚至根本不需要此组件...为什么不简单地
Gravity Scale
-〉0
)Linear Drag
-〉0
)PhysicsMaterial2D
,并将bounciness
设置为1
,将摩擦力设置为0
=〉默认情况下,它应该已经按照预期运行。
否则我会将您的代码更改为
或者如果你想根据球击中球拍的位置来增加方差,我会在球拍的每个尖端放一个对象,然后你可以
检查你的打击接触是否更接近左(0)或右(1)尖端或正好在中心(0.5),并根据这个因素添加一些最小/最大Angular 偏移到向量.例如,使用plain reflect像以前一样,当正好在中心时,然后根据上面的偏移因素添加一些旋转,例如,使用
如果你愿意,你甚至可以完全删除
Reflect
,然后不添加旋转的方向,而是硬替换为一个新的方向基于相同的lerp之前