我正在进行一场正在进行的格斗游戏,而且我现在卡在了RayCastAll,我不确定是什么导致了这个问题。 我有一个名为“朋克”的预制件,你可以选择另一个游戏对象作为对手。在名为“punch”的动画的第二帧(你可以在下面看到)中,我运行一个名为“PunchHit”的函数来表示拳击可能落在对手身上的确切时刻。它如下:
void PunchHit(){
var xPos = transform.position.x;
var yPos = transform.position.y;
// This line renders fine, no matter the gameObjects' facing direction, so it is definitely striking in the right direction
Debug.DrawLine(Pos1,Pos2, Color.white, 1, false);
RaycastHit2D[] hits = Physics2D.RaycastAll(Pos1, Pos2);
foreach(RaycastHit2D hit in hits){
if (hit.collider != null){
if (hit.collider.gameObject == opponent) {
if( hit.collider.gameObject.tag == "Fighter"){
var enemy = hit.collider.gameObject;
Debug.Log("I am " + gameObject.name + " and I hit "+hit.collider.gameObject.name);
enemy.GetComponent<Animator>().Play("smacked", -1, 0f);
enemy.GetComponent<Rigidbody2D>().AddForce(new Vector2(1500 * direction, 2500));
AudioSource audio = gameObject.GetComponent<AudioSource>();
audio.Play();
}
}
}
else{
}
}
}
由于一些奇怪的原因,只有一个朋克可以攻击。如果第二个朋克要增加他与第一个朋克的距离,他甚至可以在没有击中他的情况下敲击第一个朋克,这让我认为朋克将光线投射从其自身打击为撞击另一个朋克。然而,对于所有意图和目的,第二个朋克也可能不存在于第一个,它的光线根本没有注册它。 在我的physics2d设置中,我创建了2个层,称为播放器1和播放器2,甚至使用该掩码进行投射,它什么都不做。我错过了一些明显的东西,或者发动机是否只是故障?
答案 0 :(得分:0)
解决了!我没有意识到有一个名为Debug.DrawRay的函数。本质上,我没有意识到光线和线条的坐标不同。我为测试目的而绘制的线在局部空间中有一个特定的点,因为它是第二个参数,与drawray一样,它是一个方向。知道了这一点,我能够确定拳击的轨迹,就像之前一个朋克的拳头在完全狂野的方向上一样。