五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑。本系列文章以C#为介绍语言,基于Unity2017.4.x。

一、环境搭建

我使用的是Unity+VSCode,用的是mac系统,windows的自己搜资料,步骤差不多。

1.安装Unity:下载Unity,我下载的是Unity2017.4.21f1。下载下来是一个下载助手UnityDownloadAssistant-2017.4.21f1.dmg,双击打开安装。选择安装内容Unity2017.4.21f1、MonoDevelop/Unity Debugger、Documentation、Standard Assets。

2.安装VSCode:个人喜好,VSCode比较轻量,写代码流畅一点。下载最新版本就可以。

3.下载dotnet:我下载的是dotnet-dev-osx-x64.1.1.11.pkg,双击打开安装。

4.安装VSCode插件:插件可以选择unity3d-pack,由于我安装失败,所以把unity3d-pack里面的插件都安装了一遍:

C#

C# FixFormat

C# Snippets

C# XML Documentation Comments

Debugger for Unity

eppz! (C# theme for Unity)

MonoBehaviour Snippets

ShaderlabVSCode(Free)

Unity Code Snippets

Unity Tools

5.建立Unity项目:打开Unity,我新建的是2D项目

6.建立C#项目,目的是让VSCode对C#代码有提示。终端命令行cd到Unity项目根目录,运行命令dotnet new console创建dotnet命令行工程。Unity项目根目录下会生成 xx.csproj文件、obj目录、bin目录

7.添加unity库引用,目的是让VSCode能识别Unity的命名空间(UnityEngine、UnityEngine.UI等)。打开obj/project.assets.json文件,在compile节添加unity库路径,包括(有用到其他库自己添加):

"/Applications/Unity/Unity.app/Contents/Managed/UnityEngine.dll": {},

"/Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll": {},

这样,Unity+VSCode的环境就搭建好,可以用VSCode写脚本了。

二、编辑器简介

1.工程结构管理器

2.场景层级管理器

3.场景编辑器

4.属性编辑器

新建工程时,工程结构管理器中,Assets目录下为空,可以在下面创建场景,双击场景在场景层级管理器看到它的结构,在场景编辑器里可视化编辑,右边的属性编辑器可以对相应对GameObject设置属性、添加组件(包括脚本)。有使用过cocos creator经验会很熟悉,不详述。

三、熟悉开发流程

首先必须了解一些基本概念,

1.在Unity里,游戏由GameObject组成(可以理解成cocos里的cc.Node),GameObject可以添加组件

2.组件基类为Component,但用户自定义的脚本都继承自MonoBehaviour(Component的子类,如同cocos creator里的cc.Component)

3.每个GameObject有基本的Transform,设置GameObject的坐标

Assets目录是游戏开发所有资源存放的地方,包括图片、声音、脚本资源。我开发游戏,一般只做一个scene,Assets目录下新建一个目录Scene,在下面新建场景Main(在文件系统中可以看到它的全称是Main.unity)。

双击,在场景层级管理器中可以看到它的层级结构,默认只有一个Main Camera。为了支持屏幕适配,编写一个C#脚本,在Assets目录下新建一个目录Script,用于存放C#脚本。新建C#脚本MainCamera(文件系统中MainCamera.cs),用VSCode打开(VSCode直接打开整个项目的根目录),添加以下代码

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class MainCamera : MonoBehaviour {

public float designWidth = 6.4f;

public float designHeight = 9.6f;

// Use this for initialization

void Start () {

float screenHeight = Screen.height;

float orthographicSize = this.GetComponent().orthographicSize;

float aspectRatio = Screen.width * 1.0f / Screen.height;

// fix the litte side

if (aspectRatio < designWidth / designHeight) { // fix width

orthographicSize = designWidth / (2 * aspectRatio);

this.GetComponent().orthographicSize = orthographicSize;

Debug.Log("FIX_WIDTH, orthographicSize is " + orthographicSize);

} else { // fix height

orthographicSize = designHeight / 2;

this.GetComponent().orthographicSize = orthographicSize;

Debug.Log("FIX_HEIGHT, orthographicSize is " + orthographicSize);

}

}

// Update is called once per frame

void Update () {

}

}

在Unity编辑器的场景层级管理器选择Main Camera,在属性编辑器中给它添加组件(Add Component -> Scripts -> Main Camera),现在可以设置游戏的设计分辨率了。

游戏启动后,会根据GameObject“Main Camera”的生命周期触发Main Camera脚本的Start方法,根据游戏尺寸对照相机调整显示高度(不适用于UGUI,UGUI待会介绍)。该适配方案要注意几个概念,Unity默认单元大小为100个像素,所以宽高是实际像素数除以100,照相机的orthographicSize等于照相机显示高度的一半。如设置为6.4x9.6,那么美术出资源时一屏的大小就是640x960。不同的手机屏幕自动做等比例缩放,具体缩放倍数,当实际屏幕宽高比小于设计分辨率时宽缩放到跟实际屏幕一样,否则高缩放到跟实际屏幕一样。另外一边相应等比例缩放,小的一边铺满全屏可以避免出现黑边,但也导致被裁剪,这种方式主要针对全屏的场景。

给主场景添加两个GameObject:SceneLayer和PopupLayer,分别作为场景和弹窗的根节点。

默认组件Transform只有位置没有大小,换成组件RectTransform,设置其大小为设计分辨率

现在可以写游戏入口代码了,在Script目录新建脚本StartCtrl.ts,添加两个属性sceneLayer、popupLayer用于跟编辑器场景中的两个GameObject关联。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class StartCtrl : MonoBehaviour {

public GameObject sceneLayer = null;

public GameObject popupLayer = null;

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

}

在Unity编辑器的场景层级管理器选择Main Camera,在属性编辑器中给它添加组件(Add Component -> Scripts -> Start Ctrl),把场景层级管理器的sceneLayer、popupLayer拖到对应的属性完成关联。启动游戏后,GameObject“Main Camera”的生命周期就会触发StartCtrl里对应的方法,StartCtrl里的sceneLayer和popupLayer属性已被赋值为Main场景对应的子节点。后面我们会继续讲解如何使用这两个属性对界面进行分层管理。

我们先看看怎样制作界面。我们可以把每一个界面都做成一个prefab预制体。Assets目录下新建一个目录Resources(该目录资源可以用Resources.Load直接加载),Resources目录下新建一个目录Prefabs,预制体放到这个目录(Unity建议使用AssetBoundle方式,可以将资源分包,后面调整结构)。

制作预制体的方法很简单。先双击Scene/Main.unity打开,新建空GameObject,属性面板将新GameObject名字改为TestView,修改Transform组件为RectTransform组件,设置大小为设计分辨率,如6.4x9.6(注意1个单元100个像素),拖动该GameObject到工程结构管理器面板的Assets/Resources/Prefabs目录。这样一个预制体TestView就生成了。

预制体编辑完后可以从场景中删除,需要再次编辑时从Prefabs目录拖回场景中,修改完后点击属性面板的Apply同步,并从场景中删除。

在预制体里添加UI -> Text,会自动添加Canvas和EventSystem,一个负责渲染一个负责事件处理。这里需要对界面做适配,Canvas属于UGUI,需要在Canvas Scaler组件设置其设计分辨率和适配方案,其中这里填的大小是设计分辨率的一半,如640x960填320x480。Match 0表示宽缩放到跟实际屏幕一样,1表示高缩放到跟实际屏幕一样。另外一边相应等比例缩放。

同样我们可以开始写这个界面的脚本TestViewCtrl.cs,控制界面逻辑和刷新。这个脚本还是继承MonoBehaviour,定义对应的Text等类型的属性(记得using UnityEngine.UI),这样就可以把界面的元素关联到脚本,通过脚本来刷新。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class TestViewCtrl : MonoBehaviour {

public Text txtHello = null;

// Use this for initialization

void Start () {

txtHello.text = "你好";

}

// Update is called once per frame

void Update () {

}

}

打开回刚才那个预制体,选择根GameObject,在属性面板选择添加组件TestViewCtrl,并将对应ui组件拖到脚本组件的属性上进行关联,这样我们就可以通过TestViewCtrl控制这个界面了。

要显示这个界面,首先要加载prefab。Unity提供了Resources.Load方法,加载Resources目录下的资源(不要填后缀名),加载成功后通过Instantiate方法把预制体实例出一个GameObject,Unity的界面布局也是基于组合模式的一棵树,transform通过SetParent把自己添加到父的GameObject。所以,我们通过gameObj.transform.SetParent把这个界面放到屏幕,这些代码可以写在入口脚本StartCtrl的Start方法里。可以通过GameObject.GetComponent获取TestViewCtrl的实例来操作界面。不过,我一般是通过MonoBehaviour的生命周期和消息来实现界面更新,降低耦合,后面会详细介绍这种方式。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class StartCtrl : MonoBehaviour {

public GameObject sceneLayer = null;

public GameObject popupLayer = null;

// Use this for initialization

void Start () {

Object prefab = Resources.Load("Prefabs/TestView", typeof(GameObject));

if (!prefab) {

Debug.Log("Prefab is null");

return;

}

GameObject gameObj = Instantiate(prefab) as GameObject;

gameObj.transform.SetParent(popupLayer.transform);

}

// Update is called once per frame

void Update () {

}

}

现在我们已经知道怎样建立游戏入口,怎样制作、加载、显示界面,下一章将讲解怎样对弹窗分层管理。

u3d游戏开发视频潭州_Unity MMORPG游戏开发教程(一)——初识Unity相关推荐

  1. u3d游戏开发视频潭州_游戏美术行业的发展与应用人工智能学院专业介绍及未来前景系列报告会二...

    为了让2020级新同学对动漫专业加深认识,更好的规划学习,学院于11月12日6点晚邀请了校企合作单位"369云遮月游戏公司"在长安校区图书馆阶梯教室进行了游戏美术行业的发展与应用的 ...

  2. Flask学习 黑马程序员-6节课入门Flask框架web开发视频(中途撤退,寻找py3教程)

    文章目录 postman工具 get和post 如何给路由传参 解析 @app.route('')这个叫视图函数 Jinja2模板引擎 动态传参 注释.变量代码块以及控制代码块的使用 注释:ctrl+ ...

  3. 微信公php开发视频,PHP实现微信公众平台开发 全套视频资源下载

    好久没有更新东西了,今天给大家分享一份比较不错的视频学习资源吧. 主要是关于PHP实现微信公众平台开发, 不知道大家对于微信平台的开发有多少了解,那么今天就从基础开始吧,资源目录如下(PS :适各自的 ...

  4. linux网卡驱动开发视频,Linux下网卡驱动程序的开发.doc

    Linux下网卡驱动程序的开发 论文题目:Linux下网卡驱动程序的开发 专 业: 年 级: 学生学号: 学生姓名: 指导教师: 完成时间: Linux下网卡驱动程序的开发 八年经验 专业指导毕业设计 ...

  5. 计算机游戏制作零基础教程,一个人、零基础,一天内学会独立开发出电脑和手机游戏?视频教学...

    原标题:一个人.零基础,一天内学会独立开发出电脑和手机游戏?视频教学 现在喜欢玩游戏的人很多,喜欢自己看动画的人也很多. 很多人在玩游戏或者看动画的时候,总会冒出一些非常有想法的点子,比如想自己做一个 ...

  6. 制作MMORPG游戏需要储备哪些门子技术

    今天给大家分享一下制作一个MMORPG游戏需要学习的知识点和技术储备.MMORPG游戏又叫大型多人在线角色扮演类游戏,对技术,美术,策划的要求非常的高,制作一个成功的MMORPG不容易,今天我们从技术 ...

  7. Android FrameWork底层开发视频全套

    我的百度云连接 链接: https://pan.baidu.com/s/1i64xvjJ 密码: 5ptb 我的百度云连接 链接: https://pan.baidu.com/s/1i64xvjJ 密 ...

  8. 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)

    使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定.捕获所有异常.非常适合从头开始,但大公司已经有现成的C++框架.所以不会使用) 参考文章: (1)使用 Go 语言开发大型 MMO ...

  9. Silverlight开发MMORPG游戏研讨(4):用一个定时器实现多个不同帧频的动画

    上一篇文章介绍了用CompositionTarget_Rendering实现固定时间间隔定时器.本篇将继续这个话题,介绍该定时器的一个实际应用:用一个定时器实现多个帧频不同的动画,笔者正在开发的MMO ...

最新文章

  1. 一个最简单的登录页面测试case
  2. JsRender (js模板引擎)
  3. boost::log::sinks::file用法的测试程序
  4. C#排队处理DEMO
  5. c语言数据转移,重温C语言(2)之数据
  6. 内部排序的方法实验报告_python 十大经典排序算法
  7. java json 对象如何对属性排序_Java对象集合、对象数组如何排序?你需要知道这两种方式...
  8. Oracle索引简单介绍与示例
  9. linux配置部署nginx
  10. 第四章 Spring.Net 如何管理您的类___统一资源访问接口
  11. 华三交换机配置定时重启任务
  12. 非华为PC安装华为电脑管家,免积分下载
  13. C语言:下载并安装编译器(MinGW-W64 GCC)win10环境
  14. 技术设计的任务是将功能原理方案得以具体化
  15. 转行计算机,如何成功进入大厂?
  16. 前端基础2——CSS3
  17. en-win7-x64-sp1 + vs2015.3 + Lenovo Z470 装机镜像
  18. PHP http_build_query用法详解
  19. Tiwtter4j 授权 推图片
  20. (JQuery学习笔记)我对jQuery选择器的总结

热门文章

  1. sigaction函数中关于sa_mask的解释
  2. 如何在Java中将GIF图像转换为PNG等图像格式?试试Aspose
  3. GitHub+Hexo 搭建个人博客(一)
  4. 英文视频如何翻译成中文视频简单工具推荐
  5. py229基于python的网上咖啡商城#毕业设计
  6. 数说 | 中国世界500强数量首超美国,但别高兴得太早
  7. 16.JavaScript函数、return陷阱、函数定义、参数传递、默认参数、局部变量、全局变量、返回值、技巧
  8. Artery框架增删改查学习
  9. 程序员久坐太累,用BTU模组和液晶屏改造了一款智能呼啦圈!
  10. 使用javax.mail发送邮件出现:javax.mail.AuthenticationFailedException: failed to connect