Picking up Artifacts and then Using them

Ok, this is going to be REALLY dificult to explaine so I hope you will bear with me on this.

What I'm after is, I need my FPS player to be able to find "Alien Artifacts" that will be hidden or just lying about certain "Game Levels", Like say he finds one "Alien Artifact" in level 1. I then want that "Alien Artifact" to appear on an inventory type screen that I would like to have full screen, designed in Photoshop that will have place holders for each "Alien Artifact" (4 in total)

I'm gonna go out on a limb here and guess that my inventory screen for this will need to be a new "Scene" (Similar to lets say a "Start Screen") that can be accessed anytime from a keypress, maybe "I" for inventory or whatever you think is best. THINK Metroid Prime kinda idea for inventory screen.

As my player picks up (Finds) a missing "Alien Artifact" it gets added into the assigned inventory space on the screen. Also I would like that if each item on the inventory screen is clicked there would be information about it displayed.

Later on in my game when my FPS player has collected all of these "Alien Artifacts" they will enable him to control something or gain access to something important.

Now How the Frak can I do all that lol ;)

I also updated my Blog with a picture of my Full Screen GUI texture Background and info about what I'm trying to do with it. http://zentaiguysblog.blogspot.com/

Edit:

I've changed my code to this, it's not complete I know. I need help to complete it and get it working. I've made a transparent PNG file to represent the first "Alien Artifact" that I would like to appear in the top triangular spot placeholder when my FPS player has picked up the artifact. Here is what the code looks like now (Incomplete though):

var i = 0;
var alienArtifacts = 0;

onGui();
{
    if(i == 1)
    //put the code that makes the item holder here
    //you might want to add code for which ones you have got

}

update()
{
    if (/one of the artifacts was picked up/)
    {
        alienArtifact ==1; //other stuff like what artifact was picked up
    }
}

function Update () {
    transform.position.x = 0;
    transform.position.y = 0;

    guiTexture.pixelInset.x = 0;
    guiTexture.pixelInset.x = 0;

    guiTexture.pixelInset.width = Screen.width;
    guiTexture.pixelInset.height = Screen.height;
}

This won't address all the questions in your post, but the inventory screen doesn't need to be a separate scene. Depending on how you want it to work, it can instead be an overlay or otherwise part of the UI for the game, rendered using the built-in GUI system or implemented using other means.

As for making the data persistent, the most straightforward solution would probably be to store which/how many artifacts have been collected using PlayerPrefs (which will allow the data to persist between runs of the application as well as from scene to scene).

You're doing a heck of a lot better than most "first timers" here... You kind of broke it up in to pieces...

However, the idea for the inventory to be a new scene, in my opinion, is a horrible idea...

I think a good question to ask/get clarification on (I don't know the answer), is how to allow a scripts info to continue on to new scene loads... (Refreshed, I know of playerprefs, so maybe do look in to that, www.google.com can help lots!).

Now, you'd want to set up multiple scenes as levels, and use the playerprefs to go through them...

And as Bobadebob said, you should use GUI, especially for the whole inventory...

As for picking up items, look in to raycasting... That should allow you to do well, and look in to tag system to check if it's a pick-up-able... Then give each item a new name, and with that name, allow it to activate a boolean as to whether or not the player has it....

I think this answers most of your questions... If you have more, post more questions, or if I missed something, comment back...

I might just use a separate camera rather than a new scene. Keeping things set up properly across scenes can be a pain, so I would try to avoid that option.

It doesn't look like anyone's mentioned these ideas for persistence: put your inventory into an object which doesn't get destroyed, see this: http://unity3d.com/support/documentation/ScriptReference/Object.DontDestroyOnLoad.html and look into 'singletons' like maybe this: http://www.unifycommunity.com/wiki/index.php?title=AManagerClass

this is my inventory code(you may need to modify the position values to accomidate for your textures):

Inventory.js:

var slotSize : float;
var slotSpacing : float;
var toggleKeys : KeyCode[];
var buttonPos : Rect;
var backgroundTexture : Texture2D;
var equipItemPos : Transform;
var Skin : GUISkin;

private var scrollPosition : Vector2 = Vector2.zero;
private var objectsInBag : GameObject[];
private var texturesForBag : Texture2D[];
private var nextObjectInt : int = 0;
private var currentItem : GameObject;
private var InvWindowRect : Rect;
private var showBag : boolean = false;

function Awake()
{
    var i : int;
    i = 10*4;
    objectsInBag = new GameObject*;*
 _texturesForBag = new Texture2D*;*_
 <em>_InvWindowRect = Rect(10,20,(slotSize+slotSpacing)*4+50, 350);_</em>
_*}*_
_*function AddObject(j : GameObject)*_
_*{*_
 _*objectsInBag[nextObjectInt] = j;*_
 _*texturesForBag[nextObjectInt] = j.GetComponent(Item).icon;*_
 _*nextObjectInt++;*_
_*}*_
_*function EquipItem(i : GameObject)*_
_*{*_
 _*currentItem = i;*_
 _*for(var j = 0; j < objectsInBag.length; j++)*_
 _*{*_
 _*if(objectsInBag[j] != null)*_
 _*{*_
 _*objectsInBag[j].transform.position = this.gameObject.transform.position;*_
 _*objectsInBag[j].transform.rotation = this.gameObject.transform.rotation;*_
 _*objectsInBag[j].SetActiveRecursively(false);*_
 _*}*_
 _*}*_
 _*i.transform.position = equipItemPos.position;*_
 _*i.transform.rotation = equipItemPos.rotation;*_
 _*i.SetActiveRecursively(true);*_
_*}*_
_*function OnGUI()*_
_*{*_
 _*GUI.skin = Skin;*_
 _*if(GUI.Button(buttonPos, "Bag"))*_
 _*{*_
 _*ToggleBag();*_
 _*}*_
 _*if(showBag)*_
 _*InvWindowRect = GUI.Window (0, InvWindowRect, InventoryWindow, "Inventory");*_
_*}*_
_*function ToggleBag()*_
_*{*_
 _*if(showBag)*_
 _*showBag = false;*_
 _*else*_
 _*showBag = true;*_
_*}*_
_*function InventoryWindow(windowID : int)*_
_*{*_
 _*if(currentItem != null)*_
 _*GUI.Label(Rect(41, 292, 250, 30), "Current Item: "+currentItem.GetComponent(Item).Name);*_
 <em>_scrollPosition = GUI.BeginScrollView (Rect (15, 90,(slotSize+slotSpacing)*4+17, 200), scrollPosition, Rect (10, 10, (slotSize+slotSpacing)*4, (slotSize+slotSpacing)*10));_</em>
 _*for(i = 0; i < 10; i++)*_ 
 _*{*_
 _*for(j = 0; j < 4; j++)*_
 _*{*_
 <em>_if(GUI.Button(Rect(10+(j*(slotSize+slotSpacing)), 10+(i*(slotSize+slotSpacing)), slotSize, slotSize), texturesForBag[(j*10)+i]))_</em>
 _*{*_
 <em>_EquipItem(objectsInBag[(j*10)+i]);_</em>
 _*}*_
 _*}*_
 _*}*_
 _*GUI.EndScrollView ();*_
_*}*_
_*function Update()*_
_*{*_
 _*if(currentItem.GetComponent(Item))*_
 _*Destroy(currentItem.GetComponent(Equippable));*_
 _*for(i = 0; i < toggleKeys.length; i++)*_
 _*{*_ 
 <em>_if(Input.GetKeyUp(toggleKeys*))*_</em>
 <em>_*{*_</em>
 <em>_*ToggleBag();*_</em>
 <em>_*}*_</em>
 <em>_*}*_</em>
<em>_*}*_</em>
<em>_*```*_</em>
<em>_*<p>Item.js(its short, but bear with my):</p>*_</em>
<em>_*```*_</em>
<em>_*var icon : Texture2D;*_</em>
<em>_*var Name : String;*_</em>
<em>_*```*_</em>
<em>_*<p>Equippable.js:</p>*_</em>
<em>_*```*_</em>
<em>_*var selectedColor : Color;*_</em>
<em>_*var isTriggeredByCollision : boolean;*_</em>
<em>_*var useTag : boolean;*_</em>
<em>_*var collisionTag : String;*_</em>
<em>_*private var oldColor : Color;*_</em>
<em>_*function Awake ()*_</em> 
<em>_*{*_</em>
 <em>_*oldColor = this.gameObject.renderer.material.color;*_</em>
<em>_*}*_</em>
<em>_*function OnMouseOver()*_</em>
<em>_*{*_</em>
 <em>_*this.gameObject.renderer.material.color = selectedColor;*_</em>
 <em>_*if(Input.GetMouseButtonUp(0))*_</em>
 <em>_*{*_</em>
 <em>_*transform.parent = FindObjectOfType(InventoryGUI).gameObject.transform;*_</em>
 <em>_*this.gameObject.active = false;*_</em>
 <em>_*transform.position = Vector3(transform.parent.GetComponent(InventoryGUI).equipItemPos.position.x, transform.parent.GetComponent(InventoryGUI).equipItemPos.position.y-10, transform.parent.GetComponent(InventoryGUI).equipItemPos.position.z);*_</em>
 <em>_*FindObjectOfType(InventoryGUI).AddObject(this.gameObject);*_</em>
 <em>_*}*_</em>
<em>_*}*_</em>
<em>_*function OnCollisionEnter(col : Collision)*_</em>
<em>_*{*_</em>
 <em>_*if(isTriggeredByCollision)*_</em>
 <em>_*{*_</em>
 <em>_*if(useTag)*_</em>
 <em>_*{*_</em>
 <em>_*if(col.gameObject.tag == collisionTag)*_</em>
 <em>_*{*_</em>
 <em>_*transform.parent = FindObjectOfType(InventoryGUI).gameObject.transform;*_</em>
 <em>_*this.gameObject.active = false;*_</em>
 <em>_*transform.position = Vector3(transform.parent.GetComponent(InventoryGUI).equipItemPos.position.x, transform.parent.GetComponent(InventoryGUI).equipItemPos.position.y-10, transform.parent.GetComponent(InventoryGUI).equipItemPos.position.z);*_</em>
 <em>_*FindObjectOfType(InventoryGUI).AddObject(this.gameObject);*_</em>
 <em>_*}*_</em>
 <em>_*}*_</em>
 <em>_*} else {*_</em>
 <em>_*transform.parent = FindObjectOfType(InventoryGUI).gameObject.transform;*_</em>
 <em>_*this.gameObject.active = false;*_</em>
 <em>_*transform.position = Vector3(transform.parent.GetComponent(InventoryGUI).equipItemPos.position.x, transform.parent.GetComponent(InventoryGUI).equipItemPos.position.y-10, transform.parent.GetComponent(InventoryGUI).equipItemPos.position.z);*_</em>
 <em>_*FindObjectOfType(InventoryGUI).AddObject(this.gameObject);*_</em>
 <em>_*}*_</em>
<em>_*}*_</em>
<em>_*function OnMouseExit()*_</em>
<em>_*{*_</em>
 <em>_*this.gameObject.renderer.material.color = oldColor;*_</em>
<em>_*}*_</em> 
<em>_*function OnEnable()*_</em>
<em>_*{*_</em>
 <em>_*this.gameObject.renderer.material.color = oldColor;*_</em>
<em>_*}*_</em>
<em>_*function OnDisable()*_</em>
<em>_*{*_</em>
 <em>_*this.gameObject.renderer.material.color = oldColor;*_</em>
<em>_*}*_</em>
<em>_*```*_</em>

with GUI functions and a variable within them to specify whether or not the player has all the "artifacts" then when he does to enables a script with the option to "enable him to control something or gain access to something important."