so I'm trying to detect an object without having collider on that object but unfortunately I'm stuck on it ;
With the exception of a graphics raycast for UI elements on a canvas and possibly Plane.Raycast which is specific to planes, Unity Raycasts hit colliders and nothing else. If you want an object to be hit by raycasts you need to add a collider.
Related
I decided to make a 2D game for the PC on Unity, where the character moves around the stage. But I have a problem with the correct use of Rigid Body 2D.
In this picture you can see my playing field.
https://i.stack.imgur.com/PBhwx.png
I want my character to move around the entire field and when colliding with objects does not go through them.
My field is Tilemap, but I hung the Box Collider on the Grid. Boxing collider surrounds the grid.
But when I use Rigid Body and turn on the game, the object falls through. And if you remove the Rigid Body, then it just goes through objects.
I tried to use different types of Rigid Body, when using kinematic and static, sprite goes through houses.
The way it works is when you attach a RigidBody2D to an object, you give it physics properties, but it won't do anything useful without a collider. If you have an object with collider attached - every other object with collider attached will collide with it.
In your case the player should have RigidBody2D and BoxCollider2D. The ground should have BoxCollider2D, and basically everything you want the player to collide with should have BoxCollider2D. So the houses should have BoxCollider2D as well.
This setup should allow the player to walk on the ground without falling through it, and collider with houses.
Make sure that the collider's area is correct. You can preview it in the editor and edit it if it's not correct.
Also if you want it to work make sure the camera points down and your game setup is alongside Y axis so if there's a rigid body object falling down it falls down on the ground not before/behind it.
Very simple, I created an object that simply serves as a box collider that sits over the background. When the player character runs into it, I want the character to stop, but they just walk right through it. I have both of their colliders set to 2D box colliders, neither of them have the trigger option checked, and both are rigid bodies.
My guess is that you are using Transform.position to move the player.
All rigid body objects should be moved using the rigid body specific rigidbody.velocity function. Transform.position is practically teleportation while, rigidbody.velocity actually moves the rigidbody component. Allowing for the 2d colliders to take action.
Hope this helps!
After watching this (from 13:12 to the end) official Unity tutorial I have a question: Does this mean that ideally we should never have a collider component on a game object unless we also have rigidbody? Because if we only have a collider, Unity will consider the game object as static. So we should always add rigidbody and indicate that it is Kinematic.
It is perfectly fine to use colliders on static objects that don't move without adding the rigidbody. It is even better for performance as these colliders are cached in the physics engine.
There is no point in adding a Rigidbody to lets say a floor, that will never move.
In my Unity2D project I want that to load a level as a sprite from my resources. The game is a top down view. I then want to add invisible collision boxes where the walls in the level-image are.
How would I do that?
I have attached a box collider to my player and now? Creating an empty game object with another box collider doesnt work.
See #Savlon comment, you need rigidbody with your collider component as well for empty objects. And they will provide blocking of player object if you player object also have collider and rigidbody. Don't mark your colliders as trigger and ensure they are on the same layers.
Using Unity 5.0.1f1
I'm trying to make it so that when I shoot, if it hits an invisible object it destroys it, but when it collides nothing happens. Here is the code:
void OnTriggerEnter2D(Collider2D col){
Destroy (col.gameObject);
Debug.Log ("find");
}
It's hard for me to give you an answer given the little information that you are providing. But, the most possible solutions to your problem are:
Attaching a Rigidbody component to one of the colliding objects.
Making the object which will be destroyed have a normal collider attached and the other object must have a trigger collider attached.
Make sure that all of the Colliders/Triggers and Rigidbodies you use are 2D. That is, Rigidbody2D and Collider2D. Because you are using the void OnTriggerEnter2D method.
Make sure that the colliding objects are in layers which collide with each other. You can check which layer collides with each layer by going to Edit-->Project Settings-->Physics2D (Or Physics if you end up using 3D Physics).
Hope this helps!