Unity 使用按键控制角色运动

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

创建角色

unity键盘控制人物移动脚本,Unity,unity,游戏引擎

创建一个脚本PlayerController

unity键盘控制人物移动脚本,Unity,unity,游戏引擎

创建控制器,使用boolean值

unity键盘控制人物移动脚本,Unity,unity,游戏引擎

 unity键盘控制人物移动脚本,Unity,unity,游戏引擎

 unity键盘控制人物移动脚本,Unity,unity,游戏引擎

 unity键盘控制人物移动脚本,Unity,unity,游戏引擎

 脚本

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

public class PlayerController : MonoBehaviour
{
    //向量
    Vector3 dir = new Vector3();
    //horizontal上一帧变量
    float horizontalDirection = 0f;
    //vertical上一帧变量
    float verticalDirection = 0f;
    //向量x值
    float x = 0f;
    //向量z值
    float z = 0f;
    //转向时旋转速度大小
    float reduce = 0.1f;
    //按键时 向量x的值
    float xDirection = 0f;
    //按键时 向量z的值
    float zDirection = 0f;

    
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
    }

    //判断horizontal是否处在按下阶段
    bool isHorizontalMotion(float horizontal){
        if ((horizontalDirection >= 0f && ((horizontalDirection < horizontal) || horizontal < 0))  ||
        (horizontalDirection <= 0f && ((horizontalDirection > horizontal) || horizontal > 0)) ||
        (horizontal == 1.00f || horizontal == -1.00f))
        {
            return true;
        }else{
            return false;
        }
    }

    //判断vertical是否处在按下阶段
    bool isVerticalMotion(float vertical){
        if ((verticalDirection >= 0f && ((verticalDirection < vertical) || vertical < 0))  ||
        (verticalDirection <= 0f && ((verticalDirection > vertical) || vertical > 0)) ||
        (vertical == 1.00f || vertical == -1.00f))
        {
            return true;
        }else{
            return false;
        }
    }

    //horizontal进行旋转
    void horizontalRotate(float horizontal, float vertical){
        z = dir[2];
        xDirection = dir[0];
        if (vertical == 0f)
        {
            if (z < reduce && z > -reduce)
            {
                z = 0f;
            }
            if (z > 0f)
            {
                z = z - reduce;
            }
            if (z < 0f)
            {
                z = z + reduce;
            }
        }
        if (horizontal > 0)
        {
            xDirection = xDirection + reduce;
        }
        if (horizontal < 0)
        {
            xDirection = xDirection - reduce;
        }
        if (xDirection > 1.00f)
        {
            xDirection = 1.00f;
        }else if(xDirection < -1.00f){
            xDirection = -1.00f;
        }
        dir.Set(xDirection, 0, z);
    }

    //vertical进行旋转
    void verticalRotate(float horizontal, float vertical){
        x = dir[0];
        zDirection = dir[2];
        if (horizontal == 0f)
        {
            if (x < reduce && x > -reduce)
            {
                x = 0f;
            }
            if (x > 0f)
            {
                x = x - reduce;
            }
            if (x < 0f)
            {
                x = x + reduce;
            }
        }
        if (vertical > 0)
        {
            zDirection = zDirection + reduce;
        }
        if (vertical < 0)
        {
            zDirection = zDirection - reduce;
        }
        if (zDirection > 1.00f)
        {
            zDirection = 1.00f;
        }else if(zDirection < -1.00f){
            zDirection = -1.00f;
        }
        dir.Set(x, 0, zDirection);
    }

    //跑步
    void run(){
        //播放跑步动画
        animator.SetBool("isRun", true);
        //朝向前方移动
        transform.Translate(Vector3.forward * 2 * Time.deltaTime);
        
    }

    private Animator animator;
    // Update is called once per frame
    void Update()
    {

        //水平轴
        float horizontal = Input.GetAxis("Horizontal");
        //垂直轴
        float vertical = Input.GetAxis("Vertical");

        //播放跑步动画
        animator.SetBool("isRun", false);
        if (isHorizontalMotion(horizontal))
        {
            //按键时 x轴旋转
            horizontalRotate(horizontal, vertical);
            run();
        }
        if (isVerticalMotion(vertical))
        {
            //按键时 y轴旋转
            verticalRotate(horizontal, vertical);
            if(!isHorizontalMotion(horizontal))
            {
                run();
            }
        }
        
        horizontalDirection = horizontal;
        verticalDirection = vertical;

        //面向向量
        transform.rotation = Quaternion.LookRotation(dir);
    }

}

然后我们运行时还是会感觉有一点过渡衔接不自然,我们可以更改动画器参数里的设置

unity键盘控制人物移动脚本,Unity,unity,游戏引擎

 unity键盘控制人物移动脚本,Unity,unity,游戏引擎

 当然设为0的话是没有过渡的动画,类似于硬直,所以按照自己的意愿来调试。文章来源地址https://www.toymoban.com/news/detail-521922.html

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

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

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

相关文章

  • Unity教程3:使用BlendTree控制人物移动动画切换

    目录 创建动画文件 移动动画逻辑以及BlendTree的使用方法  创建移动变量 了解并使用混合树 实现保持移动方向的动画切换 手册链接在这:Unity User Manual (2019.3) - Unity 手册 实现了基本的人物移动代码后,为了使得我们的人物更加的生动有趣,我们还需要实现人物的动画效果。

    2024年02月13日
    浏览(33)
  • 2d平面unity,鼠标点击某个位置,人物角色朝这个方向移动

    2d平面unity,鼠标点击某个位置,人物角色朝这个方向移动 如果我们没有将鼠标点击位置转换为世界坐标系中的位置,而是直接将屏幕坐标系中的位置作为角色移动的目标位置,那么可能会发生以下两种情况: 角色会偏离目标位置 由于屏幕坐标系中的位置和世界坐标系中的位

    2024年02月06日
    浏览(67)
  • Unity简单操作:InputSystem获取WASD键盘输入 移动人物

      目录 安装InputSystem  在编辑的脚本中使用 InputSystem生成的脚本 Unity版本:2019.2.3f1 菜单栏/Window/Package Manager/Input System  工程面板内 右键--创建Input Actions   选中New Controls改名为PlayerControls 然后属性 面板按下Edit asset  Action Maps添加:PlayerMovement   Actions添加:New action 改名为

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

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

    2024年02月16日
    浏览(34)
  • Unity解决:3D开发模式第三人称视角 WASD控制角色移动旋转 使用InputSystem

    Unity版本:2019.2.3f1 目录  安装InputSystem 1:创建InputHander.cs脚本 挂载到Player物体上 获取键盘输入WADS 2.创建PlayerLocomotion.cs挂载到Player物体上,控制物体移动转向   菜单栏/Window/Package Manager/Input System  工程面板内 右键--创建Input Actions  选中New Controls改名为PlayerControls 然后属

    2024年02月06日
    浏览(38)
  • Unity中人物控制器

       在Unity中控制器是很常见的功能,一般的人物控制器有两种方法,一种是通过代码实现,另外一种就是通过Unity中的API实现。   这里主要介绍第一种方法。   首先对控制器步骤进行分析。 步骤1:通过方向键控制人物移动。 步骤2:控制摄像机跟随人物 步骤1:通过方

    2024年02月13日
    浏览(32)
  • Unity CharacterController控制人物移动(包括重力实现)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在使用CharacterController组件时,人物移动一般有两种方式,一种是无重力移动–SimpleMove,一种是有重力移动–Move。而使用有重力移动时,又会出现人在下楼梯时无法贴合地面,从而造成飞天效果,最终导

    2024年02月11日
    浏览(26)
  • Unity - 角色控制

    角色控制 创建一个3D对象作为角色,添加 “CharacterController” 组件来控制角色移动,绑定脚本\\\"PlayerControl\\\"。 重力组件 阻力 :受到的空气阻力 角阻力 : 旋转时受到的阻力 使用重力 : (不勾选)只是不会再受重力影响但还会受其他力影响,效果类似于在太空 Is Kinematic :(

    2024年01月24日
    浏览(31)
  • Unity 通过鼠标控制模拟人物移动和旋转视角

    要通过鼠标控制并模拟人物移动和转换视角,将会使用射线检测、鼠标点击和鼠标水平移动,配合物体旋转和移动方法共同实现。 首先搭建个由一个Plane地板和若干cube组成的简单场景: 其次创建一个Capsule作为移动物体,并把摄像头拉到该物体中。 创建以下脚本:  把脚本拉

    2024年02月03日
    浏览(31)
  • 【Unity VR开发】结合VRTK4.0:键盘操作运动与旋转

    当我们的手柄无发进行VR测试,或者想通过键盘进行验证,那么就用到了我们今天的一个功能:组合操作。组合操作允许更复杂的输入类型,我们将介绍如何使用布尔输入(如键盘键)来模拟模拟轴(如操纵杆)。然后,我们可以获取此类轴数据,并将其转换为场景中其他对

    2024年02月13日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包