接下来就是写代码的时候
我们创建一个文件夹用来存我们的脚本,名字就叫Scripts,在里面右键->Create->C#Script,这样就创建好了一个脚本
直接将这个脚本拖给我们Hierarchy视图里的player,我们选择player就可以发现我们脚本文件已经挂载上去了
然后我们打开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啥的
GroundCheck就是之前用来判断角色是否在地面的东东,直接拖过去就行