unity实现第一人称漫游(保姆级教程)

这篇具有很好参考价值的文章主要介绍了unity实现第一人称漫游(保姆级教程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        这篇文章是讲解的是如何使用已经写好的代码通过unity实现第一人称漫游的功能,就是说你可以直接把下面的代码拿去用就好,如果你想深入学习,你可以参考代码中的比较详细的注释和查阅相关的文档。

可以先看完成效果

漫游

步骤

1.创建 CameraController 和 PlayerController 两个C# Script

        * CameraController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour
{
    //我们通过控制Player的旋转方法,来控制相机视角的左右移动,所以我们需要一个Player的Tranform
    public Transform player;


    //定义两个float变量,来获取鼠标移动的值
    private float mouseX, mouseY;
    //我们可以给鼠标增加一个灵敏度
    public float mouseSensitivity;

    //mouseY中的GetAxis方法会返回-1到1之间的浮点数,在鼠标移动的时候,数值会随着方向的变化而变化,在鼠标不动时,数值会回弹到0,所以我们就会遇到鼠标上下移动时回弹的问题
    public float xRotation;

    private void Update()
    {
        //在Update方法中,我们使用输入系统中的GetAxis方法来获取鼠标移动的值,乘以鼠标灵敏度再乘以Time.deltatime,鼠标移动的值就这样得到了
        //Input.GetAxis:它会在鼠标移动相应对应轴的过程中返回 -1 到 1 的值
        mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        xRotation -= mouseY;

        //使用数学函数Clamp限制
        xRotation = Mathf.Clamp(xRotation,-70f,70f);

        //这里使用Transform的Rotate()方法来旋转player
        //Vector3.up是向上的一个三维变量,和一个0,1,0的三维变量是一样的
        //我们需要控制player的y轴旋转才能让它左右旋转
        player.Rotate(Vector3.up * mouseX);
        //接下来我们要选转相机了,我们使用tranform.localRotation方法,让相机上下旋转,使用localRotation就可以不被父对象旋转影响,造成一些奇怪的问题
        //因为localRotation是属性,我们还要给他赋值
        transform.localRotation = Quaternion.Euler(xRotation, 0, 0);
    }
}

        *PlayerController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    //获得player的CharacterController组件
    private CharacterController cc;

    public float moveSpeed;//移动速度

    public float jumpSpeed;//跳跃速度

    //定义获得按键值的两个变量
    private float horizontalMove, verticalMove;

    //定义三维变量dir控制方向
    private Vector3 dir;

    //重力
    public float gravity;

    private Vector3 velocity;//用来控制Y轴速度

    //我们只需要检测player是否在地上就可以了,这里我们可以使用Physics中的CheckSphere方法,如果定义的球体和物体发生碰撞,返回真
    //为了使用这个方法,我们需要定义几个变量
    public Transform groundCheck;//检测点的中心位置
    public float checkRedius;//检测点的半径
    public LayerMask groundLayer;//需要检测的图层
    //布尔值来存储CheckSphere的返回值
    public bool isGround;


    private void Start()
    {
        //获取player的CharacterController组件
        cc = GetComponent<CharacterController>();

    }
    private void Update()
    {
        isGround = Physics.CheckSphere(groundCheck.position,checkRedius,groundLayer);
        if(isGround && velocity.y < 0)
        {
            velocity.y = -2f;
        }


        horizontalMove = Input.GetAxis("Horizontal") * moveSpeed;
        verticalMove = Input.GetAxis("Vertical") * moveSpeed;

        dir = transform.forward * verticalMove + transform.right * horizontalMove;
        cc.Move(dir * Time.deltaTime);

        //我们需要获取到跳跃按键的事件,使用Input中的GetButtonDown()方法,他会返回一个布尔值,当按下时才会返回真
        //Jump可以在InputManager中查看
        //在一瞬间有一个向上的速度,在过程中也会随着重力慢慢下降,如果想要让它只跳跃一次的话,加上isGround就行了
        if(Input.GetButtonDown("Jump") && isGround)
        {
            velocity.y = jumpSpeed;
        }


        velocity.y -= gravity * Time.deltaTime;//这样每秒它就会减去重力的值不断下降
        //再用CharacterController的Move方法来移动y轴
        cc.Move(velocity * Time.deltaTime);
    }
}

2.创建一个Environment空物体,将与环境相关的资源到Environment下,点击Environment,将Layer改为我们自己创建的Ground层

unity漫游,untiy,unity,游戏

        因为我已经提前创建好了Ground层,你们需要点击Add Layer,在最下面创建Ground层就可以了

unity漫游,untiy,unity,游戏

 3.新建一个Capsule,命名为Player

unity漫游,untiy,unity,游戏

 4.将主相机移动到刚刚创建的Player下,将主相机的位置移动到Player的上半部分

unity漫游,untiy,unity,游戏

 5.给主相机挂上CameraController脚本,设置参数:

        *Player:就是刚刚创建的Player

        *Mouse Sensitivity:200

        *xRotation:0

unity漫游,untiy,unity,游戏

 6.创建空物体 GroundCheck,将其放到 Player下,将位置移动到Player的底部

unity漫游,untiy,unity,游戏

 7.将Player的 Capsule Colider 移除掉,添加 Character Controller 组件

unity漫游,untiy,unity,游戏

 8.将 PlayerController 脚本挂到 Player 上,设置参数:

        *Move Speed:4

        *Jump Speed:5

        *Gravity:9.81

        *Ground Check:就是我们刚创建的Ground Check

        *Check Redius:0.4

        *Ground Layer:我们提前创建好的 Ground 层

unity漫游,untiy,unity,游戏

 结语

        希望这篇文章可以帮助到你,我这边的素材是从 unity 中的 Asset Store 上下载的,如果你需要这个素材的话可以去搜索 Low-Poly Simply Nature Pack,有什么问题可以在评论区留言,感谢大家的支持!

 文章来源地址https://www.toymoban.com/news/detail-776865.html

 

到了这里,关于unity实现第一人称漫游(保姆级教程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇4(附项目源码,完结)

    免责声明:因为文章附带 源码 ,所以我上锁了,整理不易,但是推荐大家自己手动跟敲代码理解更加深入

    2024年02月04日
    浏览(49)
  • 【经典游戏】坦克大战 Unity2D项目实战(保姆级教程)

    主要内容: 1.Unity3D引擎中的基础设置。 2.2D场景的搭建,预制体制作。 3.2D动画的制作。 4.图片图集的有关知识。 5.碰撞器,触发器,碰撞检测与触发检测。 6.2D游戏渲染的一些知识。 7.敌人AI的编写。 8.UGUI有关内容,场景切换等。 所需资源包链接:https://pan.baidu.com/s/199wuwM

    2024年02月06日
    浏览(61)
  • Unity项目转微信小游戏 微信小程序保姆教程,繁杂问题解决,及微信小游戏平台简单性能测试

    借着某人需求,做了一波简单的技术调研:将Unity项目转换为微信小游戏。 本文主要内容:Unity转换小游戏的步骤,遇到问题的解决方法,以及简单的性能测试对比 微信小游戏的限制 微信小游戏对程序包体大小有严格限制:首包必须小于2M,首包加分包(后加载)不得大于

    2024年02月05日
    浏览(59)
  • Unity 3D 实现第一人称视角

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

    2024年02月11日
    浏览(36)
  • Unity实现第一人称移动(胎教级教学)

    第一步 需要一个场景和一个player作为操作角色,并且 在player子目录创建一个camera 作为视角 这里演示我就随便 创建一个plane 作为 地面 和 一个sphere 作为 player 然后调整好player的位置不要与地面镶嵌就像这样 然后需要给地面(你们自己的场景)和player添加一个Collider组件 在属性

    2024年04月13日
    浏览(31)
  • 【Unity】第一人称实现键盘移动WASD

    背景:开发影院场景 环境:Unity2021.3 功能:WASD键实现移动、鼠标左右平滑实现转向 代码:挂载在相机的父物体上(好像是因为相机本身不支持移动?如有误望指正)

    2024年02月12日
    浏览(34)
  • Unity使用NaveMesh实现第一人称视角移动

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

    2024年02月03日
    浏览(35)
  • Unity教程2:保姆级教程.几行代码实现输入控制2D人物的移动

    目录 人物的创建以及刚体的设置 图层渲染层级设置 角色碰撞箱设置 使用代码控制人物移动 创建脚本文件  初始函数解释 控制移动代码 初始化变量  获得键盘输入  调用函数 手册链接在这:Unity User Manual (2019.3) - Unity 手册 没有控制人物移动的2D游戏就太说不过去了!那么接

    2024年02月06日
    浏览(40)
  • Unity3D实现第一人称移动,随鼠标转动视角+上楼梯(C#)

    第一人称移动: 1、在层级面板创建一个Capsule,命名为Player,将层级面板中的相机拖到Player下方 2、重置Player和摄像机的Transform数值(方便调整摄像机在Player上的位置),然后调整摄像机在Player上的位置 大概将摄像机放到Player眼睛的位置即可。 3、创建一个脚本,命名为Came

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

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

    2024年02月09日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包