i am attempting to make it so that when you collide with an object you collect it so i have this script on the object:
function OnCollisionEnter(collision : Collider){
if(collision.gameObject.tag == "Player"){
print(gameObject.name);
var player = GameObject.Find("First Person Controller");
var stacking = GameObject.Find(gameObject.name+"_model").GetComponent(stacking);
if (stacking.stackAmount >=1){
stacking.stackAmount++;
Destroy(gameObject);
}else if (Inventory.itemNum < 8){
player.GetComponent(Inventory).AddItemToInventory(gameObject);
stacking.stackAmount++;
}
}
}
the issue is since im using the character controller it isnt registering the collision and i cant use OnControllerColliderHit as it causes me alot of issues. thanks in advance
2 Answers
2
Usually you should make the item a trigger and use OnTriggerEnter in the player or item script (the event is sent to both). But when the item has a rigidbody with Use Gravity checked, it falls through the floor. A solution is to place the trigger in a child of the main object: child an empty object to the item, add a collider (usually a sphere) and set Is Trigger. Modify the OnCollisionEnter to OnTriggerEnter like below and attach the script to the trigger, not to the item:
function OnTriggerEnter(other: Collider){
if (other.tag == "Player"){
print(parent.name); // the parent is the item
var player = other.gameObject; // the player is the "other" object
// use the parent's name to find the script stacking
var stacking = GameObject.Find(parent.name+"_model").GetComponent(stacking);
if (stacking.stackAmount >=1){
stacking.stackAmount++;
Destroy(gameObject);
} else if (Inventory.itemNum < 8){
player.GetComponent(Inventory).AddItemToInventory(gameObject);
stacking.stackAmount++;
// I suspect you should destroy the object in this case too...
}
}
}
If it’s collecting an item, try using TriggerEnter instead.
Make sure you check is trigger on the item’s collision component.
ill try this out now and see it works, thanks for the help
– anon77680935yea this works just need to make it destroy the parent object now and I am golden so thanks =D
– anon77680935My bad! It should be Destroy(transform.parent.gameObject); By the way, other references like parent.name should also be altered to trasnsform.parent.name etc.
– aldonalettoAldo, thanks for the suggestion, it works like a charm!
– jdwieber