Hi Everyone, I’ve got a fighting game I’m working on, and I’m stuck at the moment with RayCastAll and I’m not sure what’s causing the problem.
I have a prefab called “punk” in which you can select another gameObject as an opponent. At the second last frame of an animation named “punch” (which you can see below) I run a function named “PunchHit” to signify the exact moment the punch potentially lands on an opponent. it goes as follows:
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{
}
}
}
For some strange reason, only one of the punks is strike-able. If the second punk were to increase his distance to the first, he can even strike the first without hitting him, which leads me to think that the punk registers the raycast striking from itself as striking the other punk. for all intents and purposes, however, the second punk might as well not exist to the first, none of it’s rays register it at all.
In my physics2d settings I’ve created 2 layers called player 1 and player 2 and even casting with that mask it does nothing. am I missing something obvious or is the engine just glitching out?