Created
January 13, 2018 15:53
-
-
Save blue0513/e43456aa23a8b61ea5f7e10c64a40c47 to your computer and use it in GitHub Desktop.
Set GameObject Property (Pos, Rot, Size) with Lerp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
// Set Object Property (Pos, Rot, Size) with Lerp | |
public class ObjectPropertyDirector : MonoBehaviour { | |
private Vector3 modifyAngles (Vector3 rot) { | |
rot.x = modifyAngle (rot.x); | |
rot.y = modifyAngle (rot.y); | |
rot.z = modifyAngle (rot.z); | |
return rot; | |
} | |
// convert angle from (-360 to 360) to (-180 to 180) | |
private float modifyAngle (float _deltaAngle) { | |
float deltaAngle = _deltaAngle; | |
if (Mathf.Abs (_deltaAngle) > 180f) { | |
if (_deltaAngle > 0f) { | |
deltaAngle = _deltaAngle - 360f; | |
} else { | |
deltaAngle = _deltaAngle + 360f; | |
} | |
} | |
return deltaAngle; | |
} | |
private IEnumerator _setObjectProperty (GameObject obj, Vector3 endSize, Vector3 endPos, Vector3 endRot, float span) { | |
float timer = 0f; | |
Vector3 startSize = obj.transform.localScale; | |
Vector3 startPos = obj.transform.position; | |
Vector3 startRot = obj.transform.eulerAngles; | |
startRot = modifyAngles (startRot); | |
while (timer < span) { | |
timer += Time.deltaTime; | |
Vector3 size = Vector3.Lerp (startSize, endSize, timer / span); | |
Vector3 pos = Vector3.Lerp (startPos, endPos, timer / span); | |
Vector3 rot = Vector3.Lerp (startRot, endRot, timer / span); | |
obj.transform.localScale = size; | |
obj.transform.position = pos; | |
obj.transform.eulerAngles = rot; | |
yield return null; | |
} | |
obj.transform.localScale = endSize; | |
obj.transform.position = endPos; | |
obj.transform.eulerAngles = endRot; | |
yield return null; | |
} | |
// set "obj" to specific "endSize" or "endPos" or "endRot" | |
public void setObjectProperty (GameObject obj, Vector3 endSize, Vector3 endPos, Vector3 endRot, float span) { | |
StartCoroutine (_moveObject (obj, endSize, endPos, endRot, span)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment