- Home /
Make an object destroy the object it is touching?
I am very new to Unity, and I am trying to make a very very simple Minecraft-inspired game. The world is made out of 1x1x1 cubes, and always right in front of the player, there is a small cube to show what block is targeted. What I basically want to do is this: Destroy the GameObject that is touching the cube.
I am using JavaScript.
Btw, the blocks that will be destroyed are instances of a prefab.
(sorry if this is unclear, it is kinda hard to explain. If something is unclear, feel free to ask :))
Answer by Loius · Jun 29, 2012 at 03:21 PM
You can use OnTriggerEnter to get the currently-touched object, and OnTriggerExit to clear it.
If your targeting cube is a Collider marked as a Trigger, and it has a Rigidbody marked as Kinematic, and your level cubes are Colliders not marked as Trigger and tagged as "gameBlock", I believe the following will work (you may need to attach kinematic rigidbodies to the level cubes, or move the targeting cube less than instantaneously between cubes):
[TargetingCube.js]
private var target : GameObject;
function OnTriggerEnter( other : Collider ) {
if ( other.tag == "gameBlock" ) {
target = other.gameObject;
}
}
function OnTriggerExit( other : Collider ) {
if ( target == other.gameObject ) target = null; // only clear target if we haven't already gotten a new one
}
function GetTarget() : GameObject { return target; }
function DestroyTarget() { if ( target ) Destroy( target ); target = null; }
Or you can use Physics.OverlapSphere to get all objects within (0.1) of the 'targeting cube' and destroy that one object that is returned
Those are my recommendations anyway.
Also if you have any decent-sized level you'll have so many cubes by the end your computer will melt. :D
All this said, I believe the better solution for $$anonymous$$inecraft-inspired games is to use a single mesh and deform it as necessary, and use an array to keep track of what blocks are where rather than make any attempt to hold all the meshes in memory at once.
There are lots of $$anonymous$$inecraft questions on here, too, and the answers in some of those are ridiculously helpful.
Answer by mort96 · Jun 29, 2012 at 03:56 PM
Yeah, my computer is melting if I add a few light blocks on a 40x40x1 sized level :p
OnTriggerEvent sounds interesting. How do I get the currently touched object from that?
This is a comment, not an answer - I know, it's confusing to start out here. Use the tiny 'add new comment' button for things that aren't answers. ^_^ I'll edit my answer to clarify triggeryness.
Your answer
Follow this Question
Related Questions
collision script to destroy 2 Answers
Move object to raycast point. 3 Answers
Collision between objects 2 Answers
Destroy on Collision? 1 Answer
Collision with a coin 0 Answers