Unity2d-做一个横板动作小游戏

本文介绍了如何在Unity中创建2D游戏,包括使用像素艺术创建角色动画,通过Rigidbody2D和Animator控制器管理玩家移动和动画切换,以及实现简单的碰撞检测和攻击效果。此外,还讨论了地图绘制和碰撞体设置,以及意外发现的爬墙效果作为隐藏关卡的机制。

学习视频教程 无邪:
https://space.bilibili.com/335835274/channel/detail?cid=112338
无邪 教程

在这里插入图片描述

画个自己的像素人物
后续是给这个人物添加动画
在这里插入图片描述

直接将导出的png图片拖入Unity中,创建一个2d对象
把每个导入的动作分割成单独的16*16的图片,
多选中多张图片一起拖到对象上,则可給该对象创建动画
在这里插入图片描述

打开动画窗口 即可看到当前对象的所有动画
在动画界面中创建 几个全局变量来控制动画切换
在脚本代码中 获取该对象的动画组件 并通过判断player的动作 方向 来设置几个全局变量的值,理论上这几个全局变量一旦切换 动画就会根据逻辑对应的切换

   using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class PlayerController : MonoBehaviour
{
    public float MoveSpeed;
    private Animator Myanimator;
    private Rigidbody2D Myrigidbody2D;
    // Start is called before the first frame update
    void Start()
    {
        MoveSpeed = 5;
        Myanimator = GetComponent<Animator>();
        Myrigidbody2D = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        PlayerMove();
        CheckPlayerDirectory();
    }


    void PlayerMove()
    {
        float MoveDirH = Input.GetAxis("Horizontal");
        float MoveDirV = Input.GetAxis("Vertical");
        Vector2 vector = new Vector2(MoveDirH * MoveSpeed, MoveDirV* MoveSpeed);
        Myrigidbody2D.velocity = vector;

        //if (Input.GetKey(KeyCode.W))
        //{
        //    gameObject.transform.Translate(Vector3.up * MoveSpeed * Time.deltaTime);
        //}
        //if (Input.GetKey(KeyCode.S))
        //{
        //    gameObject.transform.Translate(Vector3.down * MoveSpeed * Time.deltaTime);
        //}
        //if (Input.GetKey(KeyCode.A))
        //{
        //    gameObject.transform.Translate(Vector3.left * MoveSpeed * Time.deltaTime);
        //}
        //if (Input.GetKey(KeyCode.D))
        //{
        //    gameObject.transform.Translate(Vector3.right * MoveSpeed * Time.deltaTime);
        //}
    }
    
      void CheckPlayerDirectory()
    {

        if (Myrigidbody2D.velocity.x < 0)
        {
            Myanimator.SetBool("IsMoveLeft", true);
            Debug.Log("IsMoveLeft -> true");
        }
        else
        {
            Myanimator.SetBool("IsMoveLeft", false);
        }
        /**************************************************************/
        if (Myrigidbody2D.velocity.x > 0)
        {
            Myanimator.SetBool("IsMoveRight", true);
        }
        else
        {
            Myanimator.SetBool("IsMoveRight", false);
        }
        /**************************************************************/
        if (Myrigidbody2D.velocity.y > 0)
        {
            Myanimator.SetBool("IsMoveUp", true);
        }
        else
        {
            Myanimator.SetBool("IsMoveUp", false);
        }
        /**************************************************************/

        if (Myrigidbody2D.velocity.y < 0)
        {
            Myanimator.SetBool("IsMoveDown", true);
        }
        else
        {
            Myanimator.SetBool("IsMoveDown", false);
        }
        /**************************************************************/
        if (Mathf.Abs( Myrigidbody2D.velocity.y ) < Mathf.Epsilon && Mathf.Abs(Myrigidbody2D.velocity.x) < Mathf.Epsilon)
        {
            Myanimator.SetBool("IsMoveDown", true);
        }
    }

向左走和向右走 可以共享同一个动画
具体做法是判断 角色的运动方向 并在脚本里面选择是否反转角色
代码如下

transform.localRotation = Quaternion.Euler(0,180,0);

最终还是决定做个横板跳跃游戏
人物绘制如下
在这里插入图片描述

一个会跳跃的小至尊宝,名字叫做Hx
在这里插入图片描述

做一个简易场景,给Hx的脚部添加Box Collider 2d组件 使得其能站在地面上
给Hx的身体部分添加Capsule Collider 2d 使其能和其他物体产生碰撞

添加脚本控制人物移动 和 判断人物当前运动状态 切换不同的动画
代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HxControl : MonoBehaviour
{
   
   
    public float MoveSpeed;
    public bool IsAdministrator;

    private Rigidbody2D myrigibody;
    private Animator myAnimator;



    // Start is called before the first frame update
    void Start()
    {
   
   
        MoveSpeed = 5;
        myrigibody = GetComponent<Rigidbody2D>();
        myAnimator = GetComponent<Animator>();

        //IsAdministrator = false;

    }

    // Update is called once pe
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄晓魚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值