一 角色移动
unity里面的transform组件非常好用
transform.right这种枚举值真的很方便
Vector2向量 控制移动方向
Input输入非常非常方便!
后面章节有刚体移动,应用也很广泛
transform.Translate(transform.right*speed*Time.deltaTime);
角色随键盘移动:
[Range(0,10)]
public float speed=2;
private float moveX,moveY;
private Vector2 moveXY;
void Update()
{
moveX=Input.GetAxisRaw("Horizontal");
moveY=Input.GetAxisRaw("Vertical");
moveXY.x=moveX*speed*Time.deltaTime;
moveXY.y=moveY*speed*Time.deltaTime;
transform.Translate(moveXY);
}
二 地图绘制
unity自带的tilemap简直是个神器,因为真的非常简便好用
图片精灵是2D游戏的核心组件,功能非常强大,也很易用
- 首先在场景中新建一个Tilemap对象 (瓦片地图)
2. 在资源文件夹中新建一个地图文件夹,在里面新建一个瓦片
3. 将瓦片素材图片进行九宫格裁切
4 设置瓦片
然后选择创建新瓦片层 将目录指定好
这样就完成了一副新的瓦片模板
接下来,为瓦片模板里添加地板,很简单,将切好的九宫图拖进来选好文件夹保存,就建好了地板模板了!(其实单张图也可以导入)
5. 用上面的工具就可以绘制一张简单的地图了
调低tilemap的层级防止遮挡
6. 为tilemap设置碰撞体
选中tilemap节点,为其添加tilemap collider2D组件.
然后到地图资源文件夹下,将想产生碰撞的碰撞类型改为sprite,不想产生碰撞的改为none即可.
这样我们可以看到 水已经是带碰撞体的了
7.碰撞体优化
所有水体每个都有一个碰撞盒子,这样很消耗性能,所以我们可以再给tilemap添加一个composite collider(组合碰撞体)组件.添加此组件会自动为其添加rigidbody2D刚体组件
所以要先取消重力影响,将刚体设为静态
然后在碰撞机中选中 used by composite
这样水体就成为一个碰撞体了.
接下来绘制树木 等环境装饰 这里涉及到了预制体
三. 预制体
灵活使用预制体,可以让工作变得轻松,也更方便管理和修改.
这里最好用预制体的方式
预制体很简单,将场景中的任意物体拖入资源文件夹即可生成
生成后向改变可以进入预制件改动,双击进入预制件改动,改动完退出预制件场景即可
也可以点击任意一个预制件实例,修改完成后 apply all
制作好预制件后将预制件拖入场景中布置前景即可
四 设置角色与前景的层级关系(互相遮挡)
选择 edit→project settings
选择图形选单 , 将相机排序设置为custom Axis (自定义轴) , 再将Y轴设为1 这样就会按照Y轴值计算遮挡并渲染(注意相机排序针对同一层,应将会互相遮挡的物体设置在一层中)
把互相遮挡的元素的锚点设置为支点以获得更好的遮挡效果
五 刚体碰撞
给节点添加刚体组件( rigidbody2D)可以进行物理模拟
1.防止掉落
如果不是垂直2D,应该把gravity设为0,防止物体受重力影响掉落下去.
2.防止碰歪
把Z轴旋转冻结可以防止角色被碰撞体碰歪
3.防止碰撞抖动(刚体移动)
通过刚体移动物体可以防止碰撞抖动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyRuby : MonoBehaviour
{
[Range(0,100)]
public float speed=2; //移动速度
private float moveX,moveY; //用来存储按键信息
private Vector2 moveToPosition; //刚体移动的目标位置向量
private Rigidbody2D rubyBody; //先定义一个刚体
private Vector2 moveVector; //定义一个移动向量
private void Start() {
rubyBody=GetComponent<Rigidbody2D>(); //通过组件查找找到刚体