勇士传说--

该文介绍了Unity中2D游戏开发的过程,包括素材的压缩与切割,使用平铺调色板制作背景,图层管理,RuleTiles的创建以及新Input系统的配置和使用。同时,详细讲解了角色移动、碰撞检测、跳跃、动画控制和伤害系统的实现。
摘要由CSDN通过智能技术生成

1. 将准备好的素材--变成16像素点-- >Fliter Mode--Point -- >Compression(压缩)--None

2.将素材切割-- Sprite Editor--切割--可以按照像素点切割地图--切割人物可以数格数

3.制作背景-->窗口-->2D-->平铺调色板(Palette)-->拖到检查器上-->将准备好的地图放入平铺调色板(注意:新建文件夹)--在层级中创建2D--矩形

4.图层之间--后图层会遮挡前面的图层

5.制作一个Rule Tiles--2D瓦片-Rule --然后选中刚刚切割的地图--然后定义图片出现的规则

 

二:

1.假如想用新的Input系统--> 进ProjectSeting-->Player-->API兼容级别(.NetFrameWork)-->输入系统(新) -->在包管理器中安装Input System-->在Setting中创建文件夹-->InputAction

创建组件PlayerInput让他生成代码--在自己代码里面调用

using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
    public PlayerInputControl inputControl;
    public Vector2 inputDirection;

    private void Awake()
    {
        inputControl = new PlayerInputControl();
    }
    private void OnEnable()
    {
        inputControl.Enable();
    }
    private void OnDisable()
    {
        inputControl.Disable();
    }

    private void Update()
    {
        inputDirection = inputControl.Gameplay.Move.ReadValue<Vector2>();
    }
}

行动+ 翻身

   private void FixedUpdate()
    {
        //固定时钟执行
        Move();

    }
    public void Move()
    {
        m_rigidbody.velocity = new Vector2(inputDirection.x * speed * Time.deltaTime, m_rigidbody.velocity.y);
        //强制转换 
        int faceDir = (int)transform.localScale.x;
        //人物翻转
        if (inputDirection.x > 0)
            faceDir = 1;
        if (inputDirection.x < 0)
            faceDir = -1;
        m_transform.localScale = new Vector3(faceDir, 1, 1);
    }
}

检测地面--把地面新弄为一个Grond层--然后public一个layerMask

public bool isGround;
    public float checkRaduis;
    public LayerMask groundLayer;

    void Update()
    {
        Check();
    }
    public void Check()
    {
        //检测地面
        isGround  = Physics2D.OverlapCircle(transform.position, checkRaduis, groundLayer);
    }

重点:两代码之间互相访问

public Physicscheck physicscheck;
physicscheck = GetComponent<Physicscheck>();

人物跳跃

 private void Jump(InputAction.CallbackContext obj)
    {
        //碰地才能跳跃
        if(physicscheck.isGround)
        m_rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);//瞬时的力
    }

给角色光滑物理材质--物理材质Friction--0

创建基本动画-- 创建Animator --然后再创建Animation --用代码控制转换条件

  public void SetAnimation()
    {
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        anim.SetFloat("velocityY", rb.velocity.y);
        anim.SetBool("isGround", physicscheck.isGround);
        anim.SetBool("isCrouch", playerController.isCrouch);
    }

角色攻击

public class Character : MonoBehaviour
{
    [Header("基本属性")]
    public float maxHealth;
    public float currentHealth;


    [Header("受伤无敌")]
    public float invulnerableDurnation;
    public float invulnerableCounter;
    public bool invulnerable;

    private void Start()
    {
        
        currentHealth = maxHealth;
    }
    private void Update()
    {
        if (invulnerable)
        {
            //计时器
            invulnerableCounter -= Time.deltaTime;
            if(invulnerableCounter<= 0)
            {
                invulnerable = false;
            }
        }
    }
    public void TakeDanage(Attack attacker)
    {
        //如果无敌就不执行了
        if (invulnerable)
            return;
        //Debug.Log(attacker.damage);
        if (currentHealth - attacker.damage > 0)
        {
            currentHealth -= attacker.damage;
            TriggerInvlneralbe();
        }
        else
        {
            currentHealth = 0;
        }
        //受伤之后--无敌
        TriggerInvlneralbe();
    }

    private void TriggerInvlneralbe()
    {
        if (!invulnerable)
        {
            invulnerable = true;
            invulnerableCounter = invulnerableDurnation;
        }
    }
}

配套

public class Attack : MonoBehaviour
{
    public int damage;

    public float attakrange;

    public float attackrate;

    private void OnTriggerStay2D(Collider2D other)
    {
        other.GetComponent<Character>()?.TakeDanage(this);
    }
}

抽象类的下面只写方法的声明--但是不写具体实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值