- Home /
Opening a door with a key
I am having some trouble getting my character to open the door once the key is picked up. I used to have it working without the key, but now that I've added the key it won't open the door when the character picks up the key, any suggestions? Heres the code:
Player:
var doorScript : Door;
var have_key = false;
function Update () {
var hit : RaycastHit;
Debug.DrawRay(transform.position, transform.forward * 2, Color.red);
if (Physics.Raycast(transform.position, transform.forward, hit, 2)) {
if ((hit.collider.gameObject.tag == "Door") && (Input.GetButtonUp("Action") ) ) {
if (doorScript.doorState == DoorStates.locked) {
doorScript.doorState = DoorStates.unlocked;
} else if (doorScript.doorState == DoorStates.unlocked && have_key) {
doorScript.Open();
}
}
}
}
function OnCollisionEnter (theCollision : Collision){
if (theCollision.gameObject.tag == "Key")
have_key=true;
}
Door Trigger:
var doorScript : Door;
function OnTriggerEnter (col : Collider) {
if ((col.gameObject.tag == "MainCamera") && (doorScript.doorState == DoorStates.unlocked) ) {
doorScript.Open();
}
}
Door:
enum DoorStates {open, unlocked, locked};
var doorState : DoorStates;
function Awake() {
doorState = DoorStates.locked;
}
function Update () {
Debug.Log(doorState);
}
function Open() {
animation.Play("Open");
doorState = DoorStates.open;
}
also this is the pick up script for the key (used from lerpz): enum PickupType { Health = 0, FuelCell = 1 } var pickupType = PickupType.FuelCell; var amount = 1; var sound : AudioClip; var soundVolume : float = 2.0;
private var used = false; private var mover : Droppable$$anonymous$$over;
function Start () { // do we exist in the level or are we instantiated by an enemy dying? mover = GetComponent(Droppable$$anonymous$$over); }
function ApplyPickup (playerStatus : ThirdPersonStatus) { // A switch...case statement may seem overkill for this, but it makes adding new pickup types trivial. switch (pickupType) { case PickupType.Health: playerStatus.AddHealth(amount); break;
case PickupType.FuelCell:
playerStatus.FoundItem(amount);
break;
}
return true;
}
function OnTriggerEnter (col : Collider) { if(mover && mover.enabled) return; var playerStatus : ThirdPersonStatus = col.GetComponent(ThirdPersonStatus);
//* $$anonymous$$ake sure we are running into a player
//* prevent picking up the trigger twice, because destruction
// might be delayed until the animation has finished
if (used || playerStatus == null)
return;
if (!ApplyPickup (playerStatus))
return;
used = true;
// Play sound
if (sound)
AudioSource.PlayClipAtPoint(sound, transform.position, soundVolume);
// If there is an animation attached.
// Play it.
if (animation && animation.clip)
{
animation.Play();
Destroy(gameObject, animation.clip.length);
}
else
{
Destroy(gameObject);
}
}
// Auto setup the pickup function Reset () { if (collider == null)
gameObject.AddComponent(BoxCollider); collider.isTrigger = true; }
@script RequireComponent(SphereCollider) @script AddComponent$$anonymous$$enu("Third Person Props/Pickup")
Your answer
Follow this Question
Related Questions
Opening a door with a key 2 Answers
Open door with key 2 Answers
Activate object with key 1 Answer
Opening Door with Key 1 Answer