Unity API常用方法和类学习笔记3

Unity API常用方法和类学习笔记3

------Quaternion & Rigidbody & Camera & Application

结构体Quaternion

欧拉角-----三维变量,注意:其中y轴值改变时,是绕世界坐标系中的垂直方向旋转
在这里插入图片描述
四元数Quaternion
一、静态变量
在这里插入图片描述
二、普通变量

		public Transform cube;
		void Start() {
				print(cube.eulerAngles);//返回值为Vector3类型---同欧拉角
      			print(cube.rotation);//返回值为四元数
		}

三、静态方法

	public Transform cube;
    public Transform player;
    public Transform enemy;
    
    void Start () {
        //1、Euler
        cube.eulerAngles = new Vector3(45, 45, 45);//通过改变结构体Quaternion的返回值为Vector3类型的普通变量的值,达到与视觉同步的旋转
        cube.rotation = Quaternion.Euler(new Vector3(45, 45, 45));//将欧拉角转换为四元数
        print(cube.rotation.eulerAngles);//将四元数转换为欧拉角

        //2、LookRotation
        Vector3 dir = enemy.position - player.position;
        dir.y = 0;//不倾斜
        player.rotation = Quaternion.LookRotation(dir);//让主角看向敌人
    }
	
	void Update () {
        //3、Lerp & Slerp
        if (Input.GetKey(KeyCode.Space))
        {
            Vector3 dir = enemy.position - player.position;
            dir.y = 0;
            Quaternion target = Quaternion.LookRotation(dir);
            //player.rotation = Quaternion.Lerp(player.rotation, target, Time.deltaTime);//Time.deltaTime * 小数降低旋转速度
            player.rotation = Quaternion.Slerp(player.rotation, target, Time.deltaTime);//推荐使用,动画效果平滑
        }
    }

类Rigidbody

—Inherits from:Component

一、自身变量及方法

	public Rigidbody playerRgd;
    public Transform enemy;
    public int force;
   
    void Update () {
        //1、position(变量) & MovePosition(公有方法)
        playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime;//比Transform.Position运行快,节省性能建议仅一次改变使用
        //推荐使用,运动更平滑
        playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime);


        //2、rotation(变量) & MoveRotation(公有方法)
        if (Input.GetKey(KeyCode.Space))
        {
            Vector3 dir = enemy.position - playerRgd.position;
            dir.y = 0;
            Quaternion target = Quaternion.LookRotation(dir);
            //playerRgd.rotation = Quaternion.Lerp(playerRgd.rotation, target, Time.deltaTime);
            playerRgd.MoveRotation(Quaternion.Lerp(playerRgd.rotation, target, Time.deltaTime));//更加节省性能、效果更连续、平滑
        }


        //3、AddForce(公有方法)---用于模拟物理效果
        playerRgd.AddForce(Vector3.forward * force);
    }

二、继承成员
在这里插入图片描述

类Camera

—Inherits from:Behaviour(类Behaviour–Inherits from:Component)

一、静态变量–main:获取Camera组件

	private Camera mainCamera;
	void Start () {
        //mainCamera = GameObject.Find("MainCamera").GetComponent<Camera>();
        mainCamera = Camera.main;//使用时需保证Camera的tag值为默认值:MainCamera
    }

二、公有方法

	void Update () {
        //ScreenPointToRay将点转化成射线
        Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);//返回值为射线
        RaycastHit hit;//用于存储碰撞到的游戏物体
        bool isCollider = Physics.Raycast(ray, out hit);//将碰撞到的物体存储变量传入:out类型的引用参数
        if (isCollider)
        {
            Debug.Log(hit.collider);//hit.collider就是射线所碰撞到的游戏物体碰撞器
        }

        Ray ray1 = mainCamera.ScreenPointToRay(new Vector3(200, 200, 0));
        Debug.DrawRay(ray.origin, ray1.direction * 10, Color.yellow);//画出射线,类Debug中的静态方法
    }

另:Camera上锥体范围才为视野的真正范围
在这里插入图片描述

三、拓展:API19Ray(射线碰撞检测)
—在类Physics当中,射线可无长度也可有长度

	public GameObject player;
    // Use this for initialization
    void Start () {
        //1、Raycast--返回值为bool类型变量
        Ray ray = new Ray(player.transform.position, player.transform.forward);//Ray(起点,方向)
    }
	
	// Update is called once per frame
	void FixedUpdate () {
        //1、Raycast--返回值为bool类型变量
        Ray ray = new Ray(player.transform.position, player.transform.forward);//Ray(起点,方向)
        //此时可能会与自身发生碰撞,isCollider==true------可通过改变射线的起点避免
        
        //重载1                                                                      
        bool isCollider = Physics.Raycast(ray);

        //重载2
        bool isCollider = Physics.Raycast(ray, 1);//+长度

        //重载3
        RaycastHit hit;//用于存储碰撞到的游戏物体
        bool isCollider = Physics.Raycast(ray, out hit);//将碰撞到的物体存储变量传入:out类型的引用参数
        Debug.Log(hit.collider);//hit.collider就是射线所碰撞到的游戏物体碰撞器
        Debug.Log(hit.point);//碰撞的位置

        //重载4
        bool isCollider = Physics.Raycast(ray, Mathf.Infinity, LayerMask.GetMask("Enemy1", "UI"));//可多个
        /*Note:LayerMask为用于在投射光线时选择性忽略碰撞器的层遮罩,即要忽略的层,Enemy1--层名
                须有距离,若保持无限大--设置较大数字10000或Mathf.Infinity*/
                
        Debug.Log(isCollider);
        
    }
    void Update()
    {
        //2、RaycastAll---检测所有碰撞到的物体,返回数组RaycastHit[]
        RaycastHit[] hits;
        hits = Physics.RaycastAll(transform.position, transform.forward, 100.0F);
    }

另:2D射线—Physics2D.Raycast();具体用法与3D大同小异

四、继承成员
在这里插入图片描述

类Application

一、Application.xxxPath----返回路径(目录)

StreamingAssets–流文件资源(音视频资源):不会被合并;要打开需使用Application.streamingAssetsPath
在这里插入图片描述

常用:
print(Application.dataPath);//返回工程路径:存放数据
print(Application.streamingAssetsPath);//可通过文件流来进行读取的一些数据
print(Application.persistentDataPath);//永久的数据(可持久化)
print(Application.temporaryCachePath);//临时的缓冲数据

二、静态变量----大部分可在Build Settings…-PlayerSettings中进行设定
1、installMode–共有的静态ApplicationInstallMode类型(enumeration枚举)的变量

枚举类型ApplicationInstallMode中变量DeveloperBuild—可用此进行联调:连接设备进行错误的调试,看看在实际设备上运行有什么问题

2、isEditor–判断是否在编译器模式下运行
3、isFocused–是否处于焦点:Game窗口下是焦点
4、isMobilePlatform–是否在移动设备上运行
5、isPlaying–是否运行:只有在编译器模式下运行才会返回true
6、platform–判断当前的运行环境,返回RuntimePlatform(enumeration枚举)类型的变量:各大平台
7、productName–产品名;installerName–安装包名
8、runInBackground–判断应用是否可以在后台运行(Note: This property is ignored on Android and iOS.)

三、常用静态方法
1、OpenURL–可用于在游戏中添加网站链接
2、Quit–退出应用:在编辑器模式下调用Quit不可退出(在编辑器模式下可通过设置isPlaying=false退出)

void Start () {
        //测试举例
        print(Application.identifier);
        print(Application.companyName);
        print(Application.productName);
        print(Application.installerName);
        print(Application.installMode);
        print(Application.isEditor);
        print(Application.isFocused);
        print(Application.isMobilePlatform);
        print(Application.isPlaying);
        print(Application.isWebPlayer);
        print(Application.platform);
        print(Application.unityVersion);
        print(Application.version);
        print(Application.runInBackground);

        Application.Quit();
        Application.OpenURL("www.baidu.com");
    }

    void Update () {
        //在编辑器模式设置isPlaying=false退出
        if (Input.GetKeyDown(KeyCode.Space))
        {
            UnityEditor.EditorApplication.isPlaying = false;
        }
    }

测试运行截图
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值