RaycastAll from prefab is not picking up a collider from another prefab
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?
Answer by Captain_Dando · Mar 06, 2016 at 07:48 AM
Solved it! I didn't realize that there was a function named Debug.DrawRay. in essence, I didn't realize that rays and line get their coordinates differently. The line I drew for testing purposes had a specific point in local space as it's second parameter, where as with drawray it is a direction. knowing this, I was able to fix the trajectory of the punch, as before the punch from one punk was going in a completely wild direction.
Your answer
Follow this Question
Related Questions
Is there any way how to do raycasts like this? 0 Answers
2D Raycast reflection only changes hit.normal 0 Answers
Finding unique interacting function within gameObject 0 Answers
Raycast2D not working like it should be. 0 Answers
Strange Raycast problem 0 Answers