Unity | 渡鸦避难所-3 | 控制角色移动

news2024/11/24 4:23:16

1 移动刚体

在物理世界中,控制刚体移动通常有三种方式,每种方式产生的效果也不尽相同

  • AddForce:添加作用力,用于模拟真实的物理效果

  • MovePosition:设置位置,用于精确控制游戏对象的位置

  • velocity:设置速度,用于精确控制游戏对象的速度

游戏中期望玩家按下键盘或者拖动摇杆时,角色以恒定的速度移动,因此通过更改 velocity 的方式移动刚体

脚本的逻辑比较简单,在 FixedUpdate 中通过 Input 获取键盘的输入后,再乘以适当的系数计算出速度值,赋予刚体的 velocity 属性后,角色即可移动

为了体验更加舒适,角色移动的同时需要朝向移动的方向,可以使用 Quaternion.LookRotation(movement) 获得朝向的四元数,再通过 Quaternion.Slerp 实现平滑过度。如需了解四元数的更多信息,请参阅文档:「https://docs.unity3d.com/cn/2021.2/Manual/class-Quaternion.html」

物理引擎也采用与帧渲染类似的方式以离散时间步骤进行更新,在每次物理更新之前都会调用一个称为 FixedUpdate 的单独事件函数。由于物理更新和帧更新不会以相同频率进行,所以如果将物理代码放在 FixedUpdate 函数而不是 Update 中,此代码将产生更准确的结果。如需了解事件函数的更多信息,请参阅文档:「https://docs.unity3d.com/cn/2021.2/Manual/EventFunctions.html」

PlayerController 脚本如下:

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

public class PlayerController : MonoBehaviour
{
    public float speed = 2.0f;
    
    private Rigidbody _rigidbody;

    void Start()
    {
        _rigidbody = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float inputX = Input.GetAxis("Horizontal");
        float inputZ = Input.GetAxis("Vertical");

        if (inputX == 0 && inputZ == 0)
        {
            return;
        }
        
        Vector3 movement = new Vector3(inputX, 0.0f, inputZ) * speed;
        _rigidbody.velocity = new Vector3(movement.x, _rigidbody.velocity.y, movement.z);
        if (movement != Vector3.zero)
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement), 0.15f);
        }
    }
}

将脚本挂载到场景中的同名对象(PlayerController)上,点击运行

运行后会编辑器会自动切换到 Game 视图,但画面中存在两个问题:画面模糊以及角色在移动后摔倒了,这当然不是因为我们近视眼和小帅平地摔技能点满

成长不过就是一个不断发现问题、解决问题的过程

2 设置预览分辨率

编辑器中的 Aspect 可以选择不同值来测试游戏在具有不同宽高比的显示器上的显示效果。默认情况下,此设置为 Free Aspect

Aspect 下有个 Low Resolution Aspect Ratios 选项,启用该选项可模拟更旧显示屏的像素密度,选择宽高比后,此功能会降低 Game 视图的分辨率。Game 视图位于非 Retina 显示屏上时,此复选框始终处于启用状态

关闭该选项后,画面即可恢复正常

除了关闭该选项,还可以指定显示分辨率,通常设定为与市场主流设备分辨率相同比例的值,如 1624*750

3 禁止物理模拟旋转

Unity 的物理引擎会模拟真实世界的物理效果,包括重力和摩擦力等。如果角色在移动时遇到不平整的地面,可能会因为物理效果而出现旋转

Rigidbody 组件提供了 Freeze Rotation 属性,该属性控制物理引擎是否会更改对象的旋转状态。如果启用了 Freeze Rotation,则物理引擎不会修改旋转状态

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv 入门一(显示一张图片)

头文件添加如下&#xff1a; 库目录添加如下&#xff1a; 依赖的库如下&#xff1a; #include <iostream> #include "opencv2/opencv.hpp" int main(int argc,char ** argv) { cv::Mat img cv::imread(argv[1], -1); if (img.empty()) return -1; …

1998-2022年最大NDVI数据集(1km)

本文的植被指数&#xff08;NDVI&#xff09;数据来源于美国NASA定期发布的MOD13A3植被指数数据集。MOD13A3提供自1998年4月起逐月1km的NDVI数据。原始数据来源详细的介绍见&#xff1a;https://doi.org/10.5067/MODIS/MOD13A3.006   月度NDVI数据为每月1-3旬NDVI数据数值的最…

第二证券:耐心等待指数企稳 关注数据要素等板块

其时或是布局商场的时间窗口。2024年美联储或打开降息周期&#xff0c;欧洲降息预期也在增强&#xff0c;全球流动性有望迎来拐点。中心经济工作提及2024年的职业及工业方向&#xff0c;政策有望落地施行&#xff0c;将会为职业配备带来较多的催化要素&#xff0c;是具备配备价…

小红书可观测 Metrics 架构演进,如何实现数十倍性能提升?

在当前云原生时代&#xff0c;随着微服务架构的广泛应用&#xff0c;云原生可观测性概念被广泛讨论。可观测技术建设&#xff0c;将有助于跟踪、了解和诊断生产环境问题&#xff0c;辅助开发和运维人员快速发现、定位和解决问题&#xff0c;支撑风险追溯、经验沉淀、故障预警&a…

Android WorkManager入门(一)

WorkManager入门 前言一、WorkManager是什么&#xff1f;二、使用1.添加依赖2.定义工作3.创建 WorkRequest并提交 一次性的任务&#xff08;OneTimeWorkRequest&#xff09;4.setExpedited 加急方法5. setInitialDelay 延时任务6.约束 总结参考资料 前言 在当今快节奏的生活中…

协同物联:设备物联与车间数据采集的融合

随着工业4.0和智能制造的快速发展&#xff0c;物联网技术在工业领域的应用逐渐普及。其中&#xff0c;协同物联、设备物联和车间数据采集技术对于提升企业生产效率和降低运营成本具有重要意义。本文将深入探讨这些技术在现代工业环境中的应用及它们如何共同推动企业向数字化转型…

【Linux基础】3. 文件基本属性

文章目录 【 1. 文件的属主和属组 】【 2. 显示文件的类型、权限 】2.1 文件类型2.2 文件权限 【 3. 更改文件属性 】3.1 chgrp 更改文件属组3.2 chown 更改文件所有者3.3 更改文件权限3.3.1 数字法更改文件权限3.3.2 符号法更改文件权限 【 1. 文件的属主和属组 】 Linux 系统…

山海鲸开发者带你看:智慧医疗解决方案

在之前的文章中我为大家介绍了山海鲸可视化软件的一些基础操作以及一些解决方案&#xff0c;让大家知道了山海鲸可视化软件是一款可以免费自由开发的数字孪生软件。在本文&#xff0c;我将带大家了解山海鲸可视化的智慧医疗解决方案&#xff0c;让大家知道山海鲸可视化能在医疗…

maui中实现加载更多 RefreshView跟ListView(2)

一个类似商品例表的下拉效果&#xff1a; 代码 新增个类为商品商体类 public class ProductItem{public string ImageSource { get; set; }public string ProductName { get; set; }public string Price { get; set; }}界面代码&#xff1a; <?xml version"1.0&quo…

现代化智慧档案馆八防十防建设调研样本

以下是一份完整的解决方案&#xff0c;包括方案介绍、方案优势、实施方案、预算和清单、实施时间和进度计划以及可能遇到的难点和解决方案。 方案介绍 档案库房八防十防环境一体化监控系统旨在为档案库房提供全方位的环境监控和管理&#xff0c;保障档案的安全、稳定和可靠。该…

C++前后函数的相互调用,函数的预定义,靠前的函数调用靠后的函数

好多时候我们习惯性的认为在C中函数的定义是没有顺序的关系的&#xff0c;如下所示 代码片段1 void func1() {cout << "func1" << "\n"; } void func2() {cout << "func2" << "\n"; }代码片段2 void fun…

浅析PAM市场价值

随着全球数字化蓬勃发展&#xff0c;云计算、人工智能、大数据、5G等技术的应用范围不断扩大&#xff0c;在企业运用新技术提高自身效率的同时也面临着更多由新技术诱发的网络威胁&#xff0c;全球网络威胁形势愈发严峻。网络攻击行为日趋复杂&#xff0c;构建全面的安全防护体…

端口占用命令 netstat (centos)+netstat (windows)

linux 1.使用 netstat 命令查看端口占用情况 netstat -tlnp 使用 -p 选项查看进程信息。 使用 -t 选项列出 TCP 协议的连接&#xff1a;类似&#xff08;使用 -u 选项列出 UDP 协议的连接&#xff1a;&#xff09; 2.查找占用指定端口号的应用信息 netstat -tlnp | grep 3…

基于SSM的高校疫情防控出入信息管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本高校疫情防控出入信息管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞…

【PHP入门】1.3-数据类型、转换、判断

-数据类型- 数据类型&#xff1a;data type&#xff0c;在 PHP中指的是存储的数据本身的类型&#xff0c;而不是变量的类型。 PHP是一种弱类型语言&#xff0c;变量本身没有数据类型。 1.3.1PHP的八种数据类型 在PHP中将数据分为三大类八小类&#xff1a; 简单&#xff0…

【C语言】还不会【二维数组】!进来手把手教你,保姆级!!!

讲二维数组前&#xff0c;先讲一下sizeof()函数的用法&#xff1b; 目录 sizeof()函数 二维数组概念 二维数组创建 二维数组初始化 1&#xff0c;不完全初始化 2&#xff0c;完全初始化 二维数组下标 二维数组的输入和输出 二维数组的储存 变长数组 总结 sizeof()函数…

【QT】解决QTableView修改合并单元格内容无法修改到合并范围内的单元格

问题&#xff1a;修改合并单元格的内容 修改合并单元格的内容时&#xff0c;希望直接修改到合并范围内的单元格&#xff0c;Qt没有实现这个功能&#xff0c;需要自己写出 Delegate来实现 方案&#xff1a;Delegate class EditDelegate : public QStyledItemDelegate { public:…

使用vite搭建项目时,在启动vite后,浏览器显示页面:找不到localhost的网页

现象 在使用前端工具vite&#xff08;版本5&#xff09;&#xff0c;搭建vue3项目时&#xff0c;启动vite&#xff0c;浏览器显示页面&#xff1a;找不到localhost的网页, 起初怀疑是 未加参数 --host0.0.0.0,导致&#xff0c;后加上该参数后问题依旧 解决 将index.html页面…

如何进一步优化Ubuntu服务器的性能

导读&#xff1a; 要进一步优化Ubuntu服务器的性能&#xff0c;您可以考虑以下几个方面&#xff1a;优化软件包管理&#xff1a; Ubuntu使用APT&#xff08;Advanced Package Tool&#xff09;作为其软件包管理工具。为了提高性能&#xff0c;您可以采取以下措施 要进一步优化U…

Java接收并解析HL7协议数据

一、前言 HL7协议相信医疗行业的IT人员都不陌生&#xff0c;笔者由于接触时间比较短&#xff0c;乍一听“协议”还是比较懵&#xff0c;不自觉就把它和“HTTP”、"SOAP”之类的网络协议挂上关联&#xff0c;可事实上这个HL7只是一种数据格式&#xff0c;传输方式也可以使用…