Unity2D学习笔记(Bilibili视频参考一 ——秋梦汐

实现背景的设计与角色的移动
在下载好Unity Hub与Unity Editor的基础上(手机要下好Unity Connect),创建新项目,选中2D标准。

一、实现背景的设计

1.进入项目后,新建一个Tilemap和Background。

2D Object--->Tilemap--->Rectangular

2.将Tilemap副本重命名为background

 

3.导入资源

进入Unity Hub中的社区,点击素材下面的查看更多,即可进入官网,进入后需要注册用户(在Unity Connect里面注册,然后电脑网页上登录直接扫码)

进入官网搜索pixel,价格选free,然后搜索pixel Adventure 1

点击Add To My Assets

选择Accept

上面会出现这个弹框,选择Open in Unity

序号1处需要先登录之前注册好的账号,序号2处在显示PackageManage后看到Download后点击

下载成功后,会显示以下内容,点击import,就能导入资源

4.创建背景

背景需要绘制,那么就需要画画的工具,在window中选择2D--->Tile Palette

在画板里面选create New Palette

点击选择文件夹,就可以在该文件里面放置“颜料”

在下面的素材栏中寻找Assets--->Terrian--->Terrian Sliced(原本里面有两个包,其中右边那个包里面很多图片的)

点击它然后右边框出现属性,对Pixel Per Unit进行编辑

(不用点击Apply,之后点任意地方,它会显示是否保存)保存属性后

将Terrian Sliced拖入到Palette

如何选中:长按左键,拖拽

如何绘制到Terrian图层:(如下图就可以绘制)

如何清除:

了解这两个,就可以进行绘制(为了绘制更漂亮,选中间的)

最后效果

绘制结束,在Tilemap控件加入几个组件

Tilemap的图层要与Background分开

二、实现角色的移动

添加角色控件

第一步:在Assets中寻找角色动画(图片)

第二步将idle拖入Player属性栏中的Sprite中

(可以在Game视图中看到角色,但是它还不会动)

创建folder(文件夹)

在Main Characters中的Ninja Frog有四个动作Animator(分别是Idle-默认动作,running-跑,jumping-跳,falling-下坠)

在这里面创建Animation

将idle托到Player

会出现

然后再点击idle,点击Player则可以添加图片;

添加结束后,点击Game视图,然后点击上图”>“开始按钮,角色就能运动了

再多次创建Animator(每个Animator都需要拖拽到Player一次)

结果是这样就是对的

注意记得所有的Animator都需要LoopTime勾选

动作是搞定了但是之间的逻辑也得整理好。

逻辑就是:我有四个状态,默认为idle其数值为0,running数值为1,jumping数值为2,falling数值为3.我任意时间只能处于一个状态于是Animator中的关系图:

然后创建状态变量(int类型)state(名称)

点击箭头,

所有的Has Exit Time设置如下

同理,所有指向的状态,有对应它们的数值。

完成后逻辑关系解决,要写代码实现功能判断(对逻辑关系的判断)

现在Scripts中创建PlayerMovement脚本

双击进入Visual Studio

public class PlayerMovement : MonoBehaviour
{
    /*声明变量的属性*/
    private  Rigidbody2D rb;
    private BoxCollider2D coll;
    private SpriteRenderer sprite;
    private Animator anim;

    //声明X轴位置为浮点型
    private float dirX = 0f;

    /*声明MoveSpeed,JumpFore初始变量值为5f,SerialField会在GameObject属性栏出现,即可以修改变量值*/
    [SerializeField] private float MoveSpeed = 5f;
    [SerializeField] private float JumpFore = 5f;
    /*声明变量JumpableGround,其功能是为了限定跳跃范围*/
    [SerializeField] private LayerMask JumpableGround;

    //Movementstate枚举的作用是为了给这些状态排序并在Animator中更好使用这些状态
     private enum Movementstate { idle,running,jumping,falling};
    private void Start()
    {
        /*创建对象,获取组件功能*/
        rb = GetComponent<Rigidbody2D>();
        coll = GetComponent<BoxCollider2D>();
        sprite = GetComponent<SpriteRenderer>();
        anim = GetComponent<Animator>();

    }
    private void Update()
    {
        transform.rotation=Quaternion.Euler(0,0,0);
        dirX = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(dirX*MoveSpeed,rb.velocity.y);
        if (Input.GetButtonDown("Jump") && IsGrounded())
        {
            rb.velocity = new Vector2(rb.velocity.x, JumpFore);
        }
        UpdateMovementState();

    }
    private void UpdateMovementState()
    {
        Movementstate state;

        if (dirX > 0f)
        {
            state = Movementstate.running;
            //sprite.flipX表示图片的方向
            sprite.flipX = false;
        }
        else if (dirX < 0f)
        {
            state = Movementstate.running;
            sprite.flipX = true;
        }
        else
        {
            state = Movementstate.idle;
        }
        //判断是上升还是下降
        if (rb.velocity.y > .1f)
        { 
            state = Movementstate.jumping;
        }
        else if (rb.velocity.y < -.1f) 
        { 
            state = Movementstate.falling; 
        }
        //在Animator中可以构建state变量,以便连接visiual中的state和animator中的state
        anim.SetInteger("state",(int)state);


    }

    private bool IsGrounded()
    {
        return Physics2D.BoxCast(coll.bounds.center,coll.bounds.size, 0f, Vector2.down, .1f, JumpableGround);
    }

}

再创建Camera脚本



public class Camera : MonoBehaviour
{
  
    [SerializeField] private Transform player;
   
    void Update()
    {
        transform.position = new Vector3(player.position.x, player.position.y,transform.position.z);
    }
}

最后将PlayerMovement移到Player属性栏中

脚本中的JumpableGround中的Ground(这个Ground原本没有,需要自己创建)

与Tilemap中的Ground一致

先在Composite Colldier2D里设置Used By Effector

再不勾选Use On Way

最后处理一下player中的组件

将player控件拖入到Animator中,如果已存在如上图一致,那就不需要改变。

(还忘了一个东西,那就是Camera控件)

我们需要把Camera控件属性栏打开然后把Camera脚本拖到属性栏里面去

最后把player控件拖到脚本的player属性里面去。

运行一下,角色就能根据你的左右键移动(jump是空格)

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值