预制件中的 RaycastAll 未从另一个预制件中拾取对撞机
RaycastAll from prefab is not picking up a collider from another prefab
我正在开发一款格斗游戏,但目前我被 RayCastAll 卡住了,我不确定是什么导致了这个问题。
我有一个名为 "punk" 的预制件,您可以在其中 select 另一个游戏对象作为对手。在名为 "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{
}
}
}
出于某种奇怪的原因,只有一个朋克可以击球。如果第二个朋克要增加他与第一个朋克的距离,他甚至可以在不击中第一个朋克的情况下攻击他,这让我认为朋克会将自己发出的射线投射记录为击中另一个朋克。然而,出于所有意图和目的,第二个朋克也可能不存在于第一个朋克中,none 它的射线根本没有记录它。
在我的 physics2d 设置中,我创建了 2 个图层,分别称为玩家 1 和玩家 2,即使使用该蒙版进行投射也什么都不做。我是不是遗漏了一些明显的东西,还是引擎出了故障?
解决了!我没有意识到有一个名为 Debug.DrawRay 的函数。本质上,我没有意识到射线和线的坐标不同。我出于测试目的绘制的线在局部 space 中有一个特定点作为它的第二个参数,与 drawray 一样,它是一个方向。知道了这一点,我就能够确定出拳的轨迹,就像之前一个朋克的出拳朝着完全疯狂的方向前进一样。
我正在开发一款格斗游戏,但目前我被 RayCastAll 卡住了,我不确定是什么导致了这个问题。 我有一个名为 "punk" 的预制件,您可以在其中 select 另一个游戏对象作为对手。在名为 "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{
}
}
}
出于某种奇怪的原因,只有一个朋克可以击球。如果第二个朋克要增加他与第一个朋克的距离,他甚至可以在不击中第一个朋克的情况下攻击他,这让我认为朋克会将自己发出的射线投射记录为击中另一个朋克。然而,出于所有意图和目的,第二个朋克也可能不存在于第一个朋克中,none 它的射线根本没有记录它。 在我的 physics2d 设置中,我创建了 2 个图层,分别称为玩家 1 和玩家 2,即使使用该蒙版进行投射也什么都不做。我是不是遗漏了一些明显的东西,还是引擎出了故障?
解决了!我没有意识到有一个名为 Debug.DrawRay 的函数。本质上,我没有意识到射线和线的坐标不同。我出于测试目的绘制的线在局部 space 中有一个特定点作为它的第二个参数,与 drawray 一样,它是一个方向。知道了这一点,我就能够确定出拳的轨迹,就像之前一个朋克的出拳朝着完全疯狂的方向前进一样。