I have a price of code that looks like this:
void OnTriggerExit() {
Debug.Log("Object leaved trigger");
}
But when I move an object that is colliding with the trigger by script it doesn't print to the console, but if i nudge it instead it does. I'm guessing it's because the object ain't actually exiting, but disappearing. Is there a way to solve this? Thank you!
EDIT:
Okey, so this is the actual code:
Craftingstation.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Craftingstation : MonoBehaviour {
//GameObject globalScripts;
bool itemAlreadyCraftable;
int correctItems;
public string[,] itemIds;
// Generic list for holding items on crafter
public List<string> itemsOnCrafter;
public List<string> craftableItems;
// Static 2D array for holding crafting recipes
string[,] craftingRecipes = new string[,] {
// {recipe},{result}
{"potato","tabasco"},{"explosivePotato"},
{"mentos","cola"},{"colaCannon"},
{"potato","cola"},{"potatoCola"},
{"potato","chips"},{"potatoChips"}
};
void Start () {
//globalScripts = GameObject.FindGameObjectWithTag("Global Scripts");
//string test = globalScripts.GetComponent<items>().nameToId("mentos");
}
/*
void nameToId(string passedName) {
for (int i = 0; i < globalScripts.GetComponent<items>().itemIds.GetLength(0); i++)
{
string loopedName = globalScripts.GetComponent<items>().itemIds[i, 0];
if (loopedName == passedName) {
string returnString = globalScripts.GetComponent<items>().itemIds[i, 1];
Debug.Log(returnString);
}
}
return 0;
}
*/
void Update () {
for (int i = 0; i < craftingRecipes.GetLength(0); i++) {
itemAlreadyCraftable = false;
correctItems = 0;
if (i%2==0) {
for (int j = 0; j < craftingRecipes.GetLength(1); j++) {
for (int k = 0; k < itemsOnCrafter.Count; k++) {
if (itemsOnCrafter[k] == craftingRecipes[i, j]) {
correctItems++;
}
}
if (correctItems >= craftingRecipes.GetLength(1)) {
for (int l = 0; l < craftableItems.Count; l++) {
if (craftableItems[l] == craftingRecipes[i+1, 0]) {
itemAlreadyCraftable = true;
}
}
if (itemAlreadyCraftable == false) {
craftableItems.Add(craftingRecipes[i+1, 0]);
}
}
else {
craftableItems.Remove(craftingRecipes[i+1, 0]);
}
}
}
}
}
void OnTriggerEnter(Collider other) {
itemsOnCrafter.Add(other.GetComponent<id>().technicalName);
}
void OnTriggerExit(Collider other) {
itemsOnCrafter.Remove(other.GetComponent<id>().technicalName);
}
}
sendRay.cs
using UnityEngine;
using System.Collections;
public class sendRay : MonoBehaviour {
Ray ray;
RaycastHit hit;
bool holding = false;
public bool pickedUp = false;
Vector3 tempScale;
void Update()
{
if(Input.GetButtonDown("Pickup"))
{
Vector2 screenCenterPoint = new Vector2(Screen.width/2, Screen.height/2);
ray = Camera.main.ScreenPointToRay(screenCenterPoint);
if(Physics.Raycast(ray, out hit, 5))
{
if(hit.transform.tag == "Pickup") {
if(holding == false) {
pickedUp = true;
tempScale = hit.transform.localScale;
hit.transform.parent = GameObject.FindGameObjectWithTag("Hand").transform;
float distX = hit.transform.GetComponent<keepOffset>().distX;
float distY = hit.transform.GetComponent<keepOffset>().distY;
float distZ = hit.transform.GetComponent<keepOffset>().distX;
//Debug.Log(distX + ", " + distY + ", " + distZ);
hit.transform.localPosition = new Vector3(-distZ, -distX, -distY);
hit.transform.localScale = tempScale;
hit.transform.rotation = GameObject.FindGameObjectWithTag("Hand").transform.rotation;
foreach(Collider c in hit.transform.GetComponents<Collider>()) {
c.enabled = false;
}
foreach(Rigidbody r in hit.transform.GetComponents<Rigidbody>()) {
r.isKinematic = true;
r.detectCollisions = false;
}
holding = true;
return;
}
}
}
if(holding == true) {
pickedUp = false;
foreach (Transform child in GameObject.FindGameObjectWithTag("Hand").transform){
child.transform.parent = null;
child.transform.localScale = tempScale;
foreach(Collider c in child.transform.GetComponents<Collider>()) {
c.enabled = true;
}
foreach(Rigidbody r in child.transform.GetComponents<Rigidbody>()) {
r.isKinematic = false;
r.detectCollisions = true;
}
}
holding = false;
return;
}
}
}
}