add ckg
plantilla base para movimiento básico
This commit is contained in:
141
Assets/Game Kit Controller/Scripts/Devices/fallingPlatform.cs
Normal file
141
Assets/Game Kit Controller/Scripts/Devices/fallingPlatform.cs
Normal file
@@ -0,0 +1,141 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public class fallingPlatform : MonoBehaviour
|
||||
{
|
||||
[Header ("Main Settings")]
|
||||
[Space]
|
||||
|
||||
public float movementSpeed;
|
||||
public bool fallInTouch;
|
||||
public bool fallInTime;
|
||||
public float fallDelay;
|
||||
public bool resetDelayInExit;
|
||||
public float timeToBackInPosition;
|
||||
public float extraForceInFall;
|
||||
|
||||
public bool keepFallCheckOnFirstContact;
|
||||
|
||||
[Space]
|
||||
[Header ("Components")]
|
||||
[Space]
|
||||
|
||||
public Rigidbody mainRigidbody;
|
||||
|
||||
bool inside;
|
||||
bool platformFallen;
|
||||
bool movePlatformToPosition;
|
||||
float timeOnPlatform;
|
||||
float fallenTime;
|
||||
Vector3 originalPosition;
|
||||
Quaternion originalRotation;
|
||||
|
||||
bool checkingToFallPlatform;
|
||||
|
||||
|
||||
void Start ()
|
||||
{
|
||||
if (mainRigidbody == null) {
|
||||
mainRigidbody = GetComponent<Rigidbody> ();
|
||||
}
|
||||
|
||||
originalPosition = transform.position;
|
||||
originalRotation = transform.rotation;
|
||||
}
|
||||
|
||||
void Update ()
|
||||
{
|
||||
if (!movePlatformToPosition) {
|
||||
if (platformFallen && mainRigidbody.linearVelocity.magnitude < 1) {
|
||||
fallenTime += Time.deltaTime;
|
||||
|
||||
if (fallenTime > timeToBackInPosition) {
|
||||
StartCoroutine (moveToOriginalPosition ());
|
||||
|
||||
}
|
||||
} else {
|
||||
bool checkingToFall = false;
|
||||
|
||||
if (inside) {
|
||||
checkingToFall = true;
|
||||
} else {
|
||||
if (keepFallCheckOnFirstContact && checkingToFallPlatform) {
|
||||
checkingToFall = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (checkingToFall) {
|
||||
if (fallInTouch) {
|
||||
mainRigidbody.isKinematic = false;
|
||||
|
||||
mainRigidbody.AddForce (-transform.up * extraForceInFall);
|
||||
|
||||
platformFallen = true;
|
||||
fallenTime = 0;
|
||||
inside = false;
|
||||
|
||||
checkingToFallPlatform = false;
|
||||
}
|
||||
|
||||
if (fallInTime) {
|
||||
timeOnPlatform += Time.deltaTime;
|
||||
|
||||
if (timeOnPlatform > fallDelay) {
|
||||
mainRigidbody.isKinematic = false;
|
||||
|
||||
mainRigidbody.AddForce (-transform.up * extraForceInFall);
|
||||
|
||||
platformFallen = true;
|
||||
fallenTime = 0;
|
||||
inside = false;
|
||||
|
||||
checkingToFallPlatform = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnCollisionEnter (Collision col)
|
||||
{
|
||||
if (col.gameObject.CompareTag ("Player") && !inside && !platformFallen) {
|
||||
inside = true;
|
||||
|
||||
if (!checkingToFallPlatform) {
|
||||
timeOnPlatform = 0;
|
||||
}
|
||||
|
||||
checkingToFallPlatform = true;
|
||||
}
|
||||
}
|
||||
|
||||
void OnCollisionExit (Collision col)
|
||||
{
|
||||
if (col.gameObject.CompareTag ("Player") && inside) {
|
||||
inside = false;
|
||||
|
||||
if (resetDelayInExit) {
|
||||
timeOnPlatform = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator moveToOriginalPosition ()
|
||||
{
|
||||
platformFallen = false;
|
||||
|
||||
mainRigidbody.isKinematic = true;
|
||||
|
||||
movePlatformToPosition = true;
|
||||
|
||||
while (GKC_Utils.distance (transform.position, originalPosition) > .01f) {
|
||||
transform.position = Vector3.MoveTowards (transform.position, originalPosition, Time.deltaTime * movementSpeed);
|
||||
transform.rotation = Quaternion.Slerp (transform.rotation, originalRotation, Time.deltaTime * movementSpeed);
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
movePlatformToPosition = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user