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

相关推荐
★YUI★4 小时前
学习游戏制作记录(制作系统与物品掉落系统)8.16
学习·游戏·ui·unity·c#
audyxiao0015 小时前
为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
人工智能·计算机视觉·3d·iccv·空间智能
范男8 小时前
基于Pytochvideo训练自己的的视频分类模型
人工智能·pytorch·python·深度学习·计算机视觉·3d·视频
点云SLAM11 小时前
SLAM文献之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping
3d·机器人·slam·vgicp算法·gpu 加速·lidar-imu 建图方法·全局匹配代价最小化
SmalBox12 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
unity·渲染
LetsonH14 小时前
⭐CVPR2025 给3D高斯穿 “UV 衣” 框架[特殊字符]
3d·uv
三只坚果1 天前
blender制作动画导入unity两种方式
unity·游戏引擎·blender
新启航-光学3D测量1 天前
从 48 小时到 4 小时:三维逆向工程中自动化工具链如何重构扫描建模效率
科技·3d·制造
benben0441 天前
《Unity Shader入门精要》学习笔记二
unity·unity shader
YF云飞1 天前
Unity音频管理:打造沉浸式游戏音效
游戏·unity·游戏引擎·游戏程序·个人开发