Unity3D -知识点(1)

news2024/11/15 23:49:36

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 update
    void Start()
    {
     
    }

    // Update is called once per frame
    void 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 update
    void Start()
    {
        Debug.Log("这是我的第一个游戏");

        Application.targetFrameRate = 60;
    }

    // Update is called once per frame
    void 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 update
    void 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 frame
    void 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 update
    void Start()
    {

    }

    // Update is called once per frame
    void 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 update
    void Start()
    {
       
    }

    // Update is called once per frame
    void 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()是相对运动

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

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

相关文章

每天10个前端小知识 【Day 18】

前端面试基础知识题 1.如何实现单行&#xff0f;多行文本溢出的省略样式&#xff1f; 在日常开发展示页面&#xff0c;如果一段文本的数量过长&#xff0c;受制于元素宽度的因素&#xff0c;有可能不能完全显示&#xff0c;为了提高用户的使用体验&#xff0c;这个时候就需要…

2023金三银四跳槽必会Java核心知识点笔记整理

现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减 HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了&#xff0c;上班 8 小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&#…

惠普LaserJet M1005 MFP报错b2

故障现象: 惠普LaserJet M1005 MFP开机后直接报b2错误; 检测维修: 故障大意是:机器的硬件可能出现点突变,此问题建议联系当地维修中心进行处理。

【计算机网络】网络层

文章目录网络层概述网络层提供的两种服务IPv4地址IPv4地址概述分类编址的IPv4地址划分子网的IPv4地址无分类编址的IPv4地址IPv4地址的应用规划IP数据报的发送和转发过程静态路由配置及其可能产生的路由环路问题路由选择路由选择协议概述路由信息协议RIP的基本工作原理开放最短路…

SciencePlots绘图

简介 使用Python作为核心开发工具的机器学习和深度学习研究者自然会希望使用Matplotlib进行科研图表的绘制&#xff0c;但是Matplotlib默认的样式并不适合科研论文的出版&#xff0c;而SciencePlots就是为此定制的一系列科研绘图样式库&#xff0c;可以绘制很合适科研图表。 …

蓝桥杯算法训练合集十五 1.打翻的闹钟2.智斗锅鸡3.文件列表

目录 1.打翻的闹钟 2.智斗锅鸡 3.文件列表 1.打翻的闹钟 问题描述 冯迭伊曼晚上刷吉米多维奇刷的太勤奋了&#xff0c;几乎天天迟到。崔神为了让VonDieEman改掉迟到的坏毛病&#xff0c;给他买了个闹钟。 一天早上&#xff0c;老冯被闹钟吵醒&#xff0c;他随手将闹钟按掉丢…

PHP教材管理系统设计(源代码+毕业论文)

【P003】PHP教材管理系统设计&#xff08;源代码论文&#xff09; 设计方案 本系统采用B/S结构&#xff0c;所有的程序及数据都放在服务器上&#xff0c;终端在取得相应的权限后使用Web页面浏览&#xff0c;录入&#xff0c;修改等功能。在语言方面使用PHP语言&#xff0c;在…

如何使用断点续传上传大文件

概念 大文件上传的需求介绍 不管怎样简单的需求&#xff0c;在量级达到一定层次时&#xff0c;都会变得异常复杂。 文件上传简单&#xff0c;文件变大就复杂 上传大文件时&#xff0c;以下几个变量会影响我们的用户体验 服务器处理数据的能力请求超时网络波动 上传时间会变长…

[acwing周赛复盘] 第 91 场周赛20230218

[acwing周赛复盘] 第 91 场周赛20230218 一、本周周赛总结二、 4861. 构造数列1. 题目描述2. 思路分析3. 代码实现三、4862. 浇花1. 题目描述2. 思路分析3. 代码实现四、4863. 构造新矩阵1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 这周挺难的。T1 贪心分…

2022黑马Redis跟学笔记.实战篇(六)

2022黑马Redis跟学笔记.实战篇 六4.7.达人探店功能4.7.1.分享探店图文1. 达人探店-发布探店笔记2. 达人探店-查看探店笔记4.7.2.点赞功能4.7.3.基于List实现点赞用户列表TOP104.7.4.基于SortedSet实现点赞排行榜4.8.关注列表4.8.1.关注列表实现原理4.8.2.添加关注1. 好友关注-关…

JAVA 双亲委派

双亲委派 问题&#xff1f; 什么是双亲委派&#xff1f;为什么需要双亲委派&#xff0c;不委派有什么问题&#xff1f;"父加载器"和"子加载器"之间的关系是继承的吗&#xff1f;双亲委派是怎么实现的&#xff1f;我能不能主动破坏这种双亲委派机制&#x…

nginx平滑升级

1.平滑升级操作1.1 备份安装目录下的nginxcd /usr/local/nginx/sbin mv nginx nginx.bak1.2 复制objs目录下的nginx到当前sbin目录下cp /opt/software/nginx/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/1.3 发送信号user2给nginx老版本对应的进程kill -user2 more /usr/lo…

【TypeScript】TypeScript的基础类型(string,number,boolean,void,null,undefined):

文章目录一、安装【1】安装npm install typescript -g【2】基础类型&#xff1a;Boolean、Number、String、null、undefined 以及 ES6 的 Symbol 和 ES10 的 BigInt二、字符串类型(string)三、数字类型(number)四、布尔类型(boolean)五、空值类型(void)六、null和undefined类型…

初探Mysql反向读取文件

前言 Mysql反向读取文件感觉蛮有意思的&#xff0c;进行了解过后&#xff0c;简单总结如下&#xff0c;希望能对在学习Mysql反向读取文件的师傅有些许帮助。 前置知识 在Mysql中存在这样一条语句 LOAD DATA INFILE它的作用是读取某个文件中的内容并放置到要求的表中&#x…

IOS崩溃文件符号化实践

1.背景与项目难点 1.1 背景 由于公司之前使用的友盟要收费&#xff0c;filebase服务由谷歌提供&#xff0c;存在数据合规风险。需要实现稳定性分析功能&#xff0c;通过支持app崩溃信息实时采集、实时上报、实时自动解析并定位出代码问题&#xff0c;帮助研发同学及时定位崩溃…

Java 布隆过滤器

你在么&#xff1f;在&#xff01;一定在么&#xff1f;不在&#xff01;一定不在么&#xff1f; 你想要100%的准去性&#xff0c;还是99%的准确性附带较高的速度和较小的资源消耗。 任何算法&#xff0c;任何经营收到的背后&#xff0c;都是时间效益 资源消耗 准确性的平衡&am…

ASO优化之如何更新APP

ASO是一个持续的迭代过程&#xff0c;应用商店排名和热门关键词每天都在变化&#xff0c;为了跟上应用行业快节奏的性质&#xff0c;我们必须灵活地制定应用商店的优化策略&#xff0c;并时常的更新我们的应用。 那我们该如何做到这一点呢&#xff1f; 如果是刚上新的应用&am…

93.【Vue-细刷-02】

Vue-02(十六)、基本列表渲染 (v-for)1.使用v-for遍历数组2.使用v-for遍历对象3.使用v-for遍历字符串(十七)、列表过滤 (filter())1.⭐JS中Change属性的原生状态⭐2.使用watch监听实现3.const {xxx} this 在Vue的作用⭐⭐4.JS箭头函数参数的简写⭐5.使用computed进行计算实现(最…

15_FreeRtos计数信号量优先级翻转互斥信号量

目录 计数型信号量 计数型信号量相关API函数 计数型信号量实验源码 优先级翻转简介 优先级翻转实验源码 互斥信号量 互斥信号量相关API函数 互斥信号量实验源码 计数型信号量 计数型信号量相当于队列长度大于1的队列&#xff0c;因此计数型信号量能够容纳多个资源,这在…

家庭理财,轻松记账修改收支记录这样操作

我们在记账的时候难免会出现记错或者想修改的地方&#xff0c;又或者是想将之前太久没有用的记账记录删除掉&#xff0c;今天&#xff0c;小编就教大家如何修改收支记录&#xff0c;一起接着往下看吧&#xff01; 第一步&#xff0c;运行【晨曦记账本】在软件主界面中&#xff…