Unity的helloworld

1、注册Unity ID

点击Unity官网右上角头像图标注册Unity ID,点击创建Unity ID
Unity的helloworld_第1张图片
输入注册内容,通过人机验证,点击创建Unity ID
Unity的helloworld_第2张图片
如果通过邮箱方式注册,则打开邮箱,点击激活邮件

绑定手机
Unity的helloworld_第3张图片
还可以绑定微信,退出登录之后(服务器不稳定就不要退出了),使用微信登录之后绑定已注册的账号即可

2、下载安装Unity Hub

访问Unity官方下载
点击Unity Hub
点击Windows 下载下载Unity Hub

3、打开Unity Hub

点击Sign in登录,建议使用手机号接受验证码方式登录
弹出 Install Unity Editor 窗口
点击Install Unity Editor安装 Unity
点击Agree and get personal edition license同意个人许可(或者点击Choose another plan付费)
等待安装完毕

4、设置Unity Hub语言

点击齿轮图标进入偏好设置
在这里插入图片描述
点击Appearance进入外观设置,将LanguageEnglish改为简体中文,关闭偏好设置窗口
Unity的helloworld_第4张图片

5、设置Unity语言并安装VS2019

左侧栏,安装,选择已安装的Unity
点击右侧齿轮图标,点击添加模块,勾选简体中文,点击继续,勾选同意条款,点击安装
(此时还会顺带安装Visual Studio Community 2019,后面要用)

之后打开一个项目,菜单栏,Edit,Preferences,Languages,Editor language改为简体中文 (Experimental)
重新打开项目即可生效

6、教程网站learn.u3d.cn

learn.u3d.cn
learn.u3d.cn可以用微信登录后绑定手机号,登入后再绑定Unity ID,它与unity.cn不是一套账号系统

1、创建新项目

Unity Hub,左侧栏,项目,右上角,点击新项目
左侧栏,模板选择核心模板,选中2D核心模板(这是一个2D空项目)

右侧,项目名称改为Unity Project 推箱子
右下角,点击创建项目
提示安装PlasticSCM,点击确认
提示PlasticSCM下载成功,点击安装
等待加载,多等一会

2、添加素材

sokoban文件夹拖进Assets窗口
选中4个png,将每单位像素数改为128,点击其他位置触发保存
Unity的helloworld_第5张图片Unity的helloworld_第6张图片Unity的helloworld_第7张图片Unity的helloworld_第8张图片

3、游戏窗口

由场景窗口切换为游戏窗口
Free Aspect改为WXGA (1366x768)
修改完后切回场景窗口

4、添加瓦片地图

层级窗口的左上角,点击+
2D对象,瓦片地图,矩形
Tilemap改名为wail

5、平铺调色板

菜单栏,窗口,2D,平铺调色板
创建新调色板,名称改为0map,点击创建,点击选择文件夹
拖拽图片wail到平铺调色板窗口,改名为0wail.asset,点击保存

在平铺调色板窗口选中wail,在场景窗口画一个风车型地图
Unity的helloworld_第9张图片

6、墙添加碰撞,静止

层级窗口,选中Grid下的wail

右侧检查器,点击添加组件Tilemap Collider 2D(Tilemap分类)
Tilemap Collider 2D属性中,勾选由复合使用

再添加一个Composite Collider 2d(Physics 2D)
Rigidbody 2D的身体类型改为Kinematic

7、添加人物

worker图片拖放到层级中
层级,选中worker
检查器,位置,X:-0.5,Y:0.5
(如果想手动拖拽,可以激活场景中的四方向箭头按钮)

8、添加工人组件

层级,选中worker
检查器,添加组件,Box Collider 2D(Physics 2D)
Box Collider 2D的大小改为 X 0.95,Y 0.95
检查器,添加组件,Rigidbody 2D(Physics 2D)
Rigidbody 2D的身体类型改为Kinematic

9、添加箱子

box图片拖放到层级中
层级,选中box
检查器,位置,X:-1.5,Y:0.5

10、添加箱子组件

层级,选中box
检查器,添加组件,Box Collider 2D(Physics 2D)
Box Collider 2D的大小改为 X 0.95,Y 0.95

11、复制箱子

层级,选中box
Ctrl+C,Ctrl+V,复制3个,一共4个箱子
改名为box1 box2 box3 box4
它们的位置分别为
X:-1.5,Y:0.5
X:0.5,Y:1.5
X:1.5,Y:-0.5
X:-0.5,Y:-1.5

12、添加箱子存放处

box_place图片拖放到层级中
层级,选中box_place
检查器,位置,X:-3.5,Y:0.5

13、添加箱子存放处组件

层级,选中box_place
检查器,添加组件,Box Collider 2D(Physics 2D)
Box Collider 2D的大小改为 X 0.95,Y 0.95
勾选是触发器
检查器,添加组件,Rigidbody 2D(Physics 2D)
Rigidbody 2D的身体类型改为Kinematic

14、复制箱子存放处

层级,选中box_place
Ctrl+C,Ctrl+V,复制3个,一共4个箱子存放处
改名为box_place1 box_place2 box_place3 box_place4
它们的位置分别为
X:-3.5,Y:0.5
X:0.5,Y:3.5
X:3.5,Y:-0.5
X:-0.5,Y:-3.5

15、展示

层级
Unity的helloworld_第10张图片
场景
Unity的helloworld_第11张图片
平铺调色板
Unity的helloworld_第12张图片
Assets
Unity的helloworld_第13张图片

16、脚本编写设置

Unity,菜单栏,编辑,首选项,外部工具
Open by file extention修改为Virtual Studio Community 2019
这个设置会掉,发现Visual Studio不能联想游戏引擎的代码了,就再重新设置一下

17、脚本

左下角,项目,右键Assets,创建,文件夹,命名为Scripts
右键Scripts,创建,C#脚本,命名为worker

右键worker脚本文件,打开
(如果有以下内容,则按内容处理:选择一个应用以打开此.cs文件,双击选择Microsoft Visual Studio 2019;登录Visual Studio界面选择以后再说,再点击启动 Visual Studio(S))

18、编写移动脚本 worker

一、查看脚本内容

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

public class worker : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

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

改为以下模板

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

public class worker : MonoBehaviour
{
    // 向量
    // 图层遮罩1
    
    // Start is called before the first frame update
    void Start()
    {
        
    }

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

    // 移动

    // 判断移动
    
}

二、将

    // 向量

改为

    // 向量
    Vector2 moveVec;

操作:输入if后按两次Tab可以插入"if"片段


三、将

    // 移动

改为

    // 移动
    public void move(Vector2 moveVec)
    {
        transform.Translate(moveVec);
    }

四、将

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

改为

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            moveVec = Vector2.up;
        }
        else if (Input.GetKeyDown(KeyCode.A))
        {
            moveVec = Vector2.left;
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            moveVec = Vector2.down;
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            moveVec = Vector2.right;
        }
        
        if (moveVec!=Vector2.zero)
        {
            move(moveVec);
        }
        
        moveVec = Vector2.zero;
    }

五、Ctrl+S保存

19、挂载脚本 worker

回到Unity
层级,选中worker
左下角项目,Assets,Scripts,将worker脚本拖拽到右侧检查器窗口的添加组件按钮上

20、运行

点击抬头位置的三角运行按钮(或者点击菜单栏,编辑,播放(Ctrl+P))
输入WASD,发现角色可以在地图上随意移动,可以与箱子或墙重叠(覆盖或被覆盖)

再次点击三角运行按钮结束运行

21、脚本的中文在Unity的检查器中乱码

Unity,项目,右键Assets,在资源管理器中显示
新建文件.editorconfig,输入以下内容保存

root = true # 所在目录是项目根目录,此目录及子目录下保存的文件都会生效

[*] # 对于所有文件
charset = utf-8 # 文件编码格式
insert_final_newline = true #文件结尾添加换行符,以防警告

后续改改代码触发重新编译就生效了

22、图层

点击worker(或者其他物体),右侧检查器,图层,点击添加图层
User Layer 6命名为wail
User Layer 7命名为box

按住Shift选中4个box,图层改为7: box
展开Grid下的wail,图层改为6: wail

23、编写射线检测

一、将

    // 图层遮罩1

改为

    // 图层遮罩1
    public LayerMask wailandbox;

二、
保存,回到 Unity
层级,选中worker,检查器,找到脚本,Wailandbox,勾选wailbox


三、回到 Visual Studio

    // 判断移动

改为

    // 判断移动
    public bool canMove(Vector2 moveVec)
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, moveVec, 1f, wailandbox);
        if (hit)
        {
            // 检测到墙或者箱子
        }
        else
        {
            return true;
        }
        return false;
    }


四、将Update中的

        if (moveVec!=Vector2.zero)
        {
            move(moveVec);
        }

改为

        if (moveVec!=Vector2.zero && canMove(moveVec))
        {
            move(moveVec);
        }

五、此时运行,角色可以移动,但是无法穿越墙或者箱子

24、box脚本

一、左下角,项目,右键Scripts,创建,C# 脚本,命名为box

二、双击box脚本打开
替换为如下模板

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

public class box : MonoBehaviour
{
    //图层遮罩2

    // Start is called before the first frame update
    void Start()
    {
        
    }

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

    // 移动

    // 触发器
}

三、将

    // 图层遮罩2

改为

    // 图层遮罩2
    public LayerMask wail;

四、将

    // 移动

改为

    // 移动
    public bool moveToVec(Vector2 vec)
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, vec, 1f, wail);
        if (!hit)
        {
            transform.Translate(vec);
            return true;
        }
        return false;
    }

五、保存
六、挂载
回到Unity
层级,选中4个box
左下角项目,Assets,Scripts,将box脚本拖拽到右侧检查器窗口的添加组件按钮上
七、设置图层
回到Unity
层级,选中4个box,检查器,找到脚本,Wail,勾选wail

25、worker脚本

            // 检测到墙或者箱子

改为

            // 检测到墙或者箱子
            if (hit.collider.gameObject.GetComponent<box>() != null)
            {
                return hit.collider.GetComponent<box>().moveToVec(moveVec);
            }

26、运行

运行游戏,角色可以移动,可以推动箱子,不可以穿墙,不可以穿箱子,不可以在箱子被墙挡住的情况下还继续推

27、给box添加Rigidbody 2D

层级,选中4个box,右侧检查器,添加组件,Physics 2D,Rigidbody 2D
身体类型改为Kinematic

28、修改箱子存放处的标签

层级,选中4个box_place
检查器,标签,添加标签,点击+,标签名字命名为box_place,点击Save

再次选中4个box_place,将标签修改为box_place

29、box 触发器

    // 触发器

改为

    // 触发器
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "box_place")
        {
            collision.gameObject.SetActive(false);
        }
    }

30、运行

角色推动箱子到目标点,目标点消失,箱子变为灰色

31、如何打印输出

使用 Unity 的 Debug.Log 语句可以打印输出


修改worker.cs的代码

    // Start is called before the first frame update
    void Start()
    {
        
    }

改为

    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("绑定在" + this.ToString() + "上的脚本运行了");
    }

回到Unity,切换到控制台窗口,运行
Unity的helloworld_第14张图片

32、生成

Unity,Ctrl+S保存项目

Unity,菜单栏,文件,点击生成设置…(Ctrl+Shift+B)打开Build Settings窗口
选择Windows目标平台,点击生成按钮
路径选择桌面,在桌面上新建文件夹推箱子,选中新建的文件夹,点击选择文件夹

运行Unity Project 推箱子.exeAlt+F4结束运行



Unity的helloworld_第15张图片

你可能感兴趣的:(unity,游戏引擎)