Unity下载
unity中国网址:www.Unity.cn
- 下载unityHub。
- 运行unityHub在Hub中下载unity,版本最好下载Hub推荐的LTS(长期支持版)。
- 由于写脚本需要用C#编程语言,安装的时候要选中Vs(电脑中有Vs的可以选择不安装)。
- 打开unity需要在Hub中打开。
新建项目,打开unity
1.在项目右上角点击新项目。
2.模板选择2D,给项目起个名字,然后选择项目的存储位置,一定不要勾选启用PlasticSCM,然后点击创建项目。
3.新建项目时间可能会长一些(也看电脑配置),再次打开速度就会快了,大家不用担心。
导入素材
导入素材的方式有两种:
5. 可以选择去unity官方商店去下载自己喜欢的素材,商店的位置在Window–>Asset Store。
6. 如果素材已经下载在电脑上了,可以选择直接导入Asset–>Import Package–>Custom Package。
**注意:**大家导入的素材都会放在Project下的Assets文件夹中。
设置背景
1.在导入的素材中找到自己觉得可以当背景的图片直接拖拽到Hierarchy窗口中,要记得调整素材的像素点,点击素材在Inspector窗口中找到Pixels Per Unit进行调整。
2.可以自己进行绘画,在Hierarchy窗口空白位置 鼠标右键–>2D–>Tilemap(瓦片地图),将绘画素材拖拽到Tile Palette就可以进行绘画,Tile Palette位置:Window–>2D–>Tile Palette。有些素材需要裁剪可以在Inspector窗口将Sprite Mode修改成Multiple,然后点击Sprite Editor在Sprite Editor窗口中Slice即可裁剪。
注意:别忘记调整素材的像素点。
图层Layer
我们绘画背景或者场景的时候可能会出现图层的问题,那么我们就需要对图层进行排序,
在 Inspector窗口中选择Sorting Layer(图层排序)进行排序,觉得缺少图层可以对图层进行添加,图层的名字见名知意就好。
注意:图层越在下面的就越会在前面显示。
假设都在选择同一个图层,可以用改变Order in Layer数字的方式进行显示,数字越大图层就会在前面。
添加游戏角色
在Hierarchy窗口空白位置 鼠标右键–>2D–>Sprite(精灵,可以承载素材中各式各样的东西),添加完在Inspector窗口中会有一个Sprite Renderer(渲染组件),将素材中添加好的角色拖拽到Sprite Renderer的Sprite中。
创建游戏实体
在Inspector窗口中点击Add Component进行添加组件
- Rigidbody 2D(刚体):可以将图片变成一个实际的物件,对物体进行重力,摩擦力等设置。
- Collider(碰撞体):collider有很多种,可以使游戏角色站立在我们创建的地面上等。
场景应该添加Tilemap Collider。
角色移动
要想让角色移动起来,就要给角色添加脚本。
在角色的Inspector窗口中点击Add Component进行添加New script组件,这个组件就是角色的脚本(代码)。双击脚本就可以打开Vs进行代码的编辑。
Start() :在游戏开始的时候会运行一次。
Update() :在游戏运行的每一帧都在运行。
FixedUpdate() :是在固定的时间间隔执行,不受游戏帧率的影响。
//获得刚体
public Rigidbody2D rb;
//让角色具有速度
public float speed;
void Start()
{
}
void Update()
{
//需要调用移动函数让角色可以在每一帧都被调用
Movement();
}
//可以让角色移动的函数
void Movement()
{
//a待变-1,d代表-1
float horizontalmove;
/*从按键上获取角色的横向移动
Horizontal只有三个参数-1(左),0(没动),1(右)
*/
horizontalmove = Input.GetAixs("Horizontal");
/*实现角色面向左右,在角色的Inspector窗口的Transform下Scale的x的值
可以使角色面向左或者是右,当x=-1时角色面向左,当x=1时,角色面向右
*/
//GetAxisRaw可以直接获得-1或1,GetAixs获得的是从-1到1这个范围
float facedircetion;
facedircetion = Input.GetAxisRaw("Horizontal");
//判断接受的值不是0就代表移动了
if(horizontalmove != 0)
{
//用刚体获得角色移动的速度
//Vector2 :2d平面上x,y轴的变化
rb.velocity = new Vector2(horizontalmove * speed , rb.velocity.y);
}
if(facedicetion != 0)
{
//使transform通过键盘获得-1或1
transform.localScale = new Vector3(facedircetion , 1 , 1);
}
}
注意:防止角色旋转需要将角色内刚体的z轴 (Free Rotation z)锁定.
让角色移动的方式还有很多,这个不唯一。
角色跳跃
角色趴下与角色跳跃的方法相似,后面就不对角色趴下进行说明了。
//先给角色增加一个跳跃的力
//与角色移动的写法相同,照葫芦画瓢即可,这个函数也要在Update()函数中调用
public float jumpforce;
void Jump()
{
if(Input.GetButtondDown("Jump"))
{
rb.velocity = new Vector2(rb.velocity.x , jumpforce * Time.daltatime);
}
}
为角色添加动画效果Animation
为了添加动画效果,我们需要为角色添加一个新的组件Animator(动画)
动画需要一个动画的控制Contronaller。
可以在Assets文件夹空白处右键–>Create—>Animato Contronaller,将Contronaller拖拽到Inspector窗口中的Contronaller中。
打开Window–>Animation–>Animation,在Animation窗口中给角色创建动画效果(动画效果)将素材中每一帧动画的图片拖拽到Animation窗口中将动画调整到自己想要的效果。
我们可以通过这个方法给角色添加很多自己需要的效果,但是需要对Window–>Animation–>Animator进行修改。
/*在代码中声明一个Animator,通过代码来控制不一样的动画的触发时间等
需要将我们添加的Animator组件拖拽到我们的脚本中。*/
public Animator anim;
//内容根据设计的游戏进行添加和调用
镜头控制(跟踪)
由于我们设计的是2D游戏,所以需要镜头对角色一直都在跟踪。
1.可以给Main Camera添加一个脚本组件进行控制
//我们要想让镜头可以一直跟踪角色,就要让镜头的x,y的变化与角色的相同。
//获得角色transform的参数
public transform player;
//将角色的transform拖拽到我们声明的参数中
void Update()
{
//使镜头的位置与角色的位置相等,-10f代表角色本身没有变化的常量,
//2D游戏在z轴方向上无变化,所以就给一个常量。
//也可以将y轴改成0,镜头就不会跟随角色在y轴上进行移动
transform.positon = new Vector3(player.position.x , player.position.y , -10f);
}
2.更好的方法安装Cinemachine(像电影镜头杆一样的插件)
Cinemachine位置:Window—>Package Manager—>Cinemachine
在Cinemachine中添加一个Creat 2D Camera
将需要跟随的角色拖拽到Inspector窗口中的Follow中。
我们也可以对Creat 2D Camera进行设置,这个插件给我们提供了很多好用的功能,
期待你的探索哦!
在2D游戏中我们可能需要地图拥有一个边界,那我们就可以在Inspector窗口中,点击
Add Extension—>CinemachineConfinder添加这个组件,这个组件可以帮助我们找到地图的边界,同时CinemachineConfinder会需要一个2D的collider来确定我们在哪一个范围内移动我们的镜头。因此我们需要给我们的地图场景添加一个Polygon Collider 2D(多边形)点击Edit Collider对多边形进行修改。我们同时需要将Is Trigger勾选上,否则我们的角色将会掉下去。
丰富游戏,添加可收集物品
与添加游戏角色方法相同先添加精灵,再给添加物品进行实例化。
我们也需要给我们添加的物品添加一些动画可以使物品动起来。
我们可以给物品添加一个collider,然后给角色添加脚本碰到物品使物品消失。
在Inspector窗口中我们需要用到Tag给物体添加标签,脚本需要用带Tag
//定义一个整型的变量来记录我们需要收集的物品的数量
public int wupinmingzi;
//如果一个碰撞器2D进入了触发器,就需要调用 OnTriggerEnter2D()
//Collider2D && collision不是一个全局的参数,只能在当前的函数中调用
void OnTriggerEnter2D(Collider2D && collision)
{
//如果我们的角色碰到物品的标签使我们给物品添加的
if(collision.tag == "我们给物品添加标签的名称")
{
//销毁当前被碰到的物品
Destory(collision.gameObject);
//碰撞销毁后物品数量+1
wupinmingzi += 1;
}
}
prefab:预制 是最非常用的一种资源类型,是一种可被重复使用的游戏对象。
特点1:它可以被置入多个场景中,也可以在一个场景中多次置入。
特点2:当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。
特点3:所有Prefabs实例都是Prefab的克隆,所以如果实在运行中生成对象会有(Clone)的标记。
特点4:只要Prefabs原型发生改变,所有的Prefabs实例都会产生变化。
给角色添加物理材质Physics Material
在Project窗口中Asset文件夹空白处鼠标右键—>Create—>Physics Material 2D
在Inspector窗口中对材质进行摩擦力等的设置,设置完之后将材质拖拽到collider中的Material即可。
给游戏添加UI(用户的界面)
在Hierarchy窗口空白位置 鼠标右键—>UI–>找到自己需要的UI进行添加。
注意:添加UI前必须添加一个画布Canvas,然后在画布的文件夹中添加我们需要的UI组件,在Inspector窗口中对UI进行编辑。
添加敌人
创造敌人的方法与创建角色的方法相同。
我们需要给敌人添加碰撞体,刚体以及脚本来控制敌人自行移动等。
音效Audio
想要让我们的游戏可以有声音效果,首先我们应该有声音素材,声音的素材也可以在Assect Store中进行下载导入。
我们要先添加音源组件Audio Source将音源添加给我们的角色。将我们选择好的素材拖拽 到Inspector窗口中Audio Source里的AudioClip中,我们同时可以对一些功能进行修改,比如Play On Awake(在游戏一开始就播放),Loop(循环播放),还可以对音乐的节奏等进行修改。如果我们想要控制声音什么时候播放,我们一样可以选择用脚本对音乐进行控制。
结尾
本篇文章到此就结束了,如果你是刚刚入门游戏开发的,希望这篇文章对你会有帮助,如果说这篇文章有些看不懂的话,可以去b站搜索M_Studio进行学习,非常好的一个博主,讲解的非常细心,并且很适合初学者。