- Home /
Question by
rayith · Feb 17 at 02:23 AM ·
script.distanceinteraction
interact distance limits
I made 2 scripts that interact at a distance (the idea was you had to be really close to the box collider) but for some reason its triggered at like the other side of the room
the code on the object:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KeyScript : MonoBehaviour
{
public GameObject wall;
public GameObject key;
public GameObject hiddenwall;
public float smooth = 2f;
void Update()
{
if (Input.GetKeyDown(KeyCode.E))
{
wall.SetActive(false);
key.SetActive(false);
hiddenwall.SetActive(true);
}
}
}
the code on the player:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class interact : MonoBehaviour
{
public float interactDistance = 2f;
void Update()
{
if (Input.GetKeyDown(KeyCode.E))
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, interactDistance))
{
if (hit.collider.CompareTag("Key"))
{
hit.collider.transform.GetComponent<KeyScript>();
}
}
}
}
}
Comment
Best Answer
Answer by GoliathAT · Feb 17 at 09:04 AM
Your Update() in KeyScript.cs doesn't care about the Update() in interact.cs
Replace the Update() in KeyScript.cs with a function that will be called from interact.cs
public class KeyScript : MonoBehaviour
{
public GameObject wall;
public GameObject key;
public GameObject hiddenwall;
public float smooth = 2f;
public void UseKey()
{
wall.SetActive(false);
key.SetActive(false);
hiddenwall.SetActive(true);
}
}
public class interact : MonoBehaviour
{
public float interactDistance = 2f;
void Update()
{
if (Input.GetKeyDown(KeyCode.E))
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, interactDistance))
{
if (hit.collider.CompareTag("Key"))
{
hit.collider.transform.GetComponent<KeyScript>().UseKey();
}
}
}
}
}
thank you so much I was really hitting a wall there
ps do you know how to make a inventory system