- Home /
Iterating a GO through an array of transform positions
Hi! I have an issue with a script I'm implementing for an object-based inventory system. This script is attached to a plane , which has 3 rows of boxes parented to it in a grid formation.
A separate object, also parented to the plane is supposed to cycle through each transform position (A1-F3) when the user presses the Left Arrow or Right Arrow.
The Element number increases as expected, however, the "Selector" does not change position.
How can I make this function correctly?
Here is my script:
var itemContainer : GameObject;
var nextItem = 0;
var itemSlots = new Array();
var visible : boolean = false;
var mainCam : GameObject;
var invCam : GameObject;
var A1 : Transform;
var B1 : Transform;
var C1 : Transform;
var D1 : Transform;
var E1 : Transform;
var F1 : Transform;
var A2 : Transform;
var B2 : Transform;
var C2 : Transform;
var D2 : Transform;
var E2 : Transform;
var F2 : Transform;
var A3 : Transform;
var B3 : Transform;
var C3 : Transform;
var D3 : Transform;
var E3 : Transform;
var F3 : Transform;
var formS : GameObject;
var skillS : GameObject;
var selector : GameObject;
function Start(){
itemContainer = GameObject.FindWithTag("InvGrid");
mainCam = GameObject.FindWithTag("MainCamera");
invCam = GameObject.FindWithTag("Inv Camera");
selector = GameObject.FindWithTag("Selector");
itemSlots.length = 18;
}
function Update(){
if(Input.GetKeyDown(KeyCode.F1)){
visible = !visible;
if(visible){
DisableInput();
mainCam.GetComponent(Camera).enabled = false;
invCam.GetComponent(Camera).enabled = true;
Time.timeScale = 0;
}else{
EnableInput();
mainCam.GetComponent(Camera).enabled = true;
invCam.GetComponent(Camera).enabled = false;
Time.timeScale = 1;
}
}
if(Input.GetKeyDown(KeyCode.RightArrow)){
nextItem++;
}
if(Input.GetKeyDown(KeyCode.LeftArrow)){
nextItem--;
}
if(nextItem < 0){
nextItem = itemSlots.length -1;
}else if(nextItem > itemSlots.length -1){
nextItem = 0;
}
itemSlots[0] = A1.transform.position;
selector.transform.position = A1.transform.position - Vector3(0,0,4);
itemSlots[1] = B1.transform.position;
selector.transform.position = B1.transform.position - Vector3(0,0,4);
itemSlots[2] = C1.transform.position;
selector.transform.position = C1.transform.position - Vector3(0,0,4);
itemSlots[3] = D1.transform.position;
selector.transform.position = D1.transform.position - Vector3(0,0,4);
itemSlots[4] = E1.transform.position;
selector.transform.position = E1.transform.position - Vector3(0,0,4);
itemSlots[5] = F1.transform.position;
selector.transform.position = F1.transform.position - Vector3(0,0,4);
itemSlots[6] = A2.transform.position;
selector.transform.position = A2.transform.position - Vector3(0,0,4);
itemSlots[7] = B2.transform.position;
selector.transform.position = B2.transform.position - Vector3(0,0,4);
itemSlots[8] = C2.transform.position;
selector.transform.position = C2.transform.position - Vector3(0,0,4);
itemSlots[9] = D2.transform.position;
selector.transform.position = D2.transform.position - Vector3(0,0,4);
itemSlots[10] = E2.transform.position;
selector.transform.position = E2.transform.position - Vector3(0,0,4);
itemSlots[11] = F2.transform.position;
selector.transform.position = F2.transform.position - Vector3(0,0,4);
itemSlots[12] = A3.transform.position;
selector.transform.position = A3.transform.position - Vector3(0,0,4);
itemSlots[13] = B3.transform.position;
selector.transform.position = B3.transform.position - Vector3(0,0,4);
itemSlots[14] = C3.transform.position;
selector.transform.position = C3.transform.position - Vector3(0,0,4);
itemSlots[15] = D3.transform.position;
selector.transform.position = D3.transform.position - Vector3(0,0,4);
itemSlots[16] = E3.transform.position;
selector.transform.position = E3.transform.position - Vector3(0,0,4);
itemSlots[17] = F3.transform.position;
selector.transform.position = F3.transform.position - Vector3(0,0,4);
}
function DisableInput(){
formS.GetComponent(FormSelect).enabled = false;
skillS.GetComponent(SkillSelect).enabled = false;
}
function EnableInput(){
formS.GetComponent(FormSelect).enabled = true;
skillS.GetComponent(SkillSelect).enabled = true;
}
To me it doesnt even look like your telling the Selector to move to the next Item when you hit the Arrow key at all.
When you detect that the User has hit an Arrow key you should be iterating the Selector through to the next Item. All you seem to be doing is setting the position of the Selector without any conditions.
Ok. Thanks for the feedback, but how would I go about telling the "Selector" to actually move to those positions?
Well you are.
selector.transform.position = F3.transform.position - Vector3(0,0,4);
Your just not doing it when you want it to. IE: When you detect that the player has pressed an Arrow key.
Well, before I wrote it like that, it was like this:
if(nextItem < 0){
nextItem = itemSlots.length -1;
}else if(nextItem > itemSlots.length -1){
nextItem = 0;
}
if(nextItem == 0){
itemSlots[0] = A1.transform.position;
selector.transform.position = GameObject.Find("A1").transform.position - Vector3(0,0,4);
return;
}
if(nextItem == 1){
itemSlots[1] = B1.transform.position;
selector.transform.position = GameObject.Find("B1").transform.position - Vector3(0,0,4);
return;
}
if(nextItem == 2){
itemSlots[2] = C1.transform.position;
selector.transform.position = GameObject.Find("C1").transform.position - Vector3(0,0,4);
return;
}
if(nextItem == 3){
itemSlots[3] = D1.transform.position;
selector.transform.position = GameObject.Find("D1").transform.position - Vector3(0,0,4);
return;
}
if(nextItem == 4){
itemSlots[4] = E1.transform.position;
selector.transform.position = GameObject.Find("E1").transform.position - Vector3(0,0,4);
return;
}
if(nextItem == 5){
itemSlots[5] = F1.transform.position;
selector.transform.position = GameObject.Find("F1").transform.position - Vector3(0,0,4);
return;
}
if(nextItem == 6){
itemSlots[6] = A2.transform.position;
selector.transform.position = GameObject.Find("A2").transform.position - Vector3(0,0,4);
return;
}
The conditional is placed in every block of code which contains an array Element or a transform position.
What I'm having trouble with is getting the selector object to move to each objects position. What am I missing?
Your answer
Follow this Question
Related Questions
How to get the size of an array of object? 2 Answers
Grid Based Map Object-Array vs Arrays only 1 Answer
.Shift() error 0 Answers