Unity3D -知识点(1)
1.场景视图
鼠标滚轮:场景放大缩小
鼠标右键:场景左右平移
场景编辑器中,能看到什么?
网格,每一格大小为1unit,建模不同,规定不同,(对应屏幕上100个像素)
世界坐标系
y轴向上为正
x轴向右为正
z轴垂直屏幕向里,为正
主摄像机Main Camera:表示摄像机的可视范围
1.1坐标单位
坐标的单位:一个方格为个单位(Unit),默认的,竖直方向为±Unit
一个单位在屏幕上,约定为100像素
一个单位在真实世界中,可以自行约定,比如约定1单位=1米
1.2摄像机
Z坐标,默认是-10,不用修改
Background,默认蓝色,游戏运行时的背景色
Size广角,指摄像范围,默认5个单位
其中,5 Unit为半高,全高为5 * 2 = 10 Unit
长度比:长宽比由Game窗口中的显示Display决定
比如:设为Free Aspect
设为16:9
即,摄像机的高度由Size决定,而宽度是不确定的
在准备背景图片时
摄像机 Size = 5
图片高度:10Unit * 100 = 1000 px
图片宽度:按16:9准备,最好更宽一些,以覆盖更宽屏幕
摄像机 Size = 3.6
图片高度:7.2Unit * 100 = 1000 px
图片宽度:应比1280略大一些,以覆盖更宽屏幕
ctrl +z撤销上一步操作
对象的显示顺序
在2D画面中,两个对象如果重叠,谁显示在上面呢?
修改Order In Layer(推荐)
修改Z坐标
即使一个对象被遮住,也是可以操作的
Hierarchy窗口中的先后顺序,并不能决定显示顺序
1.3对象的轴心
轴心的作用
坐标基准
当设置对象的坐标时,实际指的是轴心点的位置
旋转轴
当旋转对象时,是以Pivot为轴心来计算的
Pivot的设置
选中一个图片素材
在Inspector窗口中,点Sprite Editor,打开一个图形编辑器
在Sprite编辑器的右下角面板里,设定Pivot位置
在Sprite编辑器的右上角,点Apply保存设置


理解相对坐标
对象的父子关系:拖拽一个对象到另一个对象,成为子对象(子节点),可以发现,当父对象移动时,子对象随之移动
子对象的坐标轴,是相对于父对象的
移动父对象时,子对象的Position不发生变化
旋转父对象时,子对象的Rotation不发生变化
1.4图片素材的准备
2D图片的要求:
背景图片,一般为JPG
人物,道具等其他图片,一般为PNG,背景透明
图片的切割
一个图片未经切割时,只包含一个sprite素材

在Sprite Mode里设置Multiple,然后点击Sprite Editor,弹窗点击Apply


按照图中操作即可

切割结果

图片与渲染器
两个术语
Sprite精灵,游戏开发中指一张图片
Sprite Renderer 图片渲染器,用于显示一个Sprite,功能就是显示图片
组件Component,用于实现一种功能
例如,Sprite Renderer组价,用于图片显示
2.认识脚本组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Hello : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}
}
添加脚本时,自动创建一个类*.cs文件
特点:
类名必须与文件名相同
必须继承于MonoBehavior
所有Unity脚本都继承于这个类
默认定义了一些事件函数
如:Start(), Update(),会被Unity引擎自动调用
事件方法
事件方法Event Function 约定好的一些事件回调
如:Start()每次开始时调用一次,Update()每帧调用,更新游戏显示
Time.delta Time()获取上一次Update()到现在的时间间隔
内部执行顺序
创建游戏对象
创建组件 如:Hello comp = new Hello()
comp.Start()
定时执行 comp.Update()更新游戏显示
要点与细节
类名必须与文件名相同
Start()开始调用一次,可用于初始化,Update()每帧调用,帧间隔不等,可用于更新游戏
帧率
默认Unity里帧率是不固定的,它会尽可能快的刷新游戏
获取上一帧的间隔:Time.deltaTime
显式设定帧率:
Application.targetFrameRate = 50;
Application.targetFrameRate = 50;
要求Unity引擎尽量以此帧率运行,但实际帧率还是会有偏差
对象的移动
在Update()里移动图片,每次向上移动0.05单位
this.transform.Translate(0, 0.05f, 0);
其中,
this.transform 即当前游戏对象的transform组件
Translate()调整相对位移
匀速移动的优化
float step = 0.8f * Time.deltaTime;
其中,0.8f表示每秒移0.8个单位
要点
Unity中一般使用float,而不是double,所以在指定参数时要以f结尾,例如0.8f
注意理解Time.deltaTime的使用
{// Start is called before the first frame updatevoid Start(){Debug.Log("这是我的第一个游戏");Application.targetFrameRate = 60;}// Update is called once per framevoid Update(){Debug.Log("In Update()..." + Time.deltaTime);//this.transform.Translate(0, 0.05f, 0);float step = 0.8f * Time.deltaTime;this.transform.Translate(0, step, 0);}
}

Unity官方文档 https://unity.cn
Manual 手册
Script API
可以切换语言,版本,可供参考
3.Script API
获取节点和组件
获取当前节点,以及当前节点下的组件
获取其他节点,以及其他节点下的组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MyJet : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//SpriteRenderer renderer = this.gameObject.GetComponent<SpiteRendeer>();//SpriteRenderer renderer = GetComponent<SpriteRendeer>();//renderer.flipY = true;//获取其他节点GameObject obj = GameObject.Find("/other/22");SpriteRenderer comp = obj.GetComponent<SpiteRendeer>();comp.flipY = true;}// Update is called once per framevoid Update(){}
3.1MonoBehaviour
所有的Unity脚本,都继承自MonoBehaviour
查看MonoBehaviour文档
-- enabled 此组件是启用/禁用
-- gameobject,当前游戏对象
-- transform,当前Transform组件
-- name,当前游戏对象的名称
链接:https://docs.unity.cn/cn/current/ScriptReference/MonoBehaviour.html
3.2父节点与子节点
查看Transform文档,它有两个作用:
--用于设置Position/Rotation/Scale
--用于维持父子节点关系
比如:获取一个节点的父节点/子节点
3.3组件的属性
脚本组件的属性,也可以在Inspector窗口里显示
演示:给myJet.cs添加几个属性
public int number = 10;
public string helloMessage = "hi,afanihao";public float speed = 1.2f;
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MyJet : MonoBehaviour
{public int number = 10;public string helloMessage = "hi,afanihao";public float speed = 1.2f;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){transform.Translate(0, speed * Time.deltaTime, 0);}
}

要点与细节
只有public属性才在Inspector里显示
在Inspector里可以修改初始值,也可以添加引用类型的属性,如图片资源、游戏对象、组件等
3.4脚本的单步调试
Unity程序调试
-- 打印输出Debug.Log()
-- 单步调试
-- 在运行状态时,可以在Hierarchy / Inspector里直接修改
如果在VS环境安装正确的话,可以对脚本单步调试
在VS里,添加断点
在VS里,附加到Unity(Attach)
在Unity里,点Play
在VS里,点Step Over(F10)单步调试
在VS里,点停止调试(Detach)使用VS与Unity分离,此时,并没有停止游戏,只是停止调试让它自由运行
要点与细节
Unity和VS两个庞然大物,Attach需要时间,不要频繁乱点
点停止调试时,并没有停止游戏的运行
有一个固态硬盘最好,把项目放在固定分区之上
4.坐标系与旋转
4.1坐标与旋转
Vector3,用于表示一个3维向量(x, y, z),也称3元数
比如,节点的坐标用Vector3类型表示
tranform.position = new Vector3(0, 1.0f, 0);
节点的坐标、旋转,都是Vector3表示
比如:
transform.position = new Vector3(0, 1.0f, 0);transform.eulerAngles = new Vector3 (0, 0, 45f);
其中,Euler Angle称为欧拉角,就是用直观地角度来表示旋转
注意:另外transform.rotation 是用Vector4表示旋转,较为复杂
4.2世界坐标和本地坐标
世界坐标,World Space Position以世界坐标系计算
本地坐标,Local Space Position以父节点的坐标系计算
如,添加一个小鸟,作为佩奇的子节点
给小鸟指定本地坐标
transform.localPosition = new Vector3(0, 4.0f, 0);
transform.localEulerAngles = new Vector3 (0, 0, 90f);


要点与细节
指定旋转角度时,用eulerAngles或者localEulerAngles
4.3物体的运动
transform.Translate(dx, dy, dz)用于实现相对运动,即在原始位置上偏移dx, dy, dz的距离
如:沿Y轴方向移动0.02单位
transform.Translate(0, 0.02f, 0, Space.Self)
其中,Space.Self表示使用佩奇自己的坐标系
测试1:将佩奇旋转45度,运行游戏
测试2:将佩奇旋转180度,运行游戏
可以发现佩奇是沿自己的Y轴方向移动的



Space.Self是用自己的坐标系(默认值)
Space.World使用世界坐标系
transform.Translate(0, 0.02f, 0, Space.World)


4.4掉头飞行
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MyJet : MonoBehaviour
{private bool upward = true; //飞行的方向// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if(upward && transform.position.y > 5){upward = false;transform.localEulerAngles = new Vector3(0, 0, 180);}if(!upward && transform.position.y < -5){upward=true;transform.localEulerAngles = new Vector3(0, 0, 0);}transform.Translate(0, 0.02f, 0, Space.Self);}
}
理解
Translate()是相对运动
相关文章:

Unity3D -知识点(1)
1.场景视图鼠标滚轮:场景放大缩小鼠标右键:场景左右平移场景编辑器中,能看到什么?网格,每一格大小为1unit,建模不同,规定不同,(对应屏幕上100个像素)世界坐标系y轴向上为正x轴向右为…...
【学习笔记】NOIP暴零赛3
博弈(game) 观察到博弈过程中胜负态不会发生改变,那么求出从每个棋子出发能走的最长链,然后背包即可。 复杂度O(nm)O(nm)O(nm)。 #include<bits/stdc.h> #define ll long long #define pb push_back using namespace std; const int mod9982443…...

Java JSR规范列表
Java JSR规范列表目录概述需求:设计思路实现思路分析1.JSR2.JSR方法3.web service4.Webservice:5.数据处理器拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,m…...

Java必备小知识点1
Java程序类型: Applications和AppletApplications:是指在计算机操作系统中运行的程序。是完整的程序,能独立运行。被编译后,用普通的Java解释器就可以使其边解释边执行。必定含有一个main方法,程序执行时,首先寻找main方法&#x…...
JavaScript作用域、闭包
文章目录作用域、作用域链作用域作用域链循环中的作用域自由变量、闭包自由变量闭包的定义、表现、应用如何确定在闭包中获取正确的变量总结作用域、作用域链 作用域 编程语言中存储、访问、修改变量当中的值是一项基本能力、存储变量、访问变量必须按照一定的规则࿰…...
JavaScript Date(日期) 对象
JavaScript Date 对象是 JavaScript 中用于处理日期和时间的内置对象。它可以用于获取当前时间、设置日期和时间、计算日期和时间之间的差异、以及将日期和时间格式化为各种字符串格式。在本文中,我们将详细介绍 JavaScript Date 对象的作用和在实际工作中的用途。 …...
rust过程宏 proc-macro-workshop解题-4-sorted
名字版本号rust1.69.0OSubuntu 22.04这一大关卡介绍的是属性式过程宏。 第一关:01-parse-enum 还是简单的看我们是否已经实现了一个属性式过程宏的空架子,如果有这个空架子,就直接通过了。 use proc_macro::TokenStream; use proc_macro2; use syn;#[proc_macro_attribut…...

数据结构与算法—队列
队列 队列介绍 有序列表,可以用数组或者链表实现。遵循先进先出原则。 数组实现队列 public class ArrayQueue {public static void main(String[] args) {ArrayQueue queue new ArrayQueue(3);// 接收用户输入char key ;Scanner sc new Scanner(System.in);…...

AcWing3416.时间显示——学习笔记
目录 题目 代码 AC结果 思路 关键步骤 题目 3416. 时间显示 - AcWing题库https://www.acwing.com/problem/content/description/3419/ 代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner input new Scanner(System.in…...
贴吧手机端防删图GIF动态图制作解析
贴吧存活 思路技术运气 1:防删图不是存活的绝对因素,除了防删图,还有账号,ip,内容,吧的问题 2:一个图不是每个吧都可以发 3:一个贴不被删不仅仅看图片 4:有时候运气也很…...

iOS接入Google登录
1.在Google Cloud后台配置客户端ID 首先要在 Google Cloud 中创建一个项目。新创建的Project需要先配置同意屏幕。一共有4步骤需要配置。 1.OAuth 同意屏幕 User Type选择"外部"进行创建。填写必必要的信息,应用名称、用户支持电子邮件地址、开发者电子邮…...

【C语言】大小端字节序问题
一、大小端字节序问题 大小端是由CPU决定的,大小端可以理解为字节顺序,所以大小端全称叫大端字节序、小端字节序。其实大端、小端这两个词是从《格列佛游记》里出来的。《格列佛游记》有一段讲的是吃鸡蛋是从大的那头敲开还是小的那头敲开的问题…...

Linux | 网络通信 | 序列化和反序列化的讲解与实现
文章目录为什么要序列化?协议的实现服务端与客户端代码实现为什么要序列化? 由于默认对齐数的不同,不同的平台对相同数据进行内存对齐后,可能得到不同的数据。如果直接将这些数据进行网络传输,对方很可能无法正确的获…...

C#的委托原理刨析and事件原理刨析和两者的比较
什么是委托委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容参数和返回类型的方法进行绑定。 你可以通过委托实例调用方法。简单的理解,委托是方法的抽象类,它定…...

Redis学习【8】之Redis RDB持久化
文章目录Redis 持久化1 持久化基本原理2 RDB(Redis DataBase) 持久化2.1 持久化的执行2.2 手动 save 命令2.3 手动 bgsave 命令2.4 自动条件触发2.5 查看持久化时间3 RDB 优化配置3.1 save3.2 stop-write-on-bgsave-error3.3 rdbcompression3.4 rdbchecksum3.5 sanitize-dump-p…...

SpringSecurity认证
文章目录登陆校验流程依赖yaml实现建表、工具类、实体类加密器、AuthenticationManager登录逻辑登录过滤器、配置过滤器登出登陆校验流程 认证 登录: ①自定义登录接口 调用ProviderManager的方法进行认证 如果认证通过生成token,根据userId把用…...

Socket套接字
概念 Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 分类 Socket套接字主要针对传输层协议划分为如下三类: 流套接字:使用传输层TCP…...

mysql详解之innoDB
索引 Mysql由索引组织,所以索引是mysql多重要概念之一。 聚簇索引 InnoDB和MyISAm一样都是采用B树结构,但不同点在于InnoDB是聚簇索引(或聚集索引),将数据行直接放在叶子节点后面。 这里可能存在一个误区࿱…...
电信运营商的新尝试:探索非通信领域的发展
近年来,随着电信运营商竞争的日趋激烈和网络建设的成本不断攀升,许多电信运营商已经开始缩减IT投资。然而,在如此情况下,电信运营商仍然需要寻找新的增长机会。那么,在持续缩减IT投资的情况下,电信运营商可…...

第07章_单行函数
第07章_单行函数 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 函数的理解 1.1 什么是函数 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...