Get a gun off a wall

I have a gun on a wall with the following script, I was wonder if I can have it so you have to walk up to the gun on the wall to get it, right now if you press “2” at anytime in the game you change to the gun.

My script

private var message = false;
private var gunTaken = false;  //A variable for if you have taken the gun
function OnTriggerEnter(other : Collider){ 
message = true; 
function OnTriggerExit(other : Collider){  //if we exit the collider we cant pick it up
message = false;
function OnGUI () {
     if (message && !gunTaken){  //if you haven't taken the gun
     GUI.Box (Rect (600, 350, 250, 40), "Press 2 to take this gun");
          if (Input.GetKeyDown("2")) {  //if you take the gun it is taken
          gunTaken = true;

2 scripts:


//Attach to a empty, create a working collider for the empty
//Parent the gun to the empty and set it as the currentGun of the empty
//Tag it as "WeaponHolder"
var gun : GameObject;


//Attach it to a empty, create a working trigger, parent it to your player
private var touchedWeaponHolder : GunHolder;
var currentGun : GameObject;

function OnTriggerEnter( other : Collider ) {
    if( other.gameObject.CompareTag("WeaponHolder") ) {
       touchedWeaponHolder = other.gameObject.GetComponent("GunHolder");

function OnTriggerExit( other : Collider ) {
    if( other.gameObject.CompareTag("WeaponHolder") ) {
       touchedWeaponHolder = null;

function OnGUI() {
   //Change display depends on touchedWeaponHolder

function Update {
    if( Input.GetKeyDown(KeyCode.2) && touchedWeaponHolder ) {
       //(Incomplete Code) You can do 2 different things here:

       // - Grab new gun, and keep your old gun in the inventory
       currentGun = gunHolder.gun ;
       Destroy( gunHolder.gameObject );

       // - Swap new gun with old gun
       GameObject temp = currentGun;
       currentGun = gunHolder.gun ;
       gunHolder.gun = temp;

       //You can put the change-gun codes here or in the GunHolder.js, up to you