q0 as Quaternion = transform.rotation
transform.LookAt(hint.transform)
q1 as Quaternion = transform.rotation
transform.rotation = Quaternion.Slerp(q0, q1, t)
var smooth = 5.0;
var tiltAngle = 90.0;
var pauseTime = 3.0;
private var tiltAroundX = 0.0;
private var target : Quaternion;
private var nextTime = 0.0;
function Update () {
if (Time.time > nextTime) {
nextTime = Time.time + pauseTime;
tiltAroundX += tiltAngle;
target = Quaternion.Euler (tiltAroundX, 0, 0);
}
transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);
}
Serge писал(а):Кстати ваш код мне не понятен, чему равно время начала анимации (startTime) и в какой момент вы его высчитываете?
using UnityEngine;
using System.Collections;
public class SoftRotation: MonoBehaviour {
public bool isRotate;
public float mainTime=5; //время интерполяции
public float elapsedTime;
public float mainValue;
public float minValue=0; //стартовая позиция
public float maxValue=180; //конечная позиция
void Start () {
}
// Update is called once per frame
void Update ()
{
if (Input.GetKey("space"))
isRotate = true;
if (isRotate)
{
elapsedTime+=Time.deltaTime;
float progression= elapsedTime/mainTime;
if (progression>1.0f) progression=1.0f;
mainValue=Hermite(minValue,maxValue,progression);
if (elapsedTime>mainTime) isRotate=false;
}
transform.rotation = Quaternion.Euler(0, mainValue, 0);
}
public static float Hermite(float start, float end, float value){
return Mathf.Lerp(start, end, value * value * (3.0f - 2.0f * value));
}
}
var sped = 1.0;
var pauseTime = 1.5;
var angleRot = 90;
var mObject : Transform;
private var spedPrivate = 0.0;
private var nextTime = 0.0;
function Update () {
if (Time.time > nextTime) {
nextTime = Time.time + pauseTime;
spedPrivate = 0.0;
}
spedPrivate += sped * Time.deltaTime;
mObject.localRotation = Quaternion.Euler(0, 0, Mathf.LerpAngle(0, angleRot, spedPrivate));
}
var sped = 0.5;
var pauseTime = 2.5;
var startAngle :Vector3;
var angleRot :Vector3;
var mObject : Transform;
private var spedPrivate = 0.0;
private var nextTime = 0.0;
private var endAngle :Vector3;
function Start () {
nextTime = Time.time + pauseTime;
angleRot = Vector3(90, 0, 0);
}
function Update () {
if (Time.time > nextTime) {
nextTime = Time.time + pauseTime;
spedPrivate = 0.0;
startAngle = mObject.localRotation.eulerAngles;
endAngle = startAngle + angleRot;
}
spedPrivate += sped * Time.deltaTime;
mObject.localRotation = Quaternion.Euler(Mathf.LerpAngle(startAngle.x, endAngle.x, spedPrivate), 0, 0);
}
Zavhoz писал(а):вот что получаетсяСинтаксис:Используется csharpusing UnityEngine;
using System.Collections;
public class SoftRotation: MonoBehaviour {
public bool isRotate;
public float mainTime=5; //время интерполяции
public float elapsedTime;
public float mainValue;
public float minValue=0; //стартовая позиция
public float maxValue=180; //конечная позиция
void Start () {
}
// Update is called once per frame
void Update ()
{
if (Input.GetKey("space"))
isRotate = true;
if (isRotate)
{
elapsedTime+=Time.deltaTime;
float progression= elapsedTime/mainTime;
if (progression>1.0f) progression=1.0f;
mainValue=Hermite(minValue,maxValue,progression);
if (elapsedTime>mainTime) isRotate=false;
}
transform.rotation = Quaternion.Euler(0, mainValue, 0);
}
public static float Hermite(float start, float end, float value){
return Mathf.Lerp(start, end, value * value * (3.0f - 2.0f * value));
}
}
часть кода взял на официальном WIKI (саму интерполяцию), часть подглядел в исходниках виртулза (из безьепрогресии)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9