unity2D备忘志

一 角色移动

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游戏的核心组件,功能非常强大,也很易用
  1. 首先在场景中新建一个Tilemap对象 (瓦片地图)

v2-613da4cba203848328c26d5a28ec01c5_b.jpg

2. 在资源文件夹中新建一个地图文件夹,在里面新建一个瓦片

v2-6ced9011728ac2f419e5f75de65485d1_b.jpg

3. 将瓦片素材图片进行九宫格裁切

v2-15614227bec6232d127585c3496b776b_b.jpg

v2-6e2ef543e564fdc3967822e40730398a_b.jpg

4 设置瓦片

v2-1c1d5a010ab1ae84de811a8296690edd_b.jpg

然后选择创建新瓦片层 将目录指定好

v2-6bfb4218199e8c979e1d5aa680244cc6_b.jpg

这样就完成了一副新的瓦片模板

v2-1156fc199ac8360d20d86f7ef4eaee45_b.jpg

接下来,为瓦片模板里添加地板,很简单,将切好的九宫图拖进来选好文件夹保存,就建好了地板模板了!(其实单张图也可以导入)

v2-e407404149aafc13cde5dc6f3e52b59f_b.jpg

5. 用上面的工具就可以绘制一张简单的地图了

v2-bdaef25e9bc8d50ad075ef0ffc6ab615_b.jpg

调低tilemap的层级防止遮挡

v2-c9f572a72e46c4e83a8fec28feb47cec_b.jpg

6. 为tilemap设置碰撞体

选中tilemap节点,为其添加tilemap collider2D组件.

v2-55b3c92183ab136e42dcde9b19fcfc63_b.jpg

然后到地图资源文件夹下,将想产生碰撞的碰撞类型改为sprite,不想产生碰撞的改为none即可.

v2-3a0caec4a7dc657cb1349b587ef12b2f_b.jpg

这样我们可以看到 水已经是带碰撞体的了

v2-3588cc939b3d939a92b06b37c5146689_b.jpg

7.碰撞体优化

所有水体每个都有一个碰撞盒子,这样很消耗性能,所以我们可以再给tilemap添加一个composite collider(组合碰撞体)组件.添加此组件会自动为其添加rigidbody2D刚体组件

所以要先取消重力影响,将刚体设为静态

v2-5af898a65b586c125158a1d6c5206e45_b.jpg

然后在碰撞机中选中 used by composite

v2-33d83e736fa1e0db112e0efd6cdfb797_b.jpg

这样水体就成为一个碰撞体了.

v2-57fb2cf0392039295d28090e7a7b27fd_b.jpg

接下来绘制树木 等环境装饰 这里涉及到了预制体

三. 预制体

灵活使用预制体,可以让工作变得轻松,也更方便管理和修改.

这里最好用预制体的方式

预制体很简单,将场景中的任意物体拖入资源文件夹即可生成

v2-f09f8c14681a98ba894a3d915feb1c23_b.png

生成后向改变可以进入预制件改动,双击进入预制件改动,改动完退出预制件场景即可

v2-f22c3c464192b2ba7e1331b8af718eb0_b.jpg

也可以点击任意一个预制件实例,修改完成后 apply all

v2-4aa4f4221c6212c52348ef427e2f1ab0_b.jpg

制作好预制件后将预制件拖入场景中布置前景即可

v2-d369271ce9e2afeddf2b8c8212d11b18_b.jpg

四 设置角色与前景的层级关系(互相遮挡)

选择 edit→project settings

v2-c9097f6b1de0c2c2ff61b79a667ac7a2_b.jpg

选择图形选单 , 将相机排序设置为custom Axis (自定义轴) , 再将Y轴设为1 这样就会按照Y轴值计算遮挡并渲染(注意相机排序针对同一层,应将会互相遮挡的物体设置在一层中)

v2-9b3d28c7e30b65ee25340dcd64c7b923_b.jpg

v2-47a06b4862ad500cf2d7753ff3d8d061_b.gif

把互相遮挡的元素的锚点设置为支点以获得更好的遮挡效果

v2-766c1231310335abc694abe3eac38a9b_b.jpg

v2-d94d74b54a33a28d08860ffa9aa0b8aa_b.gif

五 刚体碰撞

给节点添加刚体组件( rigidbody2D)可以进行物理模拟

v2-5b4fbfff195c58bad8ed87a3470f7bca_b.jpg

1.防止掉落

如果不是垂直2D,应该把gravity设为0,防止物体受重力影响掉落下去.

2.防止碰歪

把Z轴旋转冻结可以防止角色被碰撞体碰歪

v2-d9841593e3e7b7375e94ce3dcdc9e795_b.jpg

3.防止碰撞抖动(刚体移动)

v2-29bdb9de30f44015b7ae11ca48433c39_b.gif

通过刚体移动物体可以防止碰撞抖动

        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>(); //通过组件查找找到刚体
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值