📅  最后修改于: 2023-12-03 15:27:06.985000             🧑  作者: Mango
玩家移动脚本是开发游戏时不可或缺的一部分,本文将介绍如何使用 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 游戏,并可以根据需要进行扩展。请记住,这仅仅是一个起点,如果需要,可以用其他功能扩展此基础功能。