一、使用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);
        }
    }
}