点击Unity官网右上角头像图标注册Unity ID,点击创建Unity ID
输入注册内容,通过人机验证,点击创建Unity ID
如果通过邮箱方式注册,则打开邮箱,点击激活邮件
绑定手机
还可以绑定微信,退出登录之后(服务器不稳定就不要退出了),使用微信登录之后绑定已注册的账号即可
访问Unity官方下载
点击Unity Hub
点击Windows 下载
下载Unity Hub
点击Sign in
登录,建议使用手机号接受验证码方式登录
弹出 Install Unity Editor 窗口
点击Install Unity Editor
安装 Unity
点击Agree and get personal edition license
同意个人许可(或者点击Choose another plan
付费)
等待安装完毕
点击齿轮图标进入偏好设置
点击Appearance
进入外观设置,将Language
由English
改为简体中文
,关闭偏好设置窗口
左侧栏,安装,选择已安装的Unity
点击右侧齿轮图标,点击添加模块
,勾选简体中文
,点击继续
,勾选同意条款,点击安装
(此时还会顺带安装Visual Studio Community 2019,后面要用)
之后打开一个项目,菜单栏,Edit,Preferences,Languages,Editor language改为简体中文 (Experimental)
重新打开项目即可生效
learn.u3d.cn
learn.u3d.cn
可以用微信登录后绑定手机号,登入后再绑定Unity ID,它与unity.cn
不是一套账号系统
Unity Hub,左侧栏,项目,右上角,点击新项目
左侧栏,模板选择核心模板
,选中2D核心模板
(这是一个2D空项目)
右侧,项目名称改为Unity Project 推箱子
右下角,点击创建项目
提示安装PlasticSCM
,点击确认
提示PlasticSCM下载成功,点击安装
等待加载,多等一会
将sokoban
文件夹拖进Assets窗口
选中4个png,将每单位像素数改为128
,点击其他位置触发保存
由场景窗口切换为游戏窗口
Free Aspect
改为WXGA (1366x768)
修改完后切回场景窗口
层级窗口的左上角,点击+
2D对象,瓦片地图,矩形
Tilemap
改名为wail
菜单栏,窗口,2D,平铺调色板
创建新调色板,名称改为0map
,点击创建
,点击选择文件夹
拖拽图片wail
到平铺调色板窗口,改名为0wail.asset
,点击保存
层级窗口,选中Grid
下的wail
右侧检查器,点击添加组件
,Tilemap Collider 2D
(Tilemap分类)
Tilemap Collider 2D
属性中,勾选由复合使用
再添加一个Composite Collider 2d
(Physics 2D)
Rigidbody 2D
的身体类型改为Kinematic
将worker
图片拖放到层级中
层级,选中worker
检查器,位置,X:-0.5,Y:0.5
(如果想手动拖拽,可以激活场景中的四方向箭头按钮)
层级,选中worker
检查器,添加组件,Box Collider 2D
(Physics 2D)
Box Collider 2D
的大小改为 X 0.95,Y 0.95
检查器,添加组件,Rigidbody 2D
(Physics 2D)
Rigidbody 2D
的身体类型改为Kinematic
将box
图片拖放到层级中
层级,选中box
检查器,位置,X:-1.5,Y:0.5
层级,选中box
检查器,添加组件,Box Collider 2D
(Physics 2D)
Box Collider 2D
的大小改为 X 0.95,Y 0.95
层级,选中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
将box_place
图片拖放到层级中
层级,选中box_place
检查器,位置,X:-3.5,Y:0.5
层级,选中box_place
检查器,添加组件,Box Collider 2D
(Physics 2D)
Box Collider 2D
的大小改为 X 0.95,Y 0.95
勾选是触发器
检查器,添加组件,Rigidbody 2D
(Physics 2D)
Rigidbody 2D
的身体类型改为Kinematic
层级,选中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
Unity,菜单栏,编辑,首选项,外部工具
将Open by file extention
修改为Virtual Studio Community 2019
这个设置会掉,发现Visual Studio不能联想游戏引擎的代码了,就再重新设置一下
左下角,项目,右键Assets
,创建,文件夹,命名为Scripts
右键Scripts
,创建,C#脚本,命名为worker
右键worker
脚本文件,打开
(如果有以下内容,则按内容处理:选择一个应用以打开此.cs文件,双击选择Microsoft Visual Studio 2019;登录Visual Studio界面选择以后再说
,再点击启动 Visual Studio(S)
)
一、查看脚本内容
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保存
回到Unity
层级,选中worker
左下角项目,Assets,Scripts,将worker
脚本拖拽到右侧检查器窗口的添加组件
按钮上
点击抬头位置的三角运行按钮(或者点击菜单栏,编辑,播放(Ctrl+P))
输入WASD,发现角色可以在地图上随意移动,可以与箱子或墙重叠(覆盖或被覆盖)
再次点击三角运行按钮结束运行
Unity,项目,右键Assets
,在资源管理器中显示
新建文件.editorconfig
,输入以下内容保存
root = true # 所在目录是项目根目录,此目录及子目录下保存的文件都会生效
[*] # 对于所有文件
charset = utf-8 # 文件编码格式
insert_final_newline = true #文件结尾添加换行符,以防警告
后续改改代码触发重新编译就生效了
点击worker
(或者其他物体),右侧检查器,图层,点击添加图层
User Layer 6
命名为wail
User Layer 7
命名为box
按住Shift选中4个box,图层改为7: box
展开Grid下的wail,图层改为6: wail
一、将
// 图层遮罩1
改为
// 图层遮罩1
public LayerMask wailandbox;
二、
保存,回到 Unity
层级,选中worker
,检查器,找到脚本,Wailandbox,勾选wail
和box
三、回到 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);
}
五、此时运行,角色可以移动,但是无法穿越墙或者箱子
一、左下角,项目,右键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
// 检测到墙或者箱子
改为
// 检测到墙或者箱子
if (hit.collider.gameObject.GetComponent<box>() != null)
{
return hit.collider.GetComponent<box>().moveToVec(moveVec);
}
运行游戏,角色可以移动,可以推动箱子,不可以穿墙,不可以穿箱子,不可以在箱子被墙挡住的情况下还继续推
层级,选中4个box
,右侧检查器,添加组件,Physics 2D,Rigidbody 2D
身体类型改为Kinematic
层级,选中4个box_place
,
检查器,标签,添加标签,点击+
,标签名字命名为box_place
,点击Save
再次选中4个box_place
,将标签修改为box_place
// 触发器
改为
// 触发器
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "box_place")
{
collision.gameObject.SetActive(false);
}
}
角色推动箱子到目标点,目标点消失,箱子变为灰色
使用 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,Ctrl+S保存项目
Unity,菜单栏,文件,点击生成设置…(Ctrl+Shift+B)打开Build Settings窗口
选择Windows
目标平台,点击生成
按钮
路径选择桌面,在桌面上新建文件夹推箱子
,选中新建的文件夹,点击选择文件夹
运行Unity Project 推箱子.exe
,Alt+F4
结束运行