背包相关——Inventory
背包GUI
var skintemp:GUIStyle;
var skintemp01:GUIStyle;
var skintemp02:GUIStyle;
var skintemp03:GUIStyle;
var skintemp04:GUIStyle;
function OnGUI()
{
GUI.Button(Rect(10,70,50,50),"",skintemp);
GUI.Button(Rect(70,70,50,50),"",skintemp01);
GUI.Button(Rect(130,70,50,50),"",skintemp02);
GUI.Button(Rect(200,70,50,50),"",skintemp03);
GUI.Button(Rect(260,70,50,50),"",skintemp04);
}
背包_InventoryGrid
var bagName:String = "set a name for bag";
var bagBtnName:String = "Bag button name here";
var posBagBtn:Vector2 = Vector2(50,50);
var slotSize: float = 40;
var spacingBetweenSlots :float = 5;
var defaultTextureSlot:Texture;
var bagNumber:int;
private var numSlot = 16;
private var offsetBag : int ;
private var showBag :boolean = false;
private var bagPos:Vector2 ;
private var indexOnController:int;
private var tempTexture :Texture;
private var ctrl:PositionController;
function Start()
{
offsetBag = bagNumber * numSlot;
ctrl = transform.parent.GetComponent(PositionController);
indexOnController = 0;
}
function OnGUI()
{
if(GUI.Button(Rect(Screen.width - posBagBtn.x, Screen.height - posBagBtn.y,slotSize,slotSize),bagBtnName))
{
ToggleBag();
}
if(showBag)
{
Bag(bagPos.x,bagPos.y,185,200);
}
}
function ToggleBag()
{
if(showBag)
{
HideBag();
}
else
{
ShowBag();
}
}
function HideBag()
{
showBag = false;
ctrl.FreePosition(indexOnController);
}
function ShowBag()
{
showBag = true;
var info: Vector3 = ctrl.GetPositionAvailable();
indexOnController = info.z;
bagPos = Vector2(info.x,info.y);
}
function BagIsBeingDisplayed()
{
return showBag;
}
function Bag(posX:float,posY:float,sX:float,sY:float)
{
GUI.BeginGroup(Rect(Screen.width - posX,Screen.height - posY,sX,sY));
GUI.Box(Rect(0,0,sX,sY),bagName);
for(var i=0;i<4;i++)
{
for(var j=0;j<4;j++)
{
if(ctrl.GetObjectsInBag(offsetBag + (4*i)+j) == null)
{
tempTexture = defaultTextureSlot;
}
else
{
tempTexture = ctrl.GetObjectsInBag(offsetBag+(4*i)+j).GetComponent(ObjectInfo).iconTexture;
}
if(Input.GetMouseButtonDown(0))
{
ctrl.SetButtonClicked(false);
}
if(GUI.Button(Rect(slotSize*j+spacingBetweenSlots*(j+1) , slotSize*i+spacingBetweenSlots*(i+1)+15,
slotSize,slotSize),tempTexture))
{
ctrl.SetButtonClicked(true);
if(ctrl.GetObjectsInBag(offsetBag+(4*i)+j) != null)
{
ctrl.mouseTextureHander.SetCursor(ctrl.GetObjectsInBag(offsetBag+(4*i)+j).GetComponent(ObjectInfo).iconTexture);
ctrl.SetObjAttached(true);
}
//print((offsetBag+(4*i)+j));
//print(ctrl.GetObjectsInBag((offsetBag+(4*i)+j)));
MoveSlot((offsetBag+(4*i)+j));
}
}
}
GUI.EndGroup();
}
function MoveSlot( indSlot : int)
{
//ctrl.SetLastSlotUsed(indSlot);
if(ctrl.GetObjectsInBag(indSlot) == null && !ctrl.GetSlotMovedFlag())//移动图标到新的位置
{
ctrl.SetObjectInBag(indSlot, ctrl.GetObjectsInBag(ctrl.GetLastSlotUsed()));
ReleaseSlot(ctrl.GetLastSlotUsed());
ctrl.SetSlotMovedFlag(true);
ctrl.mouseTextureHander.ReleaseCursorIcon();
ctrl.SetObjAttached(false);
}
else if(ctrl.GetObjectsInBag(indSlot) != null && ctrl.GetObjectsInBag(ctrl.GetLastSlotUsed()) != null && !ctrl.GetSlotMovedFlag()) //转换两个图标
{
var tmpObj : GameObject = ctrl.GetObjectsInBag(indSlot);
ctrl.SetObjectInBag(indSlot, ctrl.GetObjectsInBag(ctrl.GetLastSlotUsed()));
ctrl.SetObjectInBag(ctrl.GetLastSlotUsed(),tmpObj);
ctrl.SetSlotMovedFlag(true);
ctrl.mouseTextureHander.ReleaseCursorIcon();
ctrl.SetObjAttached(false);
}
else
{
ctrl.SetSlotMovedFlag(false);
}
ctrl.SetLastSlotUsed(indSlot);
}
function ReleaseSlot(index :int)
{
ctrl.SetObjectInBag( index, null);
}
背包_ObjectInfo
var iconTexture : Texture;
var nameOfObj : String = "Put your Object name";
var inventory : GameObject;
private var decr : boolean;
function Start()
{
decr = false;
}
function OnMouseOver()
{
ToggleAlpha(0.3,1);
if(Input.GetMouseButtonDown(0))
{
renderer.material.color.a = 1;
inventory.GetComponent(PositionController).SaveObjectInInventory(transform.gameObject);
}
}
function OnMouseExit()
{
renderer.material.color.a = 1;
}
function ToggleAlpha(minV : float, maxV : float)
{
if(renderer.material.color.a > minV && decr)
{
renderer.material.color.a -= 1*Time.deltaTime;
}
else
{
renderer.material.color.a += Time.deltaTime;
}
if(renderer.material.color.a > maxV )
{
decr = true;
}
else if(renderer.material.color.a < minV)
{
decr = false;
}
}
背包_MouseTextureHanding
function Start()
{
transform.GetComponent(GUITexture).enabled = false;
}
function Update ()
{
transform.position = Vector3(Input.mousePosition.x/Screen.width,Input.mousePosition.y/Screen.height,0);
}
function ReleaseCursorIcon()
{
transform.GetComponent(GUITexture).enabled = false;
Screen.showCursor = true;
}
function SetCursor(t : Texture)
{
transform.GetComponent(GUITexture).texture = t;
transform.GetComponent(GUITexture).enabled = true;
Screen.showCursor = false;
}
背包_PositionController
var mouseTextureHander : MouseTextureHanding;
private var buttonClicked : boolean = false;//获取按钮是否按下
private var objAttached : boolean = false; //TRUE 当一个模型从背包中选择
private var posBags: Vector2[];
private var flagAvailable : Array;
private var indexBags:int;
private var toggleAllBags :boolean = false;
private var objectsInBag : GameObject[];
private var LastSlotUsed :int = 63; //获取最后一次被点击的图标
private var slotMovedFlag : boolean = false; //控制是否可以移动
function Start()
{
objectsInBag = new GameObject[64];
flagAvailable = new Array();
posBags = [Vector2(195,260),Vector2(195,465),Vector2(385,260),Vector2(385,465)];
for(var i=0 ; i<posBags.length; i++)
{
flagAvailable.push(true);
}
indexBags = 0;
}
//快捷键
function Update()
{
if(Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.B))
{
for(var child : Transform in transform)
{
if(child.GetComponent(InventoryGrid) == null)
{
break;
}
if(toggleAllBags)
{
child.GetComponent(InventoryGrid).HideBag();
}
else
{
if(!child.GetComponent(InventoryGrid).BagIsBeingDisplayed())
{
child.GetComponent(InventoryGrid).ShowBag();
}
}
}
if(toggleAllBags)
{
toggleAllBags = false;
}
else
{
toggleAllBags = true;
}
}
if(Input.GetMouseButtonUp(0) && !buttonClicked && objAttached)
{
ReleaseObjectFromInventory(LastSlotUsed);
LastSlotUsed = 63;
objAttached = false;
}
}
function GetPositionAvailable()
{
var found :boolean = false;
for(indexBags = 0 ; indexBags < flagAvailable.length;indexBags++)
{
if(flagAvailable[indexBags])
{
found = true;
break;
}
}
if(!found)
{
Debug.Log("Erro:Please ADD ");
return;
}
flagAvailable[indexBags] = false;
return Vector3(posBags[indexBags].x , posBags[indexBags].y , indexBags);
}
function FreePosition(t:int)
{
flagAvailable[t] = true;
}
function ReleaseObjectFromInventory( t : int)
{
mouseTextureHander.ReleaseCursorIcon();
objectsInBag[t].transform.parent = null ;
Destroy (objectsInBag[t]);
objectsInBag[t] = null;
/*
objectsInBag[t].active = true;
objectsInBag[t].transform.localPosition+= Vector3(0,1,0.5);
objectsInBag[t].transform.parent = null ;
mouseTextureHander.ReleaseCursorIcon();
objectsInBag[t] = null;
*/
}
function SaveObjectInInventory(obj :GameObject)
{
for(var i : int = 0; i < objectsInBag.length;i++)
{
if(objectsInBag[i] == null)
{
objectsInBag[i] = obj;
obj.transform.localPosition = Vector3.zero;
obj.active = false;
obj.transform.parent = transform;
return;
}
}
}
function GetObjectsInBag(t : int)
{
return objectsInBag[t];
}
function SetObjectInBag(t : int , obj : GameObject)
{
objectsInBag[t] = obj;
}
function SetLastSlotUsed( t : int)
{
LastSlotUsed = t;
}
function GetLastSlotUsed()
{
return LastSlotUsed;
}
function SetSlotMovedFlag( val : boolean)
{
slotMovedFlag = val;
}
function GetSlotMovedFlag()
{
return slotMovedFlag;
}
function GetButtonClicked()
{
return buttonClicked;
}
function SetButtonClicked(val : boolean)
{
buttonClicked = val;
}
function GetObjectAttached()
{
return objAttached;
}
function SetObjAttached(val :boolean)
{
objAttached = val;
}
浙公网安备 33010602011771号