Unity之第一人称角色控制

本文详细介绍了如何在Unity中实现第一人称角色控制,包括鼠标控制摄像机视角和角色移动、碰撞检测。作者通过实例演示了如何挂载脚本和设置参数,以及结合动画和技能释放的扩展应用。
摘要由CSDN通过智能技术生成

目录

第一人称角色控制

😴1、准备工作

📺2、鼠标控制摄像机视角

🎮3、角色控制

😃4.杂谈 


第一人称角色控制

专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器,是第三人称视角的,以小编目前掌握的Unity知识来看第一人称和第三人称只不过是摄像机摆放的位置不同而已。


最开始学Unity的时候小编最想实现的就是角色控制这一功能,通过近一步学习鼠标晃动就可以实现视角的旋转,也可以通过跳跃跳到石头上去,我们一起来看。

下面我们来实现这一实例。

1、准备工作

先把我们的场景导入进来:

Low-Poly Simple Nature Pack,资源商店免费的资源。然后打开下图框中的文件就是我们要用到的场景了。 


实例我们还是用胶囊来代表玩家,新建一个胶囊Player,把摄像机移动到玩家第一人称的位置。并把摄像机放到Player下面形成一个整体:

2、鼠标控制摄像机视角

准备工作做好后进入正题,编写鼠标控制视角的脚本并挂载到摄像机上:

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

public class FPSCamera : MonoBehaviour
{
    //获取玩家位置信息
    public Transform player;
    //获取鼠标移动的值
    private float mouseX, mouseY;
    //鼠标增加灵敏度
    public float mouseSensitivity;

    private float xRotation;

    private void Update()
    {
        //获取鼠标上下、左右移动的值
        mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -70f, 70f); //限制鼠标上下旋转范围
        
        player.Rotate(Vector3.up * mouseX);
        //相机上下旋转
        transform.localRotation = Quaternion.Euler(xRotation,0,0);
    }
}

这样鼠标控制视角旋转就实现了。

3、角色控制

我们删除胶囊本身的碰撞器组件CapsuleCollider,挂载角色控制组件CharacterController,并新建实现移动的脚本挂载到Player中。

创建一个空对象GroundCheck,把它放到Player最底部位置,这里用空对象来检测与地面的碰撞。

给地面设置图层Ground

编写实现Player角色控制脚本:

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

//给玩家挂载 Character Controller 组件
public class FPSMove : MonoBehaviour
{
    private CharacterController cc;
    //移动速度
    public float moveSpeed;
    //跳跃速度
    public float jumpSpeed;
    //定义获得按键值的两个变量
    private float horizontalMove, verticalMove;
    private Vector3 dir;
     
    //手动实现重力
    public float gravity;
    private Vector3 velocity;
   
    //创建空对象放到玩家最底部用来检测碰没碰到地面,把空对象挂上来
    //检测点的中心位置
    public Transform groundCheck;  
    //检测点的半径
    public float checkRadius;
    //需要检测的图层
    public LayerMask groundLayer;
    //布尔值存储Physics.CheckSphere的返回值,判断是否与地面发生碰撞
    public bool isGround;
     
    private void Start()
    { 
        //获取玩家挂载的角色控制组件
        cc = GetComponent<CharacterController>();
    }

    private void Update()
    {
        //检测玩家是否在地面上,如果定义的球体和物体发生碰撞返回true
        isGround = Physics.CheckSphere(groundCheck.position, checkRadius, 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);
          
        //每秒减去重力的值不断下降,手动实现重力
        velocity.y -= gravity * Time.deltaTime;
        cc.Move(velocity * Time.deltaTime);
          
        //判断是否按下跳跃键
        if (Input.GetButtonDown("Jump") && isGround) 
        {
            //给玩家一个向上的速度
            velocity.y = jumpSpeed;
        }
    }
}

把空对象的值赋到groundCheck中,检测碰撞的图层换为Ground,并根据自己的喜好调整移动速度等参数值,这样我们的第一人称角色控制就实现了。

小编还复习了初中重力物理公式(doge.jpg)G=mg。其中g是重力加速度,通常g取9.8,小编这里给10

4.杂谈 

跟着飞羽老师学完基础部分感觉依然有好多知识,如果想实现某一功能的话可以进行针对性的学习。这篇第一人称角色控制就是这样,好在网上资料很多。

顺便想一下:角色控制有了;动画的使用也有所了解;像Unity之动画和角色控制-CSDN博客把它们结合到一起就可以实现移动的同时又做出相应的动作,又有好玩的了。


小编改了一下,点击鼠标释放技能播放挥手动画和技能特效,把跳跃和动画也加到实例中,《绿洲大镖客之重生我是闪电侠》v0.2(doge.jpg)


更新,今天是小年,小编祝大家小年快乐。《绿洲大镖客之重生我是闪电侠》v0.3了,小编又更改了动画机和技能释放,技能释放后会向前移动还会发生爆炸。想看教程的话评论区告诉小编(^0^)

 本篇内容就先讲到这里,拜拜┏(^0^)┛

  • 22
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中实现第一人称角色控制需要以下步骤: 1. 创建角色模型并添加动画控制器。 2. 创建一个空对象,作为角色的父级对象,并将角色模型作为子对象添加到其中。 3. 将相机添加到父级对象中,并将其位置设置在角色头部附近。 4. 编写脚本,控制角色的移动、旋转和动画播放。 5. 将脚本添加到父级对象中,并将相机作为公共变量添加到脚本中,以便在运行时进行控制。 下面是一个简单的示例脚本,来控制角色的移动和旋转: ``` public class FirstPersonController : MonoBehaviour { public Camera playerCamera; public float moveSpeed = 5f; public float lookSpeed = 2f; private float rotationX = 0f; private float rotationY = 0f; void Update() { // 移动控制 float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = transform.forward * moveVertical + transform.right * moveHorizontal; movement = movement.normalized * moveSpeed * Time.deltaTime; transform.position += movement; // 旋转控制 float lookHorizontal = Input.GetAxis("Mouse X"); float lookVertical = Input.GetAxis("Mouse Y"); rotationX += lookVertical * lookSpeed; rotationY += lookHorizontal * lookSpeed; rotationX = Mathf.Clamp(rotationX, -90f, 90f); transform.localRotation = Quaternion.Euler(rotationX, rotationY, 0f); // 相机位置控制 playerCamera.transform.position = transform.position + transform.up * 1.5f; } } ``` 使用这个脚本,你可以控制角色的移动和旋转,同时相机也会跟随角色的移动进行调整,以保持第一人称视角。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值