当前位置: 代码网 > it编程>数据库>Mysql > Unity之第一人称角色控制

Unity之第一人称角色控制

2024年08月02日 Mysql 我要评论
专栏的这一篇也有讲到角色控制器,是第三人称视角的,以小编目前掌握的Unity知识来看第一人称和第三人称只不过是摄像机摆放的位置不同而已。小编通过学习鼠标晃动就可以实现视角的旋转,也可以通过跳跃跳到石头上去,我们一起来看。下面我们来实现这一实例。

目录

第一人称角色控制

😴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,并根据自己的喜好调整移动速度等参数值,这样我们的第一人称角色控制就实现了。

4.杂谈 

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

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


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


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

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com