一、使用Random生成随机数
public class API13Random : MonoBehaviour
{
void Start ()
{
//Random.InitState(0);//往里面传了一个种子0或其他值(这样得到的随机数会一样)
Random.InitState((int)System.DateTime.Now.Ticks);//会根据当前时间进行初始化(下面得到的随机数会不一样)
}
void Update ()
{
//print(Random.Range(4,10));//整数生成4到10之间的数,不包含10
//print(Random.Range(4,10f));//小数
if (Input.GetKeyDown(KeyCode.Space))
{
print(Random.Range(4,100));//种子一样得出的随机数序列一样,是伪随机数
print((int)System.DateTime.Now.Ticks);//当前时间减去时间戳得到一个时间间隔(不断变化)
}
}
}
二、其他随机生成方法介绍
public class API13Random : MonoBehaviour
{
public Transform cube;
void Start ()
{
//Random.InitState(0);//往里面传了一个种子0或其他值(这样得到的随机数会一样)
//Random.InitState((int)System.DateTime.Now.Ticks);//会根据当前时间进行初始化(下面得到的随机数会不一样)
}
void Update ()
{
//print(Random.Range(4,10));//整数生成4到10之间的数,不包含10
//print(Random.Range(4,10f));//小数
//if (Input.GetKeyDown(KeyCode.Space))
//{
// print(Random.Range(4, 100));//种子一样得出的随机数序列一样,是伪随机数
// print((int)System.DateTime.Now.Ticks);//当前时间减去时间戳得到一个时间间隔(不断变化)
//}
//其他随机生成方法介绍可以生成敌人
//是在一个圆里面随机生成(cube会在圆里面运动)
//cube.position = Random.insideUnitCircle * 5;
//是在一个球里面随机生成(cube会在球里面运动)
cube.position = Random.insideUnitSphere * 5;
}
}
三、Quaternion四元数以及和欧拉角的区别
Quaternion是一个结构体。可以把一个四元素转换成欧拉角来旋转(这里我一直都不是很明白,四元素是如何用于旋转的,如果有大佬可以教教就再好不过啦哈哈)四元素方便进行计算
public class API14Quaternion : MonoBehaviour
{
public Transform cube;
void Start ()
{
//世界的旋转,当父物体旋转时,子物体的localAngles度数才会跟世界的eulerAngles旋转度数不一样
//返回的是Inspector面板上rotation的V3值eulerAngles可以把一个四元数变成一个欧拉角
print(cube.eulerAngles);//可以自己设置值
print(cube.rotation);
//给欧拉角赋值
//cube.eulerAngles = new Vector3(10,0,0);
}
void Update ()
{
}
}
四、Quaternion中的LookRotation方法
Euler可以把一个欧拉角变成四元数
LookRotation让敌人望向主角的时候会用到
public class API14Quaternion : MonoBehaviour
{
public Transform cube;
//测试LookRotation的用法
public Transform player;
public Transform enemy;
void Start ()
{
//世界的旋转,当父物体旋转时,子物体的localAngles度数才会跟世界的eulerAngles旋转度数不一样
//返回的是Inspector面板上rotation的V3值
//print(cube.eulerAngles);//可以自己设置值
//print(cube.rotation);
//给欧拉角赋值
//cube.eulerAngles = new Vector3(10,0,0);
//Quaternion中的LookRotation方法
//cube.eulerAngles = new Vector3(45,45,45);第一种方法
//把里面new Vector3(45, 45, 45)的这个欧拉角准换成四元数,再赋值给rotation
//cube.rotation = Quaternion.Euler(new Vector3(45, 45, 45));//欧拉角转换成四元数
//print(cube.rotation.eulerAngles);//四元数转换成欧拉角
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))//这个会立马转向
{
Vector3 dir = enemy.position - player.position;//是从玩家望向敌人的
dir.y = 0;//这样做是为了防止玩家与敌人的高度不一致导致玩家弯腰的情况,这样就忽略了高度差
player.rotation = Quaternion.LookRotation(dir);//这里将向量转换成四元数,就是玩家要旋转
}
}
}
五、Quaternion中的Lerp和Slerp插值运算
public class API14Quaternion : MonoBehaviour
{
public Transform cube;
//测试LookRotation的用法
public Transform player;
public Transform enemy;
void Start ()
{
//世界的旋转,当父物体旋转时,子物体的localAngles度数才会跟世界的eulerAngles旋转度数不一样
//返回的是Inspector面板上rotation的V3值
//print(cube.eulerAngles);//可以自己设置值
//print(cube.rotation);
//给欧拉角赋值
//cube.eulerAngles = new Vector3(10,0,0);
//Quaternion中的LookRotation方法
//cube.eulerAngles = new Vector3(45,45,45);第一种方法
//把里面new Vector3(45, 45, 45)的这个欧拉角准换成四元数,再赋值给rotation
//cube.rotation = Quaternion.Euler(new Vector3(45, 45, 45));//欧拉角转换成四元数
//print(cube.rotation.eulerAngles);//四元数转换成欧拉角
}
void Update ()
{
//Quaternion中的Lerp和Slerp插值运算
if (Input.GetKey(KeyCode.Space))//这个会立马转向
{
Vector3 dir = enemy.position - player.position;//是从玩家望向敌人的
dir.y = 0;//这样做是为了防止玩家与敌人的高度不一致导致玩家弯腰的情况,这样就忽略了高度差
Quaternion target = Quaternion.LookRotation(dir);//这里将向量转换成四元数,就是玩家要旋转的目标
player.rotation = Quaternion.Slerp(player.rotation,target,Time.deltaTime);//现在区别不大,但是一般跟角度有关的推荐slerp
//player.rotation = Quaternion.Lerp(player.rotation,target,Time.deltaTime);
}
}
}