unity开发知识点小结01
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.9Debug.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键");}}
}相关文章:
unity开发知识点小结01
unity对象生命周期函数 Awake():最早调用,所以可以实现单例模式 OnEnable():组件激活后调用,在Awake后调用一次 Stat():在Update()之前,OnEnable…...
软件系统[软件工程]
What’s the link? They all involve outdated (legacy) software technology. All have had huge socio-economical impact. Prompting national lockdowns. Spreadsheet workflow error led to thousands of preventable infections and deaths. Huge losses of citizen dat…...
电力系统稳定性的定义与分类
1电力系统稳定性的定义与分类 IEEE给出电力系统稳定性定义:电力系统稳定性是指电力系统这样的一种能力—对于给定的初始运行状态,经历物理扰动后,系统能够重新获得运行平衡点的状态,同时绝大多数系统变量有界,因此整个…...
基于java的俱乐部会员管理系统
技术:Java、JSP等摘要:随着科学技术的飞速发展,科学技术在人们日常生活中的应用日益广泛,也给各行业带来发展的机遇,促使各个行业给人们提供更加优质的服务,有效提升各行业的管理水平。俱乐部通过使用一定的…...
线程池执行父子任务,导致线程死锁
前言, 一次线程池的不当使用,导致了现场出现了线程死锁,接口一直不返回。而且由于这是一个公共的线程池,其他使用了次线程池的业务也一直阻塞,系统出现了OOM,不过是幸好是线程同事测试出来的,没…...
Ubuntu系统新硬盘挂载
Ubuntu系统新硬盘挂载 服务器通常会面临存储不足的问题,大部分服务器都是ubuntu系统,该篇博客浅浅记载一下在ubuntu系统上挂载新硬盘的步骤。本篇博文仅仅记载简单挂载一块新的硬盘,而没有对硬盘进行分区啥的。如果需要更加完善的教程&#…...
【亲测】Centos7系统非管理(root)权限编译NCNN
前言 由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。 什么是NCNN ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型&#x…...
四种常见的异步请求方式
四种常见的异步请求方式 一、xhr异步老祖 XMLHttpRequest(简称XHR)是一种在JavaScript中创建异步请求的技术。XHR对象可以向服务器发送请求,并获取服务器返回的数据,而不会使页面刷新。 XHR对象的创建方式通常是通过构造…...
Linux操作系统学习(进程间通信)
文章目录进程间通信进程通信的意义进程通信的方式1.基于文件的方式匿名管道命名管道2.基于内存的通信方式共享内存验证内核相关的数据结构了解进程间通信 进程通信的意义 当我们和另一个人打电话时两部手机都是独立的,通过基站传递信号等等复杂的过程就实现了通…...
单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进
目录C-COT:Continuous Convolution Operator Tracker文章侧重点连续卷积算子目标追踪框架初始化过滤器:追踪流程ECO文章侧重点因式卷积因子生成采样空间模型模型更新策略论文链接:C-COT:Beyond Correlation Filters: Learning Con…...
C++中栈是如何实现,以及常用的栈函数都有哪些
什么是栈? 栈 是一种特殊的数据结构,它是一种按照 Last-In-First-Out (LIFO) 访问模式存储和访问数据的特殊结构。 换句话说,栈中的最后一个元素将成为最先出栈的元素,这也意味着新增加的元素在栈的顶部,而出栈的元素…...
我就不信你还不懂HashSet/HashMap的底层原理
💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…...
Qt中调用gtest进行单元测试及生成覆盖率报告
一.环境配置 googletest地址:https://github.com/google/googletest 我下载的是1.12.1,这是最后一个支持C++11的版本。 首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见Qt中调用gRPC,编译完了会生成几个静态库,如下图所示 本文主要用到了libgtest.a 下载ms…...
ChatGPT vs Bard 背后的技术对比分析和未来发展趋势
ChatGPT vs Bard 背后的技术对比分析和未来发展趋势 目录 ChatGPT vs Bard 背后的技术对比分析和未来发展趋势...
搜索引擎的设计与实现
技术:Java、JSP等摘要:随着互联网的快速发展,网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后&…...
动态规划之买卖股票问题
🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓动态规划之买卖股票问题 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 动态规划算法本质上就是穷举…...
MySQL学习笔记之子查询
自连接方式 自连接就是表A连接表A,通过where关键字实现,比如查询工资比Abel高的员工信息: SELECTe2.last_name,e2.salary FROMemployees e1,employees e2 WHEREe1.last_name "Abel" AND e2.salary > e1.salary;子查询 亦称为…...
HCIP-5OSPF域内域间外部路由学习笔记
1、OSPF区域 每个区域都维护一个独立的LSDB。 Area 0是骨干区域,其他区域都必须与此区域相连。 划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。 区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不…...
【编程实践】简单是好软件的关键:Simplicity is key to good software
Simplicity is key to good software 简单是好软件的关键 目录 Simplicity is key to good software简单是好软件的关键 Complexity is tempting. 复杂性很诱人。 The smallest way to create value创造价值的最小方法 Simple 简单的 Complexity is tempting. 复杂性很诱人…...
Python|贪心|数组|二分查找|贪心|数学|树|二叉搜索树|在排序数组中查找元素的第一个和最后一个位置|计数质数 |将有序数组转换为二叉搜索树
1、在排序数组中查找元素的第一个和最后一个位置(数组,二分查找) 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 […...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
