Best way to send variables/data to other scripts?

Hi. I'm trying to create a weapon system, where by- moving over a weapon- text displays, Asking the user if they want to "Equip" the weapon. I've done this through 3 different Handlers-

A Player touch handler, which detects if anything is in the way of the player using raycasts- then finds out if it's a "PkUp_Weapon" - if it is, it sends the gameobject to the weapon handler script.

at the weapon handler script- it see's if the player already has the weapon in their inventory- if they don't- it sends a Message to the GUI handler- which displays the message.

the thing is- it checks this every frame- making the game REALLY processor intensive- is their a better way at doing this?

Edit: here's the code:

Player touch :

    var selectedCamera : Camera;
var weaponHandler : Weapon_Handler;

function Update () 
{
     var hit : RaycastHit;
     var ray = selectedCamera.camera.ScreenPointToRay(Vector3(Screen.width / 2, Screen.height / 2, 0));
     if(Physics.Raycast(ray,hit,2))
     {
             if(hit.collider.gameObject.tag == "PkUp_*")
             weaponHandler.SendMessage("WeaponSelection" , hit.collider.gameObject, SendMessageOptions.DontRequireReceiver);
     }
}

Weapon_Handler:

var playerTouch : PlayerTouch_Handler;
var guiHandler : GUI_Handler;

private var primaryWeapon : GameObject;
private var secondaryWeapon : GameObject;

function WeaponSelection(SelectedWeapon : GameObject)
{
     if(SelectedWeapon != primaryWeapon || SelectedWeapon != secondaryWeapon)
     {
         guiHandler.SendMessage("SetCommand", "Equip? (Press E)");
         if(Input.GetButtonDown("Equip"))
         {
             if(Input.GetButton("1"))
             EquipWeapon(SelectedWeapon, 1);
         }
     }
}

function SetPrimaryWeapon(weapon : GameObject)
{
     primaryWeapon = weapon;
}

function SetSecondaryWeapon(weapon : GameObject)
{
     secondaryWeapon = weapon;
}

function EquipWeapon(weapon : GameObject, weaponSocket : int)
{
    print("WeaponEquiped in weaponSocket");
}

Gui_Handler:

var commandPos : Vector2;
var commandSize : Vector2;
var theme : GUIStyle;
var tex_HUD : Texture2D;

private var commandText : String;

function Update()
{
     commandText = (" ");
}

function OnGUI () 
{
     GUI.DrawTexture(Rect(0,0,Screen.width,Screen.height),tex_HUD); 
     GUI.Label (Rect(commandPos.x * Screen.width, 
                           commandPos.y * Screen.height,
                           commandSize.x, commandSize.y), commandText, theme);
}

function SetCommand (text : String)
{
     commandText = text;
}

There are 2 ways I know you can do, first is more for send to a script and the second is to send to an object:

//the name of the script is anExample
static var example = false;

then in your other script put:

anExample.example = true;

and the other way to do a SendMessage that you already have it

var obj1 : GameObject;
var example = false;
function Start(){
obj1.SendMessage("AnExample", example);
}

then in the other script:

function AnExample(example : boolean){
example = true;
}

here is SendMessage

then for the other things I dont think is take lot of space to be continuously checking, but OK but what I do for doing this because I am actually doing this kind of games is maybe not the best way but it works and is to do a Distance http://unity3d.com/support/documentation/ScriptReference/Vector3.Distance.html and do it to an if this object.position and the weapon position is less than 5 you can this. Example:

if(Vector3.Distance(transform.position,weapon.position)<5){
//DoSomething
}

and you can also try doing with collision or trigger Example:

function OnCollisionEnter(other: Collision){
if(collision.transform.tag == "weapon"){
//Do something
}
}