Unity分享一个简单的3D角色漫游脚本

1.新建一个场景,并创建一脚本

2.给场景中的地面添加一个Ground标签

3.给刚刚新建的脚本编写代码

cs 复制代码
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f; // 移动速度
    public float jumpForce = 5f; // 跳跃力量
    public float mouseSensitivity = 100f; // 鼠标灵敏度

    public Transform playerBody;
    public Camera playerCamera;

    private Rigidbody rb;
    private bool isJumping = false;
    private float xRotation = 0f;

    private void Start()
    {
        rb = GetComponent<Rigidbody>();

        // 锁定鼠标
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }
    private void Update()
    {
        // 获取键盘输入
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        // 计算移动方向
        Vector3 movementDirection = new Vector3(horizontalInput, 0f, verticalInput).normalized;

        // 根据输入移动角色
        transform.Translate(movementDirection * moveSpeed * Time.deltaTime);

        // 处理跳跃
        if (Input.GetButtonDown("Jump") && !isJumping)
        {
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
            isJumping = true;
        }

        // 处理视野旋转
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        playerCamera.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * mouseX);
    }

    private void OnCollisionEnter(Collision collision)
    {
        // 当角色碰撞到地面时
        if (collision.gameObject.CompareTag("Ground"))
        {
            isJumping = false;
        }
    }
}

4.将脚本添加到玩家身上

5.给玩家添加刚体组件,并将玩家拖到player body这里

6.将摄像机拖到玩家的子对象中并重置摄像机的位置,并调整摄像机的位置

7.将摄像机拖到脚本中

8.运行游戏就可以实现漫游了

9.优化(如果运行时发现屏幕有点抖或者玩家容易翻身,就把玩家的旋转全部冻结就没问题了)

相关推荐
摇曳的树3 小时前
【3D目标检测】激光雷达和相机联合标定(二)——MATLAB联合标定工具使用
数码相机·目标检测·3d
知来者逆3 小时前
V3D——从单一图像生成 3D 物体
人工智能·计算机视觉·3d·图像生成
唐·柯里昂79814 小时前
[3D打印]拓竹切片软件Bambu Studio使用
经验分享·笔记·3d
Artistation Game16 小时前
九、怪物行为逻辑
游戏·unity·游戏引擎
百里香酚兰16 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
妙为16 小时前
unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发
游戏·游戏引擎·虚幻·碰撞预设
摇曳的树18 小时前
【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包
数码相机·目标检测·3d
dangoxiba19 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
摩尔线程1 天前
使用MTVerseXR SDK实现VR串流
3d·xr·图形渲染·vr·摩尔线程
先生沉默先2 天前
使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志
学习·unity·贴图