- Home /
how do you make walls close in after an object is destroyed?
Hello Unity community. I have an issue that I cant figure out how to solve, I hope someone can help me. I have a side scroller game and the player is in a room. When the player picks up an object on Mousedown and timer begins to countdown. The player has a certain amount of time to place the object where it belongs before time runs out. When time runs out the object gets destroys then a particle effect instantiates. Also, I animated two planes, one called "leftWall" and the other "rightWall". I want the animation to play when the object gets destroyed then stop after 2 seconds. May someone help me out please?
here's my script and sorry for the sloppy organization.
var normalCollisionCount = 1;
var moveLimit = .5;
var collisionMoveFactor = .01;
var addHeightWhenClicked = 0.0;
var freezeRotationOnDrag = true;
var cam : Camera;
private var myRigidbody : Rigidbody;
private var myTransform : Transform;
private var canMove = false;
private var yPos : float;
private var gravitySetting : boolean;
private var freezeRotationSetting : boolean;
private var sqrMoveLimit : float;
private var collisionCount = 0;
private var camTransform : Transform;
var DollOneSound : AudioClip;
var dollExplode : Transform;
var countDown : GUIText;
static var TimerOn:boolean=false;
static var timer: float = 5; // set duration time in seconds in the Inspector
static var ExplodedDoll : boolean=false;
var rightWall : AnimationClip; //making walls close in
var leftWall : AnimationClip;
function Start () {
Timer=false; myRigidbody = rigidbody; myTransform = transform; if (!cam) { cam = Camera.main; } if (!cam) { Debug.LogError("Can't find camera tagged MainCamera"); return; } camTransform = cam.transform; sqrMoveLimit = moveLimit * moveLimit; // Since we're using sqrMagnitude, which is faster than magnitude }
function OnMouseDown () { canMove = true; myTransform.Translate(Vector3.up*addHeightWhenClicked); gravitySetting = myRigidbody.useGravity; freezeRotationSetting = myRigidbody.freezeRotation; myRigidbody.useGravity = false; myRigidbody.freezeRotation = freezeRotationOnDrag; yPos = myTransform.position.y; audio.PlayOneShot (DollOneSound); TimerOn = true;
}
function Update (){
if(TimerOn){
timer -= Time.deltaTime;
if (timer > 0){
countDown.text = timer.ToString("F0") +" " + "seconds";
} else {
var sparkle : Transform = Instantiate(dollExplode, transform.position, transform.rotation);
Destroy(gameObject);;
GameObject.Find("L_Wall").animation.Play("leftWall");
yield WaitForSeconds (1) ;
animation.Stop("leftWall");
GameObject.Find("R_Wall").animation.Play("rightWall");
yield WaitForSeconds (2) ;
animation.Stop("rightWall");
}
}
}
function OnMouseUp () { canMove = false; myRigidbody.useGravity = gravitySetting; myRigidbody.freezeRotation = freezeRotationSetting; TimerOn = false;
if (!myRigidbody.useGravity) {
myTransform.position.y = yPos-addHeightWhenClicked;
}
}
function OnCollisionEnter () { collisionCount++; }
function OnCollisionExit () { collisionCount--; }
function FixedUpdate () { if (!canMove) return;
myRigidbody.velocity = Vector3.zero;
myRigidbody.angularVelocity = Vector3.zero;
myTransform.position.y = yPos;
var mousePos = Input.mousePosition;
var move = cam.ScreenToWorldPoint(Vector3(mousePos.x, mousePos.y, camTransform.position.y - myTransform.position.y)) - myTransform.position;
move.y = 3.0;
if (collisionCount > normalCollisionCount) {
move = move.normalized*collisionMoveFactor;
}
else if (move.sqrMagnitude > sqrMoveLimit) {
move = move.normalized*moveLimit;
}
myRigidbody.MovePosition(myRigidbody.position + move);
}
@script RequireComponent(Rigidbody)
@script RequireComponent (AudioSource)
Hi, you must edit and mark the code as code so it formats properly - or else a moderator will delete.
Your answer
Follow this Question
Related Questions
Animations aren't playing in reverse. 0 Answers
Destroying Instantiated Prefab from AssetBundle 1 Answer
Solved: Destroy command not working 1 Answer
Respawn after delay 3 Answers
Instantiate prefab, add to list, destroy older prefab 1 Answer