我有一个正在制作的格斗游戏,而且我现在被RayCastAll卡住了,我不确定是什么原因导致了问题。 我有一个名为“朋克”的预制,您可以在其中选择另一个gameObject作为对手。在名为“punch”的动画的第二帧中(您可以在下面看到),我运行一个名为“PunchHit”的函数来表示一拳可能落在对手身上的确切时刻。它如下:RaycastAll来自预制件不会从另一个预制件接收对撞机
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,甚至用该面具施放它什么也不做。我是否错过了一些明显的东西,或者是引擎刚刚出现问题?
Here you can see the problem in action
您能否包含计算/设置'Pos1'和'Pos2'的代码?目前,您似乎没有包含所有相关的代码。 – Serlite
对不起,我已经找到了解决方案,我现在就发布它 –