- Home /
Door Script Help!
I really can't figure it out how to solve this script. I want to make a door script without Animation because it's too complicated, i use iTween. What i want to ask is
How to make the door require a key to open it?
I have many same door in my scene, and i made it an array but what i got is "InvalidCastException: Cannot cast from source type to destination type. InputMan.Start () (at Assets/SKIPPER'S/Scripts/InputMan.js:9)"
i have 3 scripts below. first. Door.js it's attached to pCube (un-triggered box Collider)
enum DoorStates {open, unlocked, locked};
var doorState : DoorStates;
var doorShutSound : AudioClip;
var doorOpenSound : AudioClip;
var timer : float;
var rotation : float;
var direction : String;
var originalRotation : float;
var originalDirection : String;
var requireKey : boolean;
var howMuchKey : int;
function Awake(){
doorState = DoorStates.locked;
}
function Open(){
audio.PlayOneShot(doorOpenSound);
iTween.rotateTo(gameObject, {direction:rotation, "time":timer});
doorState = DoorStates.open;
}
function Closed(){
audio.PlayOneShot(doorShutSound);
iTween.rotateTo(gameObject, {originalDirection:originalRotation, "time":timer});
doorState = DoorStates.locked;
}
And this is Doorscript.js attached to triggered box collider
var doorScript : Door;
function OnTriggerEnter (col : Collider){
if((col.gameObject.tag == "Player") && (doorScript.doorState == DoorStates.unlocked)){
BroadcastMessage("Open");
}
}
function OnTriggerExit (other:Collider){
if(other.gameObject.tag == "Player"){
if(doorScript.doorState == DoorStates.open || doorScript.doorState == DoorStates.unlocked){
//BroadcastMessage("Closed");
}
}
}
And this is the last one. InputMan.js attached to First Person Controller
var doorScript : Door[];
function Start(){
doorScript = gameObject.GetComponents (Door);
}
function Update(){
var hit : RaycastHit;
if(Physics.Raycast(transform.position, transform.forward, hit, 2)){
if (Input.GetKeyUp("e")){
for(var dr : Door in doorScript){
if(hit.collider.gameObject.tag == "Door"){
if(dr.doorState == DoorStates.locked) dr.doorState = DoorStates.unlocked;
else if (dr.doorState == DoorStates.unlocked) dr.Open();
}
}
Your answer
Follow this Question
Related Questions
Need help cycling through an array with a 'for' loop. 0 Answers
iTween: Cannot cast from source type to destination type. 1 Answer
Push down GUI everytime for loop cycles through Array 1 Answer
Javascript for loops and Arrays. 2 Answers
Find children and set them all to be kinematic rigidbodies 1 Answer