I have a gun that shoots at a box which is the enemy and I need that to send a message to my player and gun so that the exp for the mastery of the gun and the exp for the player are both increased. How would I do this? I have tried putting a Broadcast message on bullet prefab so when it contacts the box the box dies and its sends out the message but it says that the message has no receiver. I think it is because the gun is not a child of the cube so send and broadcast message will not work. Can someone point me in the direction of a tutorial or a script that can help me send messages between different gameObjects and not just to childs of a gameObject. All help is appreciated, Thank you. Here is the script for the bullet:
var target : GameObject;
function OnCollisionEnter(collision : Collision)
{
if(collision.gameObject.tag == "enemybox")
{
Destroy(collision.gameObject); // Destroys Health Box
target.BroadcastMessage("addExp");
}
}
and the script for the gun where the exp is handled is:
var gunHealth : float = 100;
private var maxgunHealth : float = 100;
private var brokenHealth : float = 30;
private var destroyed : float = 0;
var broken = false;
var unusable = false;
//ammo debugging
var ammo : int = 10;
var maxammo : int = 10;
private var emptyammo : int = 0;
var clipammo : int;
private var noclipsammo : int = 0;
var empty = false;
var reloading = false;
var noClips = false;
//exp
var masteryExp : float = 0;
private var leastmasteryExp : float = 0;
var maxmasteryExp : float = 100;
var levelofMastery : int = 1;
var maxlevelofmastery : int = 10;
var master = false;
var damage : int = 5;
//GUI
var barDisplay : float = 0;
var pos : Vector2 = new Vector2(20,40);
var size: Vector2 = new Vector2(Screen.width / 2 ,20);
var posoftext : Vector2 = new Vector2(20,40);
var sizeoftext : Vector2 = new Vector2(Screen.width / 2 ,20);
var progressBarEmpty : Texture2D;
var progressBarFull : Texture2D;
private var dead = false;
var myskin : GUISkin;
var mystyle : GUIStyle;
function Start(){
//need to add the reloading animation
animation["trigger"].wrapMode =
WrapMode.Once;
animation["trigger"].layer = 1;
animation.Stop();
}
function Update (){
if (Input.GetMouseButtonUp(0)){
animation.Play("trigger");
}
if (Input.GetMouseButtonUp(0))
gunHealth -= .5;
if (Input.GetMouseButtonUp(0))
ammo -= 1;
if (gunHealth <= brokenHealth){
broken = true;
}
if (gunHealth <= destroyed){
unusable = true;
gunHealth = destroyed;
}
if (gunHealth >= maxgunHealth){
gunHealth = maxgunHealth;
}
if (ammo >= maxammo){
ammo = maxammo;
}
if (ammo <= emptyammo){
ammo = emptyammo;
empty = true;
clipammo -= 1;
}
if (clipammo <= noclipsammo){
clipammo = noclipsammo;
noClips = true;
}
if (masteryExp <= leastmasteryExp){
masteryExp = leastmasteryExp;
}
if (masteryExp >= maxmasteryExp){
levelofMastery += 1;
masteryExp = 0;
maxmasteryExp += 50;
damage += 3.5;
}
if (levelofMastery >= maxlevelofmastery){
levelofMastery = maxlevelofmastery;
masteryExp = 0;
master = true;
}
barDisplay = masteryExp;
}
function LateUpdate(){
if (broken){
Debug.Log("item is now broken. Get repaired soon");
//I need a GUI message here also that says what is said above.
}
if (unusable){
Debug.Log("item is now unusable");
Destroy(gameObject);
//this is where I need the GUI message to go
}
if (empty){
Debug.Log("start reloading");
reloading = true;
}
if (reloading){
Debug.Log("reloading now");
ammo = 10;
empty = false;
reloading = false;
}
if (noClips){
Debug.Log("no more ammo available");
ammo = 0;
//I need the gun shooting script to stop and I need it to play a clicking sound here when they try and shoot
}
if (master){
Debug.Log("you are now a master with this weapon");
damage = 35;
}
}
function OnGUI()
{
GUI.skin = null;
// draw the background:
GUI.BeginGroup (new Rect (pos.x, pos.y, size.x, size.y));
GUI.Box (Rect (0,0, size.x, size.y),progressBarEmpty);
GUI.skin = myskin;
// draw the filled-in part:
GUI.BeginGroup (new Rect (0, 0, size.x * (masteryExp / maxmasteryExp), size.y));
GUI.Box (Rect (0,0, size.x, size.y),progressBarFull);
GUI.EndGroup ();
GUI.EndGroup ();
GUI.Label(Rect(posoftext.x,posoftext.y,sizeoftext.x,sizeoftext.y), "Level Of Mastery " + levelofMastery, mystyle);
}
function addgunExp(){
masteryExp += 10;
}
The exp system works the same for both the gun and the player so I just need help sending the message to the indivisual game Objects Thank you.