为了进行地面监测,需要将障碍物的标签修改。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControll : MonoBehaviour
{
public float moveX = 5f;
public float moveSpeed = 5f;
public float rotateSpeed = 5f;
public float jumpSpeed = 5f;
public float teleportSpeed = 2f;
public float faceDirction;
// 判断是否在地面上
public bool isGround = true;
public int jumpCount;
Rigidbody2D rigidbody2D;
public bool isDoubleJump = true;
// 物体是否在一段跳
private bool isJump = true;
void Start()
{
rigidbody2D = GetComponent<Rigidbody2D>();
}
void Update()
{
Jump();
}
private void FixedUpdate()
{
Move();
}
public void Jump()
{
if (Input.GetButtonDown("Jump"))
{
//如果物体在地面上
if (isGround)
{
jumpCount = 4;
//瞬移效果
//transform.Translate(Vector3.right * teleportSpeed);
// 实现跳跃效果
rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, jumpSpeed);
// 物体正在一段跳
isJump = true;
// 物体不在地面上
isGround = false;
}
// 如果物体能进行二段跳&&物体不在地面上&&物体在跳跃
else if (jumpCount != 0 && !isGround && isJump)
{
// 再进行一次跳跃操作
rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, jumpSpeed);
rigidbody2D.AddForce(Vector2.up*jumpSpeed);
jumpCount--;
}
}
}
public void Move()
{
//用GetAxis可以实现惯性移动
moveX = Input.GetAxis("Horizontal");
//判断面向的方向
faceDirction = Input.GetAxisRaw("Horizontal");
//修改人物的朝向
if (faceDirction != 0)
{
transform.localScale = new Vector3(faceDirction, 1, 1);
}
//此处是实现人物的运动
if (moveX != 0)
{
rigidbody2D.velocity = new Vector2(moveX * moveSpeed, rigidbody2D.velocity.y);
}
}
// 碰撞检测
private void OnCollisionEnter2D(Collision2D collision)
{
// 物体碰触到地面
if (collision.gameObject.tag == "Platform")
{
// 物体在地面上
isGround = true;
isJump = false;
}
}
}