Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】

这篇具有很好参考价值的文章主要介绍了Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Unity学习参考文档和开发工具

☺ unity的官网文档:https://docs.unity3d.com/cn/current/Manual/ScriptingSection.html

■ 学习方式:

首先了解unity相关概述,快速认识unity编辑器,然后抓住重点的学:游戏对象、组件|C#脚本、预制体、UI

学习过程你会发现,其实Unity中主要是用c#进行开发。

因为在这个过程中,无非就是,对游戏对象通过挂载的C#脚本,修改一下组件的一些属性,控制一下激活之类的操作。到了UGUI,同样,也是通过挂载的C#脚本,监听到事件发生后,调用一下C#脚本定义的方法处理一下事件。

  • unity快速上手文档:https://learn.unity.com/tutorial/she-zhi-3d-beginner?uv=2020.3&projectId=5dfa9a5dedbc2a26d1077ca8
  • 视频[这种动手类的快速上手,建议跟着视频动手操作一番]:https://www.bilibili.com/video/BV1gQ4y1e7SS/
  • ★重点学习内容:游戏对象、组件|C#脚本、预制体、UI[GUI]

■ 开发工具:

unity、visual studio



1、Unity 概述

(1) 什么是Unity

Unity是一套具有完善体系与编辑器的跨平台游戏开发工具,也可以称之为游戏引擎游戏引擎是指一些编写好的可重复利用的代码与开发游戏所用的各功能编辑器Unity目前已超过50%的游戏引擎市场占有率。

游戏引擎=可复用代码+各种开发工具


(2) Unity引擎优势

1.基于C#编程,拥有易上手、高安全性的特性

2.独特的面向组件游戏开发思想让游戏开发更加简单易复用

3.拥有十分成熟的所见即所得开发编辑器

4.拥有良好生态圈,商城中包含大量成熟的功能脚本与资源

5.强大的跨平台特性,可以制作PC、主机、手机、AR、VR等多平台游戏


2、Unity Hub

管理Unity项目,当电脑中有多个unity不同版本的项目的时候,管理就比较麻烦,可以通过unity hub 对各个不同的unity hub项目管理。



3、认识unity编辑器


(1) unity恢复默认窗口: Windows-> Layouts-> Default


(2) 项目设置

  • 包括:物理、声音、质量、编辑器设置等等

(3) 全局设置

  • 编辑器的常用设置

  • 扩展工具,设置一下脚本使用visual studio 打开

(4) unity菜单栏介绍

■ 文件 File:文件的常规操作[项目/场景创建、保存等,还有打包项目]

■ 编辑 Edit:复制、剪切、粘贴等操作

■ 资源 Assets:创建[脚本、场景、动画等等]、导入导出等等

■ 游戏对象 GameObject:会在游戏场景中真正显示出来

■ 组件 Component:非常重要,因为unity是面向组件的

  • 组件和游戏对象是不可分隔的关系,一个游戏对象身上可以挂多个组件

■ 2d 和 3d 场景的切换:

  • 点一下2D,就变成了3D场景

(5) unity 项目的运行,是运行的是整个场景,而非单个的游戏对象

  • 运行的单位是场景!



4、对游戏对象的常见操作

(0) transform 属性相关的操作的工具栏


(1) 拉伸

  • 重置为000

(2) 隐藏或显示图层中的游戏对象


(3) 看到游戏对象的网格形状

  • 为了方便观察,一般选择 Shaded Wireframe

(4) 选择游戏对象:直接鼠标点击一下即可


(5) 右键-眼睛环绕


(6) 手的模式下,结合鼠标滚轮,可以进行拖拽,调远调近观察

  • 进入手的模式,快捷方式,直接按住鼠标滚轮

  • 和右键-眼睛环绕一样,都是为了更好地全面观察游戏对象


(7) 父子游戏对象,父游戏对象的坐标改变会一起改变子游戏对象的坐标

  • 一个游戏对象,创建后的默认坐标位置 position,默认是相对于世界坐标的位置,简称为世界坐标位置
  • 如果一个游戏对象,变成了另外一个游戏对象的子游戏对象,那么它的坐标就是相对位置-【相对于父游戏对象的位置】,简称相对位置
  • 最外层的游戏对象

  • 对于父子游戏对象的坐标轴位置,父坐标轴位置默认在父子游戏对象的中间:
  • 可以设置一下为轴心,父坐标位置即可回到父游戏对象身上

  • 坐标轴,全局是针对世界坐标

(8) unity 打包操作

  • 在unity 中将图片、模型文件[后缀是.fbx]等素材进行打包

  • 打包完的文件类型是 Unity package file


(9) 标签和图层

  • 标签:一般是咱自己用于在代码中,判断游戏对象是否是咱想要的游戏对象
  • 图层:是unity做的一种归类划分,归类之后,可以给摄像机等做过滤显示;比如摄像机对于这个图层的是不显示的,还有对于碰撞,这个图层可以不去碰撞等等。



5、组件

(1) 什么是组件

组件就是功能,需要给游戏对象添加什么功能就只需给它添加上组件。

在Unity中,游戏物体是不具备任何功能的,如果想要为其添加功能,那么就需要为它添加该功能的组件,而每一个组件其实就是一个引擎内部的组件脚本或是由自己编写的组件脚本 。也就是说,一个游戏物体(GameObject)会包含多个组件(Component),每一个组件又是一个组件脚本。

  • 比如:给游戏对象添加上重力组件,该游戏对象就会往下掉。
  • 又比如:transform 也是一个组件。
  • 又比如:灯光之所以是灯光,那是因为它比别人多了一个灯光的组件。游戏对象其实都是默认自带了一些组件,比如立方体自带上了立方体的组件,球自带上了球的组件。
  • 一个游戏对象(图层外层)对应一个脚本,当需要的功能[组件]不存在的时候,需要自己手动编写脚本!

(2) 手动编写C#脚本

  • 在项目中手动添加上C#脚本
  • 添加上脚本

每个游戏对象之所以表现形式不同,是因为绑定到他们身上的组件脚本不同!


(3) 组件的生命周期

  • 从 Awake 到 OnDestroy:
  • Awake 之后就是激活OnEnale,然后是开始Start
  • 改变:按帧改变Update-LateUpdate,按固定时间频率改变FixedUpdate
  • 取消激活OnDisable:和激活OnEnable是一对
  • 最后如果删除了组件,则会执行销毁OnDestroy

▪ 激活OnEnale和取消激活OnDisable:


■ 脚本的生命周期的执行顺序

  • 如果有多个脚本,test1.cs、test2.cs、test3.cs

  • 脚本的执行顺序是:会想把test1.cs、test2.cs、test3.cs 的所有Awake方法执行完[如果有手动写Awake方法的情况!],接着是从test1.cs到test2.cs最后到test3.cs 执行下一个生命周期-激活OnEanale[如果有手动写OnEanale方法的情况!],然后又是从从test1.cs到test2.cs最后到test3.cs 执行下一个生命周期Start......

    ▷ 现阶段的生命周期从Awake开始,每次都是从项目中第一个脚本到最后一个脚本,执行。

    ▷ 接着进入下一个生命周期,所有的脚本也是从项目中第一个脚本到最后一个脚本,执行当前的生命周期!

  • 如果想要更改项目中脚本之间的生命周期的执行顺序,可以在编辑->项目设置->脚本执行顺序设置一下

    • 顺序添加错了,直接拖拽更改即可



6、预制体和变体

(1) 什么事预制体

其实,就是把场景中做好的东西[独立的游戏对象]封装成预制体[生成一个文件]。

  • 预制体的后缀是 .prefab

(2) 预制体好处:


(3) 预制体和场景的游戏对象的区别:

① 直接修改预制体,则场景中的游戏对象会同步发生改变。但是如果只直接修改了场景中的游戏对象,预制体不变。

  • 包括了直接在预制体身上挂着组件,场景中的游戏对象会同步挂载。

② 想要实现修改场景中的游戏对象,预制体同步发生改变:

  • 选择“打开”模式

③ 场景中的游戏对象,挂载了组件,想要同步挂载到预制体身上:

  • 单个挂载:
  • 批量挂载:override批量应用到预制体

(4) 通过场景中的游戏对象,快速选中预制体


(5) 变体

预制件变体:对当前的游戏对象,生成一个变体,变体会依赖旧的预制体。
当旧的预制体发生改变,变体也会跟着一起改变。但是变体改变,预制体不会发生改变。



7、动态修改游戏对象的属性

(1) 游戏对象和所挂载的C#脚本之间的关系:


(2) C#脚本的类中添加了一个属性对象,将该属性对象和Unity的游戏对象进行关联


(3) 通过预制体,在场景中实例化出游戏对象

  • 结果1:

  • 结果2:

■ EmptyTest.cs 内容如下:

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

/**
 * EmptyTest 类是绑定在场景SamepleScene下的游戏对象Empty身上
 * 补充,课外小知识,C#的 Debug.Log 方法,其实就是相当于 前端项目的 console.log 方法,也就是开发过程中用于打印日志的
 */
public class EmptyTest : MonoBehaviour
{
    public GameObject Cube;
    //预制体
    public GameObject Prefab;


    // Start is called before the first frame update
    void Start()
    {
        //当前类的属性gameObejct就对应了unity当前脚本所绑定的游戏对象
        GameObject gameObject = this.gameObject;
        Debug.Log("gameObject: " + gameObject);
        Debug.Log("gameObject的名称:" + gameObject.name);
        Debug.Log("gameObject的标签:" + gameObject.tag);
        Debug.Log("gameObject的图层:" + gameObject.layer);
        Debug.Log("Empty下的Cude的name:" + Cube.name);//子物体的名称
        Debug.Log("Empty下的Cude的继承的父类的激活状态:" + Cube.activeInHierarchy);//子物体继承关系的激活状态【看所继承的父物体的激活状态】
        Debug.Log("Empty下的Cude的自身的激活状态:" + Cube.activeSelf);//子物体自身的激活状态
        Debug.Log("Empty的transform:" + transform.position);//位置
        Debug.Log("Empty下的Cude的transform:" + transform.Find(Cube.name).position);//位置
        //给游戏对象添加上组件,通过拿到游戏对象.AddComponent方法
        gameObject.AddComponent<MeshFilter>();
        Cube.AddComponent<AudioSource>();
        //获取其他组件【这个其他组件,其实就是排除掉Transform这个必须的组件后的其他组件】
        Debug.Log("Empty获取其他组件:" + GetComponent<BoxCollider>());
        Debug.Log("Cube获取其他组件:" + Cube.GetComponent<BoxCollider>());
        //从子物体身上获取组件
        // GetComponentInChildren<BoxCollider>();
        //从父物体身上获取组件
        //GetComponentInParent<BoxCollider>();

        //全局查找--细节,就是首字母大写了,小写的是属性
        //所谓的全局查找,其实就是对当前的C#脚本所处的场景SamepleScene下进行全局查找 
        GameObject testGameObject = GameObject.Find("TestGameObject");
        //还可以通过标签名获取到游戏对象
        GameObject testGameObejct2 = GameObject.FindWithTag("enemy");
        Debug.Log("testGameObject:" + testGameObject);
        Debug.Log("testGameObject2:" + testGameObejct2);
        //还可以设置游戏对象是否激活
        testGameObject.SetActive(false);//取消激活

        //需求:通过预制体,在场景中实例化出游戏对象
        //预制体的类型也是GameObject
        // Instantiate(Prefab);
        // 实例化出游戏对象,并且是当前挂载了C#脚本的游戏对象的子物体
        GameObject capsule = Instantiate(Prefab, transform);
        // 销毁游戏对象
        Destroy(capsule);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

8、Application 读写文件需要用到的类

(1) Application 读写文件


(2) Application 还有控制权限的作用,比如控制游戏后台运行,打开链接,退出游戏


9、游戏场景

■ 核心类-场景管理类 SceneManager:和场景的创建、场景切换|加载、场景的获取、场景数量、场景卸载有关


■ 关于场景的常用属性:场景名称、场景是否已加载、场景路径、场景索引、场景中独立的游戏对象


■ 异步加载场景并获取进度

  • 通过协程的方式[协程,其实就是协助类型的多线程] StartCoroutine(任务);
  • 在Update中获取到进度,因为Update是输出每一帧的改变

▷ 通过计时器控制场景跳转:



10、transform

(1) 位置、旋转、缩放、向量


(2) transform 其他关系


(2) transform 父子关系

游戏对象的父子级关系,其实是通过transform 维持的


......



11、Unity GUI(简称UGUI)

GUI:Graphical User Interface 图形用户界面或图形用户接口。

  • GUI,是平面的,在2d下操作
  • UI 常用的控件
  • UI 最基本的是 画布Canvas ,相当于屏幕。

    • 最基本的UI就是画布Canvas,其他UI控件-Text、Image、Button等等都是放在画布上面的,作为Canvas的子控件。
  • UI 另外最基本的是 事件系统EventSystem ,其实就是把很多常见的事件,比如点击事件,封装起来。


(1) Canvas,相当于屏幕

■ Canvas组件的渲染模式一般默认是屏幕空间-覆盖

  • 摄像机是拍摄到真正的游戏画面,3d画面。摄像机拍摄到画面会先被渲染出来。
  • UI 覆盖:会覆盖到摄像机拍摄的画面之上。所以,UI 永远可以在最上层显示。
  • 这也符合大多数真实的游戏情况,UI 显示在游戏画面之上。比如,打开一个背包界面或者人物属性界面,不可能被游戏场景的物体,比如被树木遮盖住。

■ Canvas组件的缩放模式一般是选择按屏幕分辨率缩放

  • Canvas 做了适配,要真正生效,Canvas 下的第一层子控件也是要做适配。
  • 第一层的子控件做适配:

    • 锚点是设置在父物体身上的。

    • 控件锚点的作用:控件永远会和锚点保持一定的距离。


(2) 事件绑定:以Button这个UI为例

① 在画布Canvas 下添加UI-Button,在项目下创建一个C#脚本,然后把C#脚本挂载到Button身上

② 接着在C# 方法,写一个点击事件发生时的处理方法 BtnClick()

③ 最后在Button 组件下面的On Click() 添加上C# 脚本中,点击事件发生时的处理方法 BtnClick()


(3) 管理UI 组件-面板Panel[布局、对齐、适配的轴点位置等]


(4) 关于GUI常见的UI【text、button、slider等等】 的一些操作详情,可以参考文章:

  • 写得非常详细---《unity之UGUI系统基础》:https://blog.csdn.net/qq_42898629/article/details/83504863




如果本文对你有帮助的话记得给一乐点个赞哦,感谢!文章来源地址https://www.toymoban.com/news/detail-412109.html

到了这里,关于Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity编辑器扩展 | 编辑器扩展基础入门

    前言 当谈到游戏开发工具,Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境,使他们能够创建令人惊叹的游戏和交互式体验。 然而,Unity编辑器本身也是可以扩展和定制的,这为开发者提供了进一步提升工作流程和增强功能的机会。 在Unity 编辑器

    2024年02月10日
    浏览(71)
  • 【Unity编辑器扩展】 | 编辑器扩展入门基础

    前言 当谈到游戏开发工具,Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境,使他们能够创建令人惊叹的游戏和交互式体验。 然而,Unity编辑器本身也是可以扩展和定制的,这为开发者提供了进一步提升工作流程和增强功能的机会。 在Unity 编辑器

    2024年02月10日
    浏览(79)
  • Unity 可视化节点编辑器(GraphView、编辑器扩展)

      前几天把导师的项目打包发布交了一稿,这半个星期除了再把项目缝缝补补外(说实话项目做到后边实在有些无聊,都是些琐碎的东西而且自己也学不到什么,纯粹是 浪费 消磨时间)无聊逛Unity商店发现了个有意思的东西,说实话一开始我以为只是单纯绘制的2D动画:

    2024年02月12日
    浏览(59)
  • Unity编辑器紫色

    紫色原因是因为编辑器内跑了其他平台的shader兼容性导致的,需要动态的去修改shader,主要用到Unity的api :  Shader.Find(shaderName); 具体的工具代码如下: Shader的添加形式大概有两种: 跟随AssetBundle 打进包里面,可以直接使用       自建材质  

    2024年02月03日
    浏览(52)
  • 修改unity代码编辑器

    将   Unity  自带的 MonoDevelop  替换成微软的 VS  2017 编辑器。 操作步骤 : 第一步:选择Edit选项卡下的Preferences..选项 第二步:选择External Tools 第三步:修改右侧的External Script Editor,选择VS2017  有的小伙伴可能下拉框中没有VS2017选项,没关系,点击Brower..,找到VS2017的应用程序

    2024年02月11日
    浏览(45)
  • Unity 编辑器常用方法

    自动根据RuntimeInitializeLoadType选择一个时机执行。静态方法 AfterSceneLoad 在场景加载之后初始化子系统。这意味着子系统将在场景加载完成后进行初始化,并在场景加载后的脚本执行时可用。 BeforeSceneLoad 在场景加载之前初始化子系统。这意味着子系统将在场景加载之前进行初始

    2024年02月07日
    浏览(50)
  • Unity编辑器扩展(外挂)

    每日一句:未来的样子藏在现在的努力里 目录 什么是编译器开发 C#特性[System.Serializable] 特殊目录 命名空间 /*检视器属性控制*/     //添加变量悬浮提示文字     //给数值设定范围(最小0,最大150) //指定输入框,拥有5行 //默认显示5行,最多显示10行内容,再多用滚动条控

    2024年01月24日
    浏览(83)
  • 【Unity知识树】Unity编辑器加速小技巧

      运行游戏时不重新编译脚本 现象:每次运行游戏都会弹出一个重新加载脚本的框,耽误几秒钟时间。     提速技巧:勾选工程设置 编辑器 Enter Play Mode Options的选项即可。     以后如果脚本没有改动,运行时不会重新编译。   取消不必要的csproj脚本工程文件 新版本的Uni

    2024年02月12日
    浏览(41)
  • 【Unity UIToolkit】UIBuilder基础教程-制作简易的对话系统编辑器 3步教你玩转Unity编辑器扩展工具

    随着Unity开发的深入,基本的Unity编辑器界面并不能满足大部分玩家高阶开发的要求。为了提高开发的效率,有针对性的定制化扩展编辑器界面是提高开发效率的不错选择。 今天就给大家带来Unity官方提高的编辑器扩展工具UIToolkit(集成了UIBuilder和UI Debugger等插件)的使用教程。

    2024年02月04日
    浏览(60)
  • 面试题 :Unity编辑器基础

      1、请描述游戏动画有几种,以及其原理。 关键帧动画 :每一帧动画序列当中包含了顶点的空间位置信息以及改变量,然后通过插值运算,得出动画效果。选中某一游戏对象,创建animation,添加属性Transform,MeshRender、collider。还可以添加关键帧,在关键帧上Add Animation Even

    2023年04月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包