引导:
Quaternion.Slerp()是插值计算,用它实现的旋转不是匀速的
目标:
3秒内,物体绕Y轴顺时针转动90°
效果:
代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestYunSuZhuan : MonoBehaviour
{
public bool flag = true;
void Awake()
{
}
void Start()
{
}
//目标:3秒内,物体绕Y轴转动90°
void Update()
{
if(flag)
{
transform.Rotate(Vector3.up * 30 * Time.deltaTime);//每秒转动30°
//if(transform.eulerAngles==new Vector3(0,90,0))//这样写停不住,因为此处Vector3的Y值,是小数点后多位浮点数,精确不到90.000000f
if(transform.eulerAngles.y>=90)
{
flag = false;
transform.eulerAngles = new Vector3(0, 90, 0);
}
}
}
}
transform.eulerAngles的坑:
打印transform.eulerAngles.y,它的取值范围是[0,360]——物体绕Y轴由0°转到-90°,换成transform.eulerAngles.y,是由360°转到了270°
逆时针转90°代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestYunSuZhuan : MonoBehaviour
{
public bool flag = true;
void Awake()
{
}
void Start()
{
}
//目标:3秒内,物体绕Y轴转动-90°
void Update()
{
if(flag)
{
transform.Rotate(Vector3.up * (-1)*30 * Time.deltaTime);//每秒转动30°
if(transform.eulerAngles.y<=270)
{
flag = false;
transform.eulerAngles = new Vector3(0, -90, 0);
}
}
}
}