unity2D横版游戏教程-2 代码实现

接下来就是写代码的时候

我们创建一个文件夹用来存我们的脚本,名字就叫Scripts,在里面右键->Create->C#Script,这样就创建好了一个脚本

ea7075e2063a49b0a1e678906b41f38f.png

 直接将这个脚本拖给我们Hierarchy视图里的player,我们选择player就可以发现我们脚本文件已经挂载上去了

69e864b7177c4863bd1d7ed9477d3d37.png

 然后我们打开playercontroller脚本编辑我们的代码

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

public class playercontroller : MonoBehaviour
{
    private Rigidbody2D rb;//获得Rigidbody2D组件
    private Collider2D coll;//获得Collider2D组件
    private Animator anim;//获得动画组件
    public float speed, jumpForce;//公开,设置速度和跳跃力
    public LayerMask ground;//获得地面图层
    public Transform groundCheck;//检测角色是否碰到地面
    private bool isJump,isGround;//判断是否按下空格键,判断是否在地面
    private int jumpCount;//用来设置角色是几段跳
    //初始化
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        coll = GetComponent<Collider2D>();
        anim = GetComponent<Animator>();
    }
    void Update()
    {
        //如果按下空格键并且在地面上
        if (Input.GetKeyDown(KeyCode.Space))
        {
            isJump = true;
            Jump();
        }
    }
    private void FixedUpdate()
    {
        isGround = Physics2D.OverlapCircle(groundCheck.position, 0.01f, ground);
        Movement();
        SwitchAnim();
    }
    //基础移动
    void Movement()
    {
        float horizontal = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(horizontal * speed, rb.velocity.y);//设置x轴的移动
        //设置角色的转向问题
        if (horizontal != 0)
        {
            transform.localScale = new Vector3(horizontal, 1, 1);
            anim.SetBool("run", true);
        }
        else
            anim.SetBool("run", false);
    }
    //跳跃
    void Jump()
    {
        //如果在地面设置二段跳
        if(isGround)
        {
            jumpCount = 2;
        }
        //按下跳跃键且在地面上
        if (isJump&&isGround)
        { 
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            jumpCount--;
            isJump = false;
        }
        //按下跳跃键且不在地面上且jumpCount大于0
        else if(isJump&&!isGround&&jumpCount>0)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            jumpCount--;
            isJump = false;
        }
    }
    //切换动画
    void SwitchAnim()
    {
        //如果在下落状态
        if (rb.velocity.y < 0 && !isGround)
        {
            anim.SetBool("fall", true);
            anim.SetBool("jump", false);
        }
        //如果在跳跃状态
        if(!isGround&&rb.velocity.y>0)
        {
            anim.SetBool("jump", true);
        }
        //如果在地面上
        else if (coll.IsTouchingLayers(ground))
        {
            anim.SetBool("fall", false);
        }
    }
}

简单讲解一下代码,首先我们要获得角色身上的Rigidbody2D组件,Collider2D组件还有Animator组件的引用。

start函数会在游戏运行时执行,一般这里是用来初始化变量的。

至于跳跃可以看这一篇博文unity2D横版游戏跳跃实时响应_真的没事鸭的博客-CSDN博客

然后是最基础的移动功能,GetAxisRaw可以获得我们按键的输入,比如我们按下a键时值是-1,按下d键时值是1,所以用这个值乘以我们的speed就可以设置角色x轴方向的速度了,然后还需要设置一下角色面向的方向,也可以根据GetAxisRaw获得值来设置,如果值不为0的话说明角色在移动,所以设置一下动画里面的run变量,跳跃动画就不细讲了。

然后就是动画间的条件的设置, 比如当角色y轴方向的力大小小于0并且不在地面上,说明此时处于下落状态,设置动画里面的fall变量为true,jump为false;如果不在地面上并且y轴方向力的大小大于0,说明此时处于跳跃状态,设置jump为true;如果在地面上,设置fall为false。这样代码基本就写好了

需要几段跳可以修改jumpCount的值就可以了,回到unity,记得点击player把右边的C#代码公开的变量设置一下,speed,jumpforce,Ground,GroundCheck啥的

fff61004a1184501a768f512abfa86b1.png

 GroundCheck就是之前用来判断角色是否在地面的东东,直接拖过去就行

320060e3fd7d41d2ab37f536555cf30b.png

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

真的没事鸭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值