unity开发知识点小结01

news2024/11/19 3:39:34

unity对象生命周期函数

Awake():最早调用,所以可以实现单例模式
OnEnable():组件激活后调用,在Awake后调用一次
Stat():在Update()之前,OnEnable()之后调用,可以在此设置一些初始值
Update():帧率调用方法,每帧调用一次,每次调用与上次调用时间间隔不相同
FixeUpdate():固定频率调用方法,每次调用与上次调用时间间隔相同
LateUpdate():在Update()每次调用完一次后,紧跟着调用一次
OnDisable():与OnEnable()相反,组件未激活时刻调用
OnDestroy():被销毁后调用一次

向量,坐标,旋转,缩放–Vector3的使用

Vector3 v= newVector(1,1,1;
Vector3 v2 = new Vector(1,1,0);
Vector3.Angle(v,v2)//两向量夹角
Vector3.Distance(v.v2);//两向量之间的距离
Vector3.Dot(v,v2);//两向量点乘
Vector3.Cross(v,v2);//两向量叉乘
Vector3.Lerp(Vector3.zero,vector3.one,0.8f);//插值
v.magnitude;//向量的模
v.normalized;//规范化向量

旋转:欧拉角,四元数

//欧拉角创建
Vector3 roate = new Vector3(0,30,0);
//四元数创建
Quaternion quaternion = Quaternion.identity;//创建没有旋转初始值为(0,0,0)的角度
//欧拉角转换为四元数
quaternion = Quaternion.Euler(ratate);
//四元数转换为欧拉角
rotate = quaternion.eulerAngles;
//看向一个物体穿件四元数
quaternion = Quaternion.LookRotation(New Vector3(0,0,0));

调试

//普通调试
Debug.log("test");
//提醒,警告
Debug.logWarning("text2");
//错误
Debug.logError("text3");

绘制线条

//绘制线段
Debug.DrawLine(new Vector3(1,0,0),new Vector3(1,1,0),Color.blue);
//绘制射线
Debug.DrawRay(new Vector3(1,0,0),new Vector3(1,1,0),Color.red);

挂载的脚本拿到游戏物体

//获取游戏对象
GameObject go = this.gameObject;
//获取对象名称
Debug.log(gameObject.name);
//获取对象的标签
Debug.log(gameObject.tag);
//获取对象的图层
Debug.log(gameObject.layer);

public GameObject Cube;//游戏中的物体

//获取预设体
public GameObject Prefab;

//当前真正激活的状态
Debug.log(Cube.activeInHieraachy);
//当前自身激活的状态
Debug.log(Cube.activeSelf);

//获取,添加组件
//获取Transform组件
Transform trans = this.transform;
Debug.log(transform.position);
//获取其他组件
BoxCollider bc = GetComponent<要获取组件的泛型>();
//获取当前物体的子物体身上的某个组件
GetComponentInChildren<CapsuleCollider>(bc);
//获取当前物体的父物体身上的某个组件
GetComponentInParent<BoxCollider>();
//添加一个组件
Cube.AddComponent<AudioSource>();

//通过物体名字在本物体的脚本内获取其他物体
GameObject text = GameObject.Find("物体名称");
//通过物体标签在本物体的脚本内获取其他物体
text = GameObject.FindWithTag("物体标签");
//设置物体激活状态
text.SetActive(false);

//通过预设体实例化一个游戏物体
Instantiate(Prefab);
//设定预设体的父物体
Instantiate(Prefab,transform);//将实例化的物体作为本物体的子物体
//设定预设体的初始位置
Instantiate(Prefab,Vector3.zero,Quaternion.identity);//初始位置为世界的中心并且没有旋转

//销毁物体
Destory(go);



//游戏开始到现在所花的时间
Debug.log(Time.time);
//时间缩放值
Debug.log(Time.timeScale);
//固定时间间隔
Debug.log(Time.fixedDeltaTime);


//Application类的属性与方法
//游戏数据文件夹路径(只读,加密文件)
Debug.log(Application.dataPath);
//持久化文件夹路径(可写)
Debug.log(Application.persistentDataPath);
//StreamingAssets文件夹路径(只读,配置文件)
Debug.log(Application.StreamingAssetsPath);
//临时文件夹
Debug.log(Application.temporaryCachepath);
//控制游戏是否早后台运行
Debug.log(Application.runInBackground);
//打开URL
Application.OpenURL("输入URL地址");
//退出游戏
Application.Quit(); 

用脚本实现场景切换,场景加载,场景卸载

//通过场景名称,跳转,加载场景
SceneManager.LoadScence("目标场景名称");
//获取当前场景
Scence scence  = ScenceManage.GetActiveScence();
Debug,log(scene.name);//输出场景名字
//场景是否已加载
Debug.log(scene.isLoaded);
//场景路径
Debug.log(scene.path);
//场景索引
Debug.log(scene.buildIndex);
//返回当前场景的所有游戏物体
GameObject[] gos = scene.GetRootGameObject();
Debug.log(gos.length);

//场景管理类
//当前已加载场景的数量
Debug.log(SceneManager.sceneCount);
//创建新场景
Scene newScene = SceneManager.CreateScene("新场景名称");
//卸载场景(异步卸载)
SceneManager.UnloadSceneAsync(newScene);

//加载场景方法2
SceneManager.LoadScene("场景名称",LoadSceneMode.Additive);//此方法会将加载出的场景内容与当前的场景内容叠加进行展示

场景的异步加载
在实现场景异步加载前应该将需要加载的场景加进Build中
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneChange : MonoBehaviour
{
    AsyncOperation operation;
    void Start()
    {
        //调用场景切换方法
        StartCoroutine(loadScene());
    }
    //协程方法用来异步加载场景
    IEnumerator loadScene() {
        operation = SceneManager.LoadSceneAsync(1);//异步切换场景
        //加载完之后不要自动跳转
        operation.allowSceneActivation = false;
        yield return operation;
    }
    float timer = 0;
    void Update()
    {
        //输出加载进度 进度范围0--0.9
        Debug.Log(operation.progress);
        //设置时间变量限制跳转时间
        timer += Time.deltaTime;
        //如果等待6秒就自动跳转
        if(timer > 6){
            operation.allowSceneActivation = true;
        }
    }
}

组件之间的父子级关系是靠transform来决定维系的
在这里插入图片描述

我们可以通过transform来控制物体的位置,旋转,缩放和父子级

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SphereText : MonoBehaviour
{
    
    void Start()
    {
        //获取物体位置
        Debug.Log(transform.position);//本物体相对于父物体的相对位置
        Debug.Log(transform.localPosition);//本物体在场景之中的位置
        //获取旋转
        Debug.Log(transform.rotation);//获取物体相对于父物体的旋转
        Debug.Log(transform.localRotation);//获取物体在场景中的旋转
        Debug.Log(transform.eulerAngles);//获取物体相对于父物体的四元数
        Debug.Log(transform.localEulerAngles);//获取在场景中的四元数
        //获取缩放
        Debug.Log(transform.localScale);
        //向量    三个坐标轴的方向向量
        Debug.Log(transform.forward);
        Debug.Log(transform.right);
        Debug.Log(transform.up);

        //父子关系
        GameObject gao = transform.parent.gameObject;//获取父物体
        //获取子物体的数量
        Debug.Log(transform.childCount);
        //解除与子物体的父子关系
        transform.DetachChildren();
        //获取子物体
        Transform trans = transform.Find("Child");//按照名字进行查找
        trans = transform.GetChild(0);//按照编号进行查找
        //判断一个物体是不是另一个物体的子物体
        bool res = trans.IsChildOf(transform);
        Debug.Log(res);
        //设置为父物体
        trans.SetParent(transform);
    }


    void Update()
    {
        //让本物体时时刻刻都看向固定位置
        transform.LookAt(Vector3.zero);
        //旋转
        transform.Rotate(Vector3.up,1);
        //绕某个物体旋转
        transform.RotateAround(Vector3.zero,Vector3.up,1);
        //移动
        transform.Translate(Vector3.forward*0.1f);
    }
}

键盘鼠标操作
因为监听鼠标键盘操作需要实时监听,所以需要将此操作放在Update()方法里

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class keyboard : MonoBehaviour
{
    void Start()
    {
        
    }
    void Update()
    {
        //监听鼠标 0左键  1右键 2滚轮 
        //按下鼠标键不放时触发
        if (Input.GetMouseButton(0)) {
            Debug.Log("持续按下鼠标左键");
        }
        //按下鼠标时触发
        if (Input.GetMouseButtonDown(0)) {
            Debug.Log("按下鼠标左键");
        }
        //松开鼠标键时触发
        if (Input.GetMouseButtonUp(0)) {
            Debug.Log("松开鼠标左键");
        }

        //监听键盘
        //按下键盘不松时触发
        if (Input.GetKey(KeyCode.A)) {
            Debug.Log("持续按下A键");
        }
        //按下A键时触发
        if (Input.GetKeyDown(KeyCode.A)) {
            Debug.Log("按下A键");
        }
        if(Input.GetKeyUp("a")){
            Debug.Log("松开A键");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++知识点】位运算

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…

海思嵌入式开发-005-OpenHarmony源码编译问题

海思嵌入式开发-005-OpenHarmony源码编译问题一、问题描述二、解决方案2.1解决原理2.2获取OpenHarmony 3.1.1 Release源码2.3最后解决问题&#xff0c;编译成功。一、问题描述 按照链接拉取master源码&#xff0c;出现如下问题&#xff0c;打开build.log文件 提示相应位置的文…

Servlet详细教程

文章目录Servletservlet 简介Servlet 入门案例页面编写页面提交 get 请求Servlet 和 Tomcat 关系servlet-apiget 和 post 请求Servlet 生命周期案例HttpServletRequest 接口简介文件上传FileServlet 类Servlet servlet 简介 servlet 全称为 server applet 是服务器的小程序&am…

龙腾iSharedisk无盘系统 v1.8 Build 20230207 Crack

龙腾 iShareDisk无盘系统是一款高品质的 无盘启动和VHD离线启动系统。其功能满足目前校园、网咖、企业、酒店、证券、服务业、KTV、包厢VOD的需求&#xff0c;其可以 自行选择部署有盘或者无盘&#xff0c;实现Windows全系列产品无盘/VHD 启动的一体化解决方案&#xff01; …

【Storm】【七】Storm三种打包方式对比分析

Storm三种打包方式对比分析 一、简介二、mvn package三、maven-assembly-plugin插件四、maven-shade-plugin插件五、结论六、打包注意事项一、简介 在将 Storm Topology 提交到服务器集群运行时&#xff0c;需要先将项目进行打包。本文主要对比分析各种打包方式&#xff0c;并…

MyBatis - 14 - 分页插件的配置及使用

文章目录1、分页插件配置&#xff08;1&#xff09;在pom.xml中添加依赖&#xff08;2&#xff09;在MyBatis的核心配置文件中配置插件2、分页插件的使用回顾Mysql分页功能MyBatis分页插件的使用测试显示第1页&#xff0c;每页显示4条数据&#xff0c;打印page对象测试获取分页…

A. Linova and Kingdom(dfs + 贪心)

A. Linova and Kingdom&#xff08;dfs 贪心&#xff09;一、问题二、思路三、代码一、问题 二、思路 这道题的大意就是&#xff0c;给我们一棵树&#xff0c;我们需要在树上选择kkk个点&#xff0c;然后让kkk个信使从我们选取的kkk个点向第一个点出发。 我们把我们选取的k个…

Verdaccio 搭建私有 npm 仓库

背景 公司内部封装业务相关的组件库&#xff0c;工具库&#xff0c;希望统一管理和维护&#xff0c;在多个项目中都能使用&#xff0c;同时希望不公开&#xff0c;只在局域网中使用。所以&#xff0c;需要搭建私有 npm 仓库 Verdaccio verdaccio 是一个能够创建私有 registr…

vue:vue2与vue3的区别

一、背景 vue2是指的2.X vue3是指的3.0以及更新的版本&#xff08;3.2版本在script标签里可以写setup&#xff0c;极大的简化了开发&#xff09; 本文对比两者区别。 二、官网 生命周期选项 | Vue.js API 参考 | Vue.js Vue.js - 渐进式 JavaScript 框架 | Vue.js Vue.…

Redis学习【11】之分布式系统

文章目录一 数据分区算法1.1 顺序分区1.1.1 轮询分区算法1.1.2 时间片轮转分区算法1.1.3 数据块分区算法1.1.4 业务主题分区算法1.2 哈希分区1.2.1 节点取模分区算法1.2.2 一致性哈希分区算法1.2.3 虚拟槽分区算法二 分布式系统环境搭建与运行2.1 系统搭建2.1.1 系统架构2.1.2 …

物理层的概述(可以说是对王道计算机网络的笔记)

目录前言物理层概述基本概念数据通信基础知识数据通信相关术语三种通信方式两种传输方式码元&#xff0c;速率、波特、带宽**练习题**奈氏准则和香农定理奈氏准则&#xff08;奈奎斯特定理&#xff09;香浓定理结尾前言 本章内容讲述了物理层的概念,也是我上个星期上课的内容&…

现代检测技术-期末复习

文章目录差动结构的优点偏差/零位/微差法的应用偏差法测量零位法测量微差法测量格罗布斯准则&#xff08;作业题&#xff09;最小二乘法自相关/互相关算法的应用&#xff08;教材和课件案例&#xff09;自相关性分析互相关分析&#xff1a;电子计数器测频法&#xff08;作业题&…

第53章 短信验证服务和登录的前端定义实现

1 向src\router\index.js添加定义 { path: /LoginSms, name: 手机号登录, component: () > import(../views/LoginSmsView.vue) }, { path: /Users/Register, name: 用户注册, component: () > import(../views/Users/RegisterView.vue), }, 2 向src\common\http.api.js添…

Javascript借用原型对象继承父类型方法

借用原型对象继承父类型方法 目的: 儿子继承父类属性和方法&#xff0c;父类之后新增的方法不会被儿子继承。 前言&#xff1a; 先理解一个问题&#xff1a; Son.prototype Father.prototype; 这一操作相当于把Son的原型对象指向Father。 意味着Son的prototype的地址与Fa…

Vue基础学习 v-指令(2) 本地应用(记事本)

v-bind 设置元素的属性&#xff08;比如&#xff1a;src&#xff0c;title&#xff0c;class&#xff09; v-bind:属性名值 <div id"app"><img v-bind:src"imgSrc" alt"" v-bind:title"imgTitle"></div><scrip…

数学建模(一):LP 问题

文章目录数学建模&#xff08;一&#xff09;&#xff1a;LP 问题一、 MATLAB求解二、 Python 求解数学建模&#xff08;一&#xff09;&#xff1a;LP 问题 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问…

关于分布式事务的理解

关于分布式事务的理解 分布式事务之前先简单介绍下介于本地事务和分布式事务之间的两个事务&#xff1a;全局事务&#xff08;Global Transactions&#xff09;和共享事务&#xff08;Share Transactions&#xff09;的原理与实现。 先给全局事务做个限定&#xff1a;一种适用…

JVM运行时数据区划分

Java内存空间 内存是非常重要的系统资源&#xff0c;是硬盘和cpu的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略&#xff0c;保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机…

使用secure crt连接ensp中虚拟设备

0 前言 ensp中虚拟设备如路由器、防火墙等本质上是 virtualbox中运行的虚机&#xff0c;因此可通过 telnet 连接 127.0.0.1 及对应端口方式连接到ensp中设备&#xff1b; 1 连接方法 1.1 查看设备所监听端口 设备图标上&#xff0c;右键 设置 点击 配置&#xff0c;可查看到…

UGUI 上使用 Particle System 支持 Sorting Layer 排序渲染

UGUI 上使用 Particle System 支持 Sorting Layer 排序渲染 Unity 中 Particle System 在 UGUI 上是可以根据 Sorting Layer 以及 Order in Layer 和 UI 组件(Image、Text等) 排序渲染的 Layer 值高的能够遮挡 Layer 值低的 组件 开发中会有这样的需求&#xff1a;要求 Part…