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 什么是函数 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经…...
Echarts实现多柱状图重叠重叠效果
有两种重叠效果: 1. 多个柱子重叠为一个 2. 多个柱子重叠为两组 第一种,图例: 这个灰色不是阴影哦, 是柱子. 1. 使用详解 (1) series.Z 折线图组件的所有图形的 z 值。控制图形的前后顺序。 z 值小的图形会被 z 值大的图形覆盖。z 相比 zlevel 优先级更低,而且不会…...
PHP学习笔记(一谦四益)
前言 上一篇文章 PHP学习笔记(观隅反三)分享了数组的知识,这篇文章接着分享和数组相关的算法。 算法效率 算法效率分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称…...
Jvm -堆对象的划分
堆对于一个jvm进程来说是唯一的,一个进程只有一个jvm,但是进程半酣多个线程,多个线程共享一个堆。 也就是说,一个jvm实例只存在一个堆,同时对也是Java内存管理的核心区域。 Java堆区域的大小在jvm启动时就已经被确定…...
2023美赛F题讲解+数据领取
我们给大家准备了F题的数据,免费领取!在文末 国内生产总值(GDP)可以说是一个国家经济健康状况最著名和最常用的指标之--。它通常用于确定一个国家的购买力和获得贷款的机会,为各国提出提高GDP的政策和项目提供动力。GDP“衡量一个国家在给定时间段内生产…...
【博客625】keepalived开启garp refresh的重要性
keepalived开启garp refresh的重要性 1、场景 1-1、对keepavlied master机器热迁移后出现vip不通,过后恢复 原因:机器迁移后网关那边的arp表没有刷新,流量还是转发到老的端口,但是机器已经迁移到别的端口了,于是网络…...
nginx防护规则,拦截非法字符,防止SQL注入、防XSS,nginx过滤url访问,屏蔽垃圾蜘蛛,WordPress安全代码篇
nginx防护规则,拦截非法字符,防止SQL注入、防XSS,nginx过滤url访问,屏蔽垃圾蜘蛛,WordPress安全代码篇 精心强化,小白一键复制 资源宝分享:www.httple.net 宝塔为例:/www/server/panel/vhost/nginx/你的网站域名.conf,复制代码点击保存 修改www.xx.net你自己域名incl…...
【计算机网络】网络层
文章目录网络层概述网络层提供的两种服务IPv4地址IPv4地址概述分类编址的IPv4地址划分子网的IPv4地址无分类编址的IPv4地址IPv4地址的应用规划IP数据报的发送和转发过程静态路由配置及其可能产生的路由环路问题路由选择路由选择协议概述路由信息协议RIP的基本工作原理开放最短路…...
产品经理知识体系:1.什么是互联网思维?
互联网思维 思考 笔记 用户思维 是要注重用户体验,产品带给用户的价值是什么,是能帮助用户获取想要的商品、解决生活中的问题、获取想要的信息,还是产品能通过兜售参与感、满足感等来满足用户的心理需求。 贯穿产品的整个生命周期过程。 简…...
【数据结构】单链表的接口实现(附图解和源码)
单链表的接口实现(附图解和源码) 文章目录单链表的接口实现(附图解和源码)前言一、定义结构体二、接口实现(附图解源码)1.开辟新空间2.头插数据3.头删数据4.打印整个单链表5.尾删数据6.查找单链表中的数据7…...
TikTok话题量超30亿,这款承载美好记忆的剪贴簿引发讨论
回忆风剪贴簿在TikTok引起关注小超在浏览超店有数后台时发现,有一款平平无奇的剪贴簿的种草视频爆火,在24h内收获了9.9K点赞,播放量更是突破了100W,直接冲到了【种草视频飙升榜】第六名的位置,并且这个数字目前仍在继续…...
新手学做网站教程/百度seo关键词
阅读文本大概需要 3 分钟。这是 Python 顶级开源项目系列文,每个月我都会去 GitHub 上找些人气很高的 Python 开源项目,供大家学习参考。1 TermtosvgTermtosvg:一个用 Python 编写的 Linux 终端记录程序,能将你的命令行会话渲染为…...
网站开发vs设计报告/微信软文广告经典案例
来自:http://www.it165.net/pro/html/201505/42504.html 一、前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的…...
网站日志文件夹/茶叶网络营销策划方案
前言 在《 Elasticsearch 之(5)kibana多种搜索方式》中粗略提到高亮搜索的基本用法,本篇将详细剖析搜索结果的highlight高亮显示。 1、一个最基本的高亮例子建立mapping,设置IK分词器PUT /blog_website {"mappings": {&…...
做造价在那个网站比较好/企业管理培训课程网课免费
目录 一:MVC架构模式简介 MVC架构模式: 二:Java中实现MVC说明、 1.Model(模型):***Service类: 2.Controller(控制器):Servlet类: 3.View&am…...
自己怎么做网站视频赚钱/百度账号管家
http://www.opengpu.org/bbs/forum.php?modviewthread&tid5442翻译:Trace校对:千里马肝编辑:了心发布:我 :)恋爱模拟游戏可以说是日本独特的游戏类型。虽然制作大多是采取2D手绘漫画或3D卡通材质的风格,但本作要挑…...
网站建设需要些什么东西/seo工具在线访问
javascript浏览器Ajax请求在现代网站中大量使用。 除了使用执行Ajax请求的内置方法之外,还使用XMLHttpRequest实例,许多开发人员还使用jQuery的方法来执行相同的任务。 在本文中,我们将介绍两个替代库,它们使您可以实现相同的目标…...