📜  玩家移动脚本 unity - C# (1)

📅  最后修改于: 2023-12-03 15:27:06.985000             🧑  作者: Mango

玩家移动脚本 Unity - C#

玩家移动脚本是开发游戏时不可或缺的一部分,本文将介绍如何使用 Unity 的 C# 来编写一个基本的玩家移动脚本。

创建脚本

首先打开 Unity 编辑器并创建一个空项目。在 Assets 文件夹中创建一个新的 C# 脚本并将其命名为 PlayerMovement.cs。右键单击该文件并选择使用你喜欢的编辑器打开。

定义变量

在脚本文件中,我们需要定义一些变量以保存玩家的状态和设置。我们需要两个公共的浮点型变量(public float):speed 和 jumpSpeed。速度 (speed) 确定玩家移动的速度,而 jumpSpeed 表示玩家跳跃时候的速度。

public float speed = 10f;
public float jumpSpeed = 10f;

除此之外,我们还需要一个私有的布尔型变量(private bool)isGrounded,用于检测玩家是否在地面上,并根据此来允许或禁止玩家跳跃。

private bool isGrounded = true;
获取输入

在我们可以移动和跳跃之前,我们需要获取玩家的输入。我们需要针对水平和垂直轴的输入值,用于左右和前后移动。

float xMove = Input.GetAxis("Horizontal");
float zMove = Input.GetAxis("Vertical");

我们还需要获取跳跃输入。这里使用 GetButtonDown 方法来检测跳跃按键是否按下(默认情况下是空格键):

if (Input.GetButtonDown("Jump") && isGrounded)
{
    // 调用 Jump 方法
    Jump();
}
玩家移动

接下来,我们需要实现一个 PlayerMove 方法来控制玩家的移动。在该方法中使用两个 Vector3 变量来保存玩家移动的方向和速度。然后通过使用 Translate 方法来移动玩家。

void PlayerMove(float x, float z)
{
    Vector3 movementDirection = new Vector3(x, 0f, z);
    Vector3 movementVelocity = movementDirection.normalized * speed;

    transform.Translate(movementVelocity * Time.deltaTime, Space.Self);
}
玩家跳跃

跳跃功能是比较简单的。在脚本文件中定义一个 Jump 方法来控制玩家跳跃。实现方法也是使用了 Translate 方法来调整玩家高度。

void Jump()
{
    isGrounded = false;

    transform.Translate(Vector3.up * jumpSpeed * Time.deltaTime, Space.World);

    // 在落地时将 isGrounded 设为 true
    Invoke("Land", 0.5f);
}

在 Jump 方法内调用 Land 方法,将 isGrounded 变量重置为 true。

void Land()
{
    isGrounded = true;
}
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 10f;
    public float jumpSpeed = 10f;

    private bool isGrounded = true;

    void Update()
    {
        float xMove = Input.GetAxis("Horizontal");
        float zMove = Input.GetAxis("Vertical");

        PlayerMove(xMove, zMove);

        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            Jump();
        }
    }

    void PlayerMove(float x, float z)
    {
        Vector3 movementDirection = new Vector3(x, 0f, z);
        Vector3 movementVelocity = movementDirection.normalized * speed;

        transform.Translate(movementVelocity * Time.deltaTime, Space.Self);
    }

    void Jump()
    {
        isGrounded = false;

        transform.Translate(Vector3.up * jumpSpeed * Time.deltaTime, Space.World);

        Invoke("Land", 0.5f);
    }

    void Land()
    {
        isGrounded = true;
    }
}
结论

使用本文提供的代码,可在 Unity 中创建一个简单的玩家移动脚本。本脚本可以用于创建 2D 或 3D 游戏,并可以根据需要进行扩展。请记住,这仅仅是一个起点,如果需要,可以用其他功能扩展此基础功能。