[方法] Unity 解决类《原神》角色移动方向问题

第三人称视角类的游戏有很多,比如《原神》、《崩坏:星穹铁道》、《剑星》、《绝地求生》等。这些游戏中,角色的移动方向取决于玩家的输入和相机的方向,例如玩家在键盘上按下D键,则角色会相对于相机方向向右移动,本篇文章就来揭晓这背后的实现方式。

1. 根据位移动画进行模型实际位移

假设目前我们的角色有一个胶囊体(characterController)和一个动画器(animator),并正在播放与位移相关的动画,那么,我们就要根据动画中的运动偏移来对模型进行一个实际的位移:

// [事件] 模型的动画带有位置的偏移
private void OnAnimatorMove()
{
    OnRootMotion(animator.deltaPosition, animator.deltaRotation);
}

private void OnRootMotion(Vector3 deltaPosition, Quaternion deltaRotation)
{
    // 加入重力影响
    deltaPosition.y = gravity * Time.deltaTime;
    // 对玩家进行一个实际的位移
    characterController.Move(deltaPosition);
}

2. 处理模型位移方向

接下来,我们要根据玩家的输入相机的朝向来实现类似于《原神》的角色移动方向的机制,核心代码十分简单,并不需要我们亲自编写旋转算法,拿来即用:

void Update()
{
    // 玩家输入向量:x - 水平输入,y - 垂直输出
    Vector2 moveVector = PlayerInput.input.Player.Move.ReadValue<Vector2>().normalized;
    // 转向过渡
    float rotateSpeed = 5f;

    // -----------核心代码-----------

    // 将玩家的输入组合成一个三维向量
    Vector3 input = new Vector3(moveVector.x, 0, moveVector.y);
    // 拿到相机的朝向
    float y = Camera.main.transform.rotation.eulerAngles.y; 
    // 求得角色的目标移动方向
    Vector3 targetDic = Quaternion.Euler(0, y, 0) * input;
    // 让模型旋转到目标方向
    transform.rotation = Quaternion.Slerp(transform.rotation, 
        Quaternion.LookRotation(targetDic), Time.deltaTime * rotateSpeed);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/589756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vitis HLS 学习笔记--MAXI手动控制突发传输

目录 1. 简介 2. MAXI 突发传输详解 2.1 突发传输的前置条件 2.2 hls::burst_maxi 详解 2.2.1 基本知识 2.2.2 hls::burst_maxi 构造函数 2.2.3 hls::burst_maxi 读取方法 2.2.4 hls::burst_maxi 写入方法 2.3 示例一 2.4 示例二 3. 总结 1. 简介 这篇文章探讨了在…

win11 Terminal 部分窗口美化

需求及分析&#xff1a;因为在 cmd、anaconda prompt 窗口中输入命令较多&#xff0c;而命令输入行和输出结果都是同一个颜色&#xff0c;不易阅读&#xff0c;故将需求定性为「美化窗口」。 美化结束后&#xff0c;我在想是否能不安装任何软件&#xff0c;简单地通过调整主题颜…

前端高频算法

分析算法排序&#xff1a; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度: 运行完一个程序所需内存的大小。 执行效率、内存消耗、稳定性 三方面入手。 1. 排序 1.1 冒泡排序 冒泡的过程只涉及相邻数据的交换操作&#xff0c;所以它的空间复杂度为 O(1)。 为了保证…

详细设计(上)

结构程序化 三种基本控制结构 其他常用控制结构 人机界面设计 三条“黄金规则” 1、置用户于控制之下 2、减少用户记忆负担 3、保持界面一致 设计问题 设计人机界面过程中会遇到的4个问题&#xff1a; 1、系统响应时间 2、用户帮助设施 3、出错信息处理 4、命令交互 设计过…

每日算法之二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#…

tensorflow报错

参考 TensorFlow binary is optimized to use available CPU instructions in performance-critical operations._this tensorflow binary is optimized to use availab-CSDN博客 解决Python中cuBLAS插件无法注册问题_unable to register cudnn factory: attempting to re-CS…

采用“3+1”模式,开展新部门组建的各项工作解决思路

【背景】 A公司成立于2000年&#xff0c;位于浙江省杭州市&#xff0c;是一家大中型即将上市的公司&#xff0c;近年来发展一直不错&#xff1b;同时A公司还有另外一个产业是国家级公共服务平台&#xff0c;由“1平台”、“6中心”构成&#xff0c;主要围绕园区及区域做服务。…

搭建智能客服机器人设计流程

一、检索型机器人FAQ-Bot 在客服处理的问题中70%都是简单的问答业务&#xff0c;只要找到QA知识库中与用户当前问句语义最相近的标准问句&#xff0c;取出答案给用户就可以了。FAQ-Bot就是处理这类问题的。在没有使用深度学习算法之前&#xff0c;通常采用检索NLP技术处理。 …

深入图像分类:使用美国手语数据集训练定制化神经网络

引言 在前一篇博客中&#xff0c;我们探讨了如何使用MNIST数据集训练一个基础的神经网络来进行手写数字识别。在本文中&#xff0c;我们将更进一步&#xff0c;使用美国手语字母表&#xff08;ASL&#xff09;数据集来构建一个定制化的图像分类模型。通过这个过程&#xff0c;…

免费通配符证书的申请指南——从申请到启动https

如果您的网站拥有众多二级子域名&#xff0c;那么通配符证书证书是最好的选择。 免费通配符申请流程如下&#xff1a; 1 创建证书服务商账号 首先选择一个提供免费通配符的服务商&#xff0c;打开国产服务商JoySSL官网&#xff0c;创建一个账号&#xff08;注册账号时填写注册…

分享自己一篇在亚马逊云科技AWS官网发的Blog技术文章

小李哥在亚马逊AWS官网&#xff0c;作为第一作者发了自己的第一篇AWS Blog文章&#xff0c;也是自己今年在AWS官网的第11篇文章。文章主要内容是描述为出海的金融企业&#xff0c;搭建满足PCI-DSS合规、FIPS 140-2 Level 3安全标准的传输中数据加密云端方案&#xff0c;主要用于…

CSS优惠券、卡券样式绘制

实现左右凹陷中间有虚线效果 效果图 实现思路 从效果图可以看到这个优惠券是左右两边凹陷&#xff0c;中间还有一条虚线&#xff0c;为了封装后插槽使用方便&#xff0c;把优惠券以虚线为准分了两部分。这样布局的好处是上部分内容和下部分都可以自定义&#xff0c;不受内容限…

如何搭建本地的 NPM 私有仓库 Nexus

NPM 本地私有仓库&#xff0c;是在本地搭建NPM私有仓库&#xff0c;对公司级别的组件库进行管理。在日常开发中&#xff0c;经常会遇到抽象公共组件的场景&#xff0c;在项目内部进行公用。新的项目开始时&#xff0c;也会拷贝一份创建一个新的项目&#xff0c;这样做不易于管理…

芯片的可靠性测试项目有哪些?

知识星球&#xff08;星球名&#xff1a;芯片制造与封测社区&#xff0c;星球号&#xff1a;63559049&#xff09;里的学员问&#xff1a;封装的可靠性测试都测哪些项目呢&#xff1f; 什么是可靠性测试&#xff1f; 芯片的可靠性测试是针对芯片进行的一系列严格的测试&#x…

量子城域网建设设备系列(二):量子密钥管系统(KMS)

在上文介绍光量子交换机的文章中我们提到&#xff0c;量子保密通信网络的通道切换是由量子密钥管理系统&#xff08;Key Management System&#xff0c;KMS&#xff09;给光量子交换机下发信道切换指令&#xff0c;实现整个网络中任意两对量子密钥分发终端的量子信道互联互通&a…

2024.5.3

C风格字符串的越界异常处理 #include <iostream> #include <cstring> using namespace std; class MyStr{char str[200]; public:void set(string str);char at(unsigned int a); }; void MyStr::set(string str){strcpy(this->str,str.c_str()); } char MyStr…

UI-Diffuser——使用生成式扩散模型的UI原型设计算法解析

概述。 移动UI是影响参与度的一个重要因素&#xff0c;例如用户对应用的熟悉程度和使用的便利性。如果你有一个类似的应用程序&#xff0c;你可能会选择一个具有现代、好看的设计的应用程序&#xff0c;而不是一个旧的设计。然而&#xff0c;要从头开始研究什么样的UI最适合应…

解决RTC内核驱动的问题bm8563

常用pcf-8563 , 国产平替BM8563(驱动管脚一致)&#xff1b; 实时时钟是很常用的一个外设&#xff0c;通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合就需要实时时钟&#xff0c;可以使用专用的实时时钟芯片来完成此功能 RTC 设备驱动是一个标准…

wmware启动ubuntu18.04,提示虚拟机使用中

背景和原因 搭建虚拟机环境时&#xff0c;处理问题&#xff0c;忘记虚拟机关机&#xff0c;直接关机&#xff0c;导致虚拟机不能使用&#xff0c;提示使用中 解决 &#xff0c;在关掉虚拟机的情况下&#xff0c;删除虚拟机下的以下文件 总结 每次关电脑前记得先关掉虚拟机&…

【跟马少平老师学AI】-【神经网络是怎么实现的】(七-3)词向量应用举例

一句话归纳&#xff1a;用TextCNN实现文本情感分类。 1&#xff09;TextCNN&#xff1a; 文本的卷积核是一维的。 2&#xff09;文本卷积运算&#xff1a;
最新文章