I am rather new to coding and I am having troubles with writing a script for being able to move multiple transforms in a sequence. In this case, the script is being used to control the opening and closing of drawers whenever the player interacts with them.
#pragma strict
var smooth : float = 1;
var openAmount : float = .5;
var drawerCount : int = 1;
var drawer1 : GameObject;
var drawer2 : GameObject;
var drawer3 : GameObject;
private var defaultPos1 : Vector3;
private var defaultPos2 : Vector3;
private var defaultPos3 : Vector3;
private var openPos1 : Vector3;
private var openPos2 : Vector3;
private var openPos3 : Vector3;
var drawerState : int = 0;
function Start(){
defaultPos1 = drawer1.transform.position;
defaultPos2 = drawer2.transform.position;
defaultPos3 = drawer3.transform.position;
openPos1 = new Vector3 (defaultPos1.x - openAmount, defaultPos1.y, defaultPos1.z);
openPos2 = new Vector3 (defaultPos2.x - openAmount, defaultPos2.y, defaultPos2.z);
openPos3 = new Vector3 (defaultPos3.x - openAmount, defaultPos3.y, defaultPos3.z);
}
function use() {
drawerState = ++drawerState;
if (drawerState > drawerCount){
drawerState = 0;
}
}
function Update() {
if (drawerState == 0) {
drawer1.transform.position = Vector3.Lerp(drawer1.transform.position, defaultPos1, Time.deltaTime * smooth);
drawer2.transform.position = Vector3.Lerp(drawer2.transform.position, defaultPos2, Time.deltaTime * smooth);
drawer3.transform.position = Vector3.Lerp(drawer3.transform.position, defaultPos3, Time.deltaTime * smooth);
}
if (drawerState == 1) {
drawer1.transform.position = Vector3.Lerp(drawer1.transform.position, openPos1, Time.deltaTime * smooth);
drawer2.transform.position = Vector3.Lerp(drawer2.transform.position, defaultPos2, Time.deltaTime * smooth);
drawer3.transform.position = Vector3.Lerp(drawer3.transform.position, defaultPos3, Time.deltaTime * smooth);
}
if (drawerState == 2) {
drawer1.transform.position = Vector3.Lerp(drawer1.transform.position, defaultPos1, Time.deltaTime * smooth);
drawer2.transform.position = Vector3.Lerp(drawer2.transform.position, openPos2, Time.deltaTime * smooth);
drawer3.transform.position = Vector3.Lerp(drawer3.transform.position, defaultPos3, Time.deltaTime * smooth);
}
if (drawerState == 3) {
drawer2.transform.position = Vector3.Lerp(drawer2.transform.position, defaultPos2, Time.deltaTime * smooth);
drawer3.transform.position = Vector3.Lerp(drawer3.transform.position, openPos3, Time.deltaTime * smooth);
drawer1.transform.position = Vector3.Lerp(drawer1.transform.position, defaultPos1, Time.deltaTime * smooth);
}
}
When using this on an object that has 3 openable drawers, it works flawlessly. However, if I use it on an object that only has one drawer, it moves to an entirely different location than intended, which I have found to be because there are not two other game objects that the script that can be controlled by it. Null reference and whatnot.
So how would I write this so that it can be more versatile? I can not find a way to simplify this with my current knowledge. Thanks for any help or advice.