- Home /
Show GUI Texture on Trigger and Instantiate Object if Button pressed while In Trigger?
Alright so I'm working on this canon thing where I walk into a trigger and a GUI Texture pops up that says "E" and when you press E, a canonball shooting forward gets spawned at a specified position, also a small particle effect of a explosion appears when the canonball appears. Here is the code I'm using and it doesn't work at all so can someone help refine the code so it works and perhaps explain to me the new code because I'm really new at this.
public class CanonShoot : MonoBehaviour {
public Transform ballPos;
public Rigidbody Ball;
float forceAmount = 5000;
bool showGUI = false;
public Texture EtoShoot;
public GameObject effect;
void OnTriggerEnter()
{
Rigidbody ballRigid;
if ((Ball != null) && (ballPos != null) && Input.GetButtonDown("E"))
{
ballRigid = Instantiate(Ball, ballPos.position, ballPos.rotation) as Rigidbody;
Instantiate(effect, ballPos.position, ballPos.rotation);
if (ballRigid != null)
{
ballRigid.AddForce(ballPos.forward * forceAmount);
}
}
}
void OnTriggerStay(Collider other)
{
if (other.gameObject.tag == "Player")
showGUI = false;
}
void OnTriggerExit(Collider other)
{
if(other.gameObject.tag == "Player")
showGUI = false;
}
void OnGUI()
{
if (showGUI == true)
GUI.DrawTexture(new Rect(Screen.width / 4.5f, Screen.height / 4, 1024, 512),EtoShoot);
}
}
Thanks for the help and time!
Answer by TheRealKuha · May 12, 2016 at 08:22 AM
Nevermind, I got it working. Here are the 2 scripts I'm using one is for the GUI to pop up saying "E" and the other one is for actually pressing E and firing the canon. The fault was that I needed to use OnTriggerStay because that detects every frame for the if arguments if they are true. using UnityEngine; using System.Collections;
public class CanonShoot : MonoBehaviour
{
public Transform ballPos;
public Rigidbody Ball;
float forceAmount = 1500;
public GameObject effect;
void OnTriggerStay(Collider other)
{
Rigidbody ballRigid;
if ((other.gameObject.tag == "Player") && Input.GetButtonDown("Use"))
{
ballRigid = Instantiate(Ball, ballPos.position, ballPos.rotation) as Rigidbody;
ballRigid.AddForce(ballPos.forward * forceAmount);
Instantiate(effect, ballPos.position, ballPos.rotation);
}
}
}
And the GUI:
using UnityEngine;
using System.Collections;
public class ShowGUI : MonoBehaviour {
private bool showGUI = false;
public Texture pressE;
void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "Player")
showGUI = true;
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player")
showGUI = false;
}
void OnGUI()
{
if (showGUI == true)
GUI.DrawTexture(new Rect(Screen.width / 1.5f, Screen.height / 1.4f, 178, 178), pressE);
}
}