Unity 第一人称视角 角色控制脚本

这篇具有很好参考价值的文章主要介绍了Unity 第一人称视角 角色控制脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用方法

WSAD 控制四个方向的移动

鼠标 控制角色的水平、竖直朝向

空格 控制角色跳跃

配置

需要指定玩家的第一人称摄像头

Unity 第一人称视角 角色控制脚本  

效果

Unity 第一人称视角 角色控制脚本

代码

using UnityEngine;

public class PlayerControl : MonoBehaviour
{
    //摄像机
    public GameObject playerView;

    //速度:每秒移动5个单位长度
    public float moveSpeed = 6;
    //角速度:每秒旋转135度
    public float angularSpeed = 135;
    //跳跃参数
    public float jumpForce = 200f;

    //水平视角灵敏度
    public float horizontalRotateSensitivity = 10;
    //垂直视角灵敏度
    public float verticalRotateSensitivity = 5;

    //最大俯角
    public float maxDepressionAngle = 90;

    //最大仰角
    public float maxElevationAngle = 25;

    //角色的刚体
    private Rigidbody rigidbody;

    void Start()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        Move();
        View();
        Jump();
    }
 
    void Move()
    {
        //通过键盘获取竖直、水平轴的值,范围在-1到1
        float v = Input.GetAxis("Vertical");
        float h = Input.GetAxis("Horizontal");

        //按照矢量移动一段距离
        transform.Translate(Vector3.forward * v * Time.deltaTime * moveSpeed);
        transform.Translate(Vector3.right * h * Time.deltaTime * moveSpeed);
    }

    void View()
    {
        //锁定鼠标到屏幕中心
        SetCursorToCentre();

        //当前垂直角度
        double VerticalAngle = playerView.transform.eulerAngles.x;

        //通过鼠标获取竖直、水平轴的值,范围在-1到1
        float h = Input.GetAxis("Mouse X");
        float v = Input.GetAxis("Mouse Y") * -1;

        //角色水平旋转
        transform.Rotate(Vector3.up * h * Time.deltaTime * angularSpeed* horizontalRotateSensitivity);

        //计算本次旋转后,竖直方向上的欧拉角
        double targetAngle = VerticalAngle + v * Time.deltaTime * angularSpeed * verticalRotateSensitivity;

        //竖直方向视角限制
        if (targetAngle > maxDepressionAngle && targetAngle < 360 - maxElevationAngle) return;

        //摄像机竖直方向上旋转
        playerView.transform.Rotate(Vector3.right * v * Time.deltaTime * angularSpeed * verticalRotateSensitivity);
    }

    void SetCursorToCentre()
    {
        //锁定鼠标后再解锁,鼠标将自动回到屏幕中心
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.lockState = CursorLockMode.None;
        //隐藏鼠标
        Cursor.visible = false;
    }

    void Jump()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            rigidbody.AddForce(Vector3.up * jumpForce);
        }
    }
}

解析

Move函数

控制角色前后左右移动,改变的是位置,并不会改变角色朝向

View函数

控制角色左右旋转,朝上或朝下看

注意:在水平方向移动鼠标,将改变角色(包括摄像头)的朝向,在竖直方向上移动鼠标,只改变摄像头的朝向,并不改变角色朝向

SetCursorToCentre函数

将鼠标设定在屏幕中心并隐藏

Jump函数

控制角色跳跃

相关函数的用法

获取WSAD输入

float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");

(取值范围在-1~1之间)

获取鼠标输入

float h = Input.GetAxis("Mouse X");
float v = Input.GetAxis("Mouse Y") * -1;

(取值范围在-1~1之间)

获取空格键

Input.GetKeyDown(KeyCode.Space)

给刚体在某一个方向上施加力

rigidbody.AddForce(Vector3.up * jumpForce);

按照矢量移动一段距离

transform.Translate(Vector3 位移)

物体前方

Vector3.forward 也可以写作 Vector3(0, 0, 1)

物体左边

Vector3.right 也可以写作 Vector3(1, 0, 0)

旋转

gameObject.transform.Rotate(Vector3 欧拉角)

鼠标的锁定状态

Cursor.lockState 可以设定为 CursorLockMode.Locked 或 CursorLockMode.None

鼠标的显示

Cursor.visible 可以设定为 true 或 false文章来源地址https://www.toymoban.com/news/detail-418702.html

到了这里,关于Unity 第一人称视角 角色控制脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity使用NaveMesh实现第一人称视角移动

    Navemesh寻路系列文章 文章目录 目录 系列文章目录 文章目录 前言 一、NavMeshPath是什么? 二、使用步骤 1.引入库 2.读入数据 总结 navemesh已经大量使用到游戏中,但大部分寻路都是使用SetDestination函数,给予一个目标点移动,第一人称直接操控移动的文章很少。 为了解决这个问

    2024年02月03日
    浏览(36)
  • Unity之OpenXR+XR Interaction Toolkit实现 VR控制第一人称角色模型动画

    我们在开发VR项目时,有时会有第一人称视角的需求,即我们自己带上VR头显,能够看到自己的身体,如果模拟一些人物触电死亡,使用工具动画之类的需求,那么VR控制第一人称视角就比较实用了。 我们今天就来介绍一下如何实现VR设备控制第一人称: 1.角色手部跟随手柄移

    2024年02月09日
    浏览(38)
  • 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    一、前言 嗨,大家好,我是新发。 有同学私信我,问我能不能写一篇Unity手游第一人称视角控制的教程, 那么,今天就来做个 Demo 吧~ 注: Demo 工程源码见文章末尾 最终效果如下: 二、实现方案 1、无主之地,第一人称视角 第一人称视角的游戏大家应该不陌生,比如《无主

    2023年04月08日
    浏览(48)
  • unity中使用Character Controller控制角色时,不受刚体重力的效果的解决方法。

    1:我们在使用unity控制角色时一般都会使用Character Controller组件,但是使用Character Controller之后,角色就不受刚体重力的影响了,那么这个问题应该怎么解决呢?   2:要解决这个问题,我们要先了解重力的效果是什么,重力就是每帧都会给玩家一个向下的力。那么我们可以通

    2024年02月16日
    浏览(51)
  • Unity SKFramework框架(十七)、FreeCameraController 上帝视角/自由视角相机控制脚本

    目录 一、简介 二、功能 1.键盘控制平移 2.鼠标控制平移 3.视角拉近拉远 4.绕视角中心旋转 5.视角聚焦 6.活动区域限制 7.闲置时绕视角中心旋转 三、核心变量  FreeCameraController是用于上帝视角、自由视角的相机控制脚本,同时支持Input System Package(New)和Input Manager(Old)新、旧两种

    2023年04月08日
    浏览(39)
  • 【Unity】第一人称视角开发

    我的需求是在Unity构建一个第一人称视角,实现移动跳跃功能。 主要参考的是这篇博文提供的方案,不过该方案为了只允许一次跳跃,单独在人物底部构建了一个空对象,我无需此限制,因此对其进行了简化。 创建场景对象如下: Ground 地形对象 Player 胶囊体视作人物 Cube 参

    2023年04月21日
    浏览(37)
  • Unity 3D 实现第一人称视角

    第一人称视角的运用十分广泛,常见于我的世界、APEX、守望先锋以及许多FPS(First-Person Shooting第一人称射击)等游戏。 那么,这类第一人称视角是如何实现的呢? 其实并不复杂, 一个人物模型 , 一个摄像机 , 一个脚本 ,便可轻松实现。 在 Hierarchy 栏目右击随机创建一个

    2024年02月11日
    浏览(37)
  • Unity角色或摄像机移动和旋转的控制脚本

    该脚本挂载到需要被移动、旋转控制的物体身上,也可以之间挂在到摄像机上! 挂载到摄像机上可以实现第一人称视角控制! 挂载到物体身上,配合摄像机跟踪脚本可以实现,第三人称视角控制!  将角色控制脚本挂给摄像机即可! 以下是角色控制脚本: 将上面, 角色控

    2024年02月06日
    浏览(47)
  • Unity3D中实现人物的第一人称视角

    打开unity创建一个场景地图可以添加一个Plane作为地面 在Hierarchy视图中右键创建一个胶囊体(Capsule)作为Player,添加好后重置胶囊体的位置,并且调整胶囊体在一个合适的位置。 将Main Camera拖拽到到player内作为子对象,重置一下Main Camera的transform,并且再调整一下它在player中

    2024年02月11日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包