- Home /
[C#] Problem with RayCast check.
Hi! (Im spanish, sorry for my bad english) I have 2 scripts (PlayerInteractions.cs and Elevator.cs) The first script is attached to the player camera and the second script is attached to the "Elevator" (Buttons of the elevator are in other child).
I need to do: "The first script make a raycast from the camera, and the second script check the collision with the buttons"
Script 1 (PlayerInteractions.cs):
[code] using UnityEngine; using System.Collections;
public class PlayerInteractions : MonoBehaviour { //UI Interaction Variables public Texture InteractionImage; private bool ShowDescriptionText = false;
//Raycast Variables
static public bool InteractionRaycast;
static public RaycastHit InteractionHit;
void Update () {
InteractionRaycast = Physics.Raycast (transform.position, transform.TransformDirection (Vector3.forward), out InteractionHit, 5);
//RaycastTouchs
if (InteractionRaycast) {
if(InteractionHit.collider.gameObject.tag == ("Interactable")){
ShowDescriptionText = true;
}else ShowDescriptionText = false;
}
}
void OnGUI(){
if (ShowDescriptionText==true) {
GUI.DrawTexture(new Rect(Screen.width/2.6f, Screen.height/1.6f, Screen.width/3.5f, Screen.height/6.7f), InteractionImage);
}
}
} [/code]
Script 2 (Elevator.cs): [code] using UnityEngine; using System.Collections;
public class Elevator : MonoBehaviour { void Update () {
if (PlayerInteractions.InteractionRaycast == true) {
if (PlayerInteractions.InteractionHit.collider.gameObject.name == "ButtonElevator1") {
if (Input.GetKey ("f") && ElevatorRunning == false) {
Debug.Log("Touched1");
}
}
if (PlayerInteractions.InteractionHit.collider.gameObject.name == "ButtonElevator2") {
Debug.Log("Tetocao");
if (Input.GetKey ("f") && ElevatorRunning == false) {
Debug.Log("Touched2");
}
}
}
} [/code]
If i put the code of "Script2" in the "Script1", all work fine. But when i check de collision with other script, dont work...
Help me, please... :(
Answer by magicaxis · Oct 12, 2014 at 10:47 PM
You should try to encapsulate more. So put all of the code in script1, including the collision and the input.getkey, and when it's colliding AND pressing f AND the raycast hits, use GameObject.Find("Elevator").SendMessage("ButtonPressed"); Then make a function in Elevator.cs called "ButtonPressed()" and make it do whatever you want to do when the button is pressed.
Your answer
![](https://koobas.hobune.stream/wayback/20220613164938im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Using RayCast to do Continuous Shooting? 1 Answer
Firing a RayCast in a Raycast, Rayception 1 Answer
Distribute terrain in zones 3 Answers
Problem Standing into Objects 0 Answers