Unity今日小结1

2023-10-26

今天在看M_Studio老师的视频学了很多东西,这里想要给自己小结一下

首先,在M_studio的3DRPG课程中编写敌人追击发现玩家的脚本文件,里面我印象比较深刻的两个函数是Transform.LookAtPhysics.OverlapSphere,看到这里我就直接去查询Unity的官方文档,了解了这两个方法

Physics.OverlapSphere

public static Collider[] OverlapSphere (Vector3 position, float radius, int layerMask= AllLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

position 球体的中心。
radius 球体的半径。
layerMask Layer mask 定义要在查询中包括哪些碰撞体层。
queryTriggerInteraction 指定该查询是否应该命中触发器。

在手册中,对此方法这样描述

计算并存储接触球体或位于球体内部的碰撞体。

Collider[] 返回一个数组,其中包含与球体接触或位于球体内部的所有碰撞体。

而在我们的项目中,就是使用Unity手册上带的例子的改变来是实现敌人是否找到玩家的功能

bool FoundPlayer()
{
    var colliders = Physics.OverlapSphere(transform.position, sightRadius);
    foreach (var target in colliders)
    {
        if (target.CompareTag("Player"))
        {
            attackTarget = target.gameObject;
            return true;
        }
    }

    attackTarget = null;
    return false;
}

Transform.LookAt

这里我写出目前用到的参数和功能,其实还有一个worldUp的参数

public void LookAt Transform target);

target 要指向的对象

旋转变换,使向前矢量指向 target 的当前位置

我自己的理解就是看向target的位置


Debug.DrawRay()

我依稀记得我还在视频中看到了一个方法Debug.DrawRay(),是用来测试用的,我依旧继续查看Unity官方文档,不得不说,官方文档是真的有意思。

首先就是给出这个方法的头

public static void DrawRay (Vector3 start, Vector3 dir, color = Color.white, float duration = 0.0f, bool depthTest = true);

参数 描述
start 应作为该射线起始点的世界空间中的点。
dir 该射线的方向和长度。
color 绘制的直线的颜色。
duration 该直线的可见时长(单位为秒)。
depthTest 该直线是否应被靠近此摄像机的其他对象遮挡?

在世界坐标中绘制一条从 startstart + dir 的直线。

duration 参数确定在绘制该直线所在的帧之后该直线可见时长。如果持续时间为 0(默认值),则该直线被渲染 1 帧。

如果将 depthTest 设置为 true,则该直线将被此场景中更靠近摄像机的其他对象遮挡。

将在该 Editor 的场景视图中绘制该直线。如果在游戏视图中启用了辅助图标绘图,则在该视图中也将绘制该直线。

官方文档给出了很有用的示例,让我们来了解这个函数

using UnityEngine;

public class Example : MonoBehaviour
{
    // Frame update example: Draws a 10 meter long green line from the position for 1 frame.
    void Update()
    {
        Vector3 forward = transform.TransformDirection(Vector3.forward) * 10;
        Debug.DrawRay(transform.position, forward, Color.green);
    }
}

因为在官方文档中,我又看到了我不懂的方法TransformDirection(Vector3.forward),所以我又查询了,这个方法,原来它的作用是把物体方向矢量的本地坐标变为世界坐标,而Vector3.forword则是方向(0, 0, 1)就是物体正前方,这个示例最后也就是画了一根射线,从当前的物体,到它正前方10米为止。


我记得我在使用Unity2019.4.31f1c1的时候,它竟然抽风了,我无语了

问题就是我一保存代码控制台就会报错,如下…

nityEditor.Graphs.Edge.WakeUp () (at )
NullReferenceException: Object reference not set to an instance of an object
UnityEditor.Graphs.Edge.WakeUp () (at :0)
UnityEditor.Graphs.Graph.DoWakeUpEdges (System.Collections.Generic.List1[T] inEdges, System.Collections.Generic.List1[T] ok, System.Collections.Generic.List`1[T] error, System.Boolean inEdgesUsedToBeValid) (at :0)
UnityEditor.Graphs.Graph.WakeUpEdges (System.Boolean clearSlotEdges) (at :0)
UnityEditor.Graphs.Graph.WakeUp (System.Boolean force) (at :0)
UnityEditor.Graphs.Graph.WakeUp () (at :0)
UnityEditor.Graphs.Graph.OnEnable () (at :0)

解决方法就是:重启Unity,不过还是偶尔会抽风,幸好影响不大。


时间来到下午,我在研究如何用Unity导入fbx文件,因为文件的问题,还有我对Unity导入fbx的不熟悉,我好像又花了一个下午,查看Unity官方文档,来查看Untiy导入面板的各种功能、参数的设置,也就是那个Model Import Settings。因为当时遇到了导入物体材质的问题,我就主要在查看Model选项卡和Materials选项卡。

Model中,我解决了导入的fbx自带摄像机和自带灯光的选项,其余的说实话,我还没有用上。

相比较RigAnimation选项卡,Materials选项还是比较好懂的。我也使用了里面的设置,最后成功导入了我的fbx文件。

下面放Materials选项卡的基本设置等

属性 功能
Material Creation Mode 定义希望 Unity 如何为模型生成或导入材质。从该下拉菜单中选择 None 时,Inspector 将在此选项卡上隐藏其余设置。
None 不使用此模型中嵌入的任何材质。改用 Unity 的默认漫射材质。
Standard 导入时,Unity 应用一组默认规则来生成材质。如果要通过脚本来自定义 Unity 生成材质的方式,请改用 Import via MaterialDescription (Experimental) 模式。
Import via MaterialDescription (Experimental) 导入时,Unity 使用 FBX 文件中嵌入的材质描述来生成材质。与先前的导入方法相比,此方法可提供更准确的结果,并且支持更广泛的材质类型,例如 Autodesk 的 Arnold 和 [Physical](https://knowledge.autodesk.com/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2020/ENU/3DSMax-Lighting-Shading/files/GUID-809B9123-21A2-443E-A7A4-0DAB70410B8D-htm.html?st=Physical Material) 以及 Unity 的 HDRP 材质。有关更多信息,请参阅下面的材质描述部分。
sRGB Albedo Colors 启用此选项可在伽马空间中使用反照率颜色。默认情况下为旧版导入方法启用了此选项。 对于使用线性颜色空间的项目,请禁用此选项。 如果从 Material Creation Mode 下拉菜单中选择 Import via MaterialDescription (Experimental),则该属性不可用。
Location 定义如何访问材质和纹理。根据选择的这些选项,可以使用不同的属性。
Use Embedded Materials 将导入的材质保持在导入的资源中。从 Unity 2017.2 版本开始,这是默认选项。
Use External Materials (Legacy) 将导入的材质提取为外部资源。这是旧版的材质处理方式,适用于使用 Unity 2017.1 或早期版本创建的项目。

Remapped Materials

新导入操作或对原始资源的更改不会影响提取的材质。如果要从源资源重新导入材质,必须删除 Remapped Materials 列表中对提取的材质的引用。要从该列表中删除某一项,请选择该项,然后按键盘上的 Backspace 键。

Naming

定义材质的命名策略。

属性 功能
By Base Texture Name 使用导入材质的漫射纹理名称来命名材质。如果未将漫射纹理分配给材质,Unity 将使用导入材质的名称。
From Model’s Material 使用导入材质的名称来命名材质。
Model Name + Model’s Material 使用模型文件的名称与导入材质的名称相结合来命名材质。

Search

定义 Unity 尝试在使用 Naming 选项定义的名称时查找现有材质的位置。

属性 功能
Local Materials Folder 在本地 Materials 子文件夹(即模型文件所在的同一文件夹)中查找现有材质。
Recursive-Up 在所有父文件夹(一直向上追溯到 Assets 文件夹)中的所有 Materials 子文件夹中查找现有材质。
Project-Wide 在所有 Unity 项目文件夹中查找现有材质。

最后今天的总结就到这边吧,打算明天在看一点Animation Controller的官方文档,官方文档真好用!

Unity 用户手册 (2019.4 LTS) - Unity 手册

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity今日小结1 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 购物车测试用例

    1 界面测试 界面布局 排版是否合理 文字是否显示清晰 不同卖家的商品是否区分明显 页面的tooltips能正常显示 鼠标浮动在购物车按钮 迷你购物车界面显示是否正常 2 功能测试 未登录时 将商品加入购物车 页面跳转到登录页面 登录成功后
  • 开源Linux面板-1Panel

    开源Linux面板 1Panel 1Panel 是一个现代化 开源的 Linux 服务器运维管理面板 1Panel 的功能和优势包括 快速建站 深度集成 Wordpress 和 Halo 域名绑定 SSL 证书配置等一键搞定 高效管理 通过
  • Windows 10 PC 安装 Docker CE

    系统要求 Docker for Windows 支持 64 位版本的 Windows 10 Pro 且必须开启 Hyper V 安装 点击以下链接下载
  • 四数之和——双指针的实践

    一 四数之和 1 1 题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target 判断 nums 中是否存在四个元素 a b c 和 d 使得 a b c d 的值与 target 相等 找出所有满足条件且不重复的四元组 1
  • frida学习及使用

    文章目录 安装frida 安装python3 7 设置环境变量 安装pycharm和nodejs 使用frida 将frida server push到手机设备中 端口转发 安装apk 使用jadx查看java代码 运行frida serv
  • npm 升级依赖包

    首先安装升级插件 npm check updates npm install g npm check updates 或者 cnpm install g npm check updates ncu 是 npm check updates 的
  • 防抖 / 节流

    防抖 新建debounce js文件 export const debounce function fun delay let timer return function let that this let args arguments i
  • 7月9日王者荣耀服务器维护,《王者荣耀》7月9日体验服停机更新公告

    亲爱的召唤师 为了增加版本的稳定性 我们计划在2021年7月9日16 00 18 00对 王者荣耀 体验服进行停机维护 更新时间 7月9日16 00 18 00 15 30关闭PVP 更新方式 停机更新 更新范围 王者荣耀修炼之地体验服 下
  • 在iPhone/iPad端运行DebianLinux系统【iSH-AOK】

    最后一次更新 2023 4 08 请勿利用文章内的相关技术从事非法测试 由于传播 利用此文所提供的信息而造成的任何直接或者间接的后果及损失 均由使用者本人负责 作者不为此承担任何责任 文章目录 1 前言 2 简介 2 2iSH AOK介绍与
  • es批量修改数组动态增加并去重

    es创建测试的index和type 对应mysql的数据库和表 PUT uniq test idx1 mappings uniq test properties comId type long customerName type keywo
  • Your branch is ahead of 'origin/master' by 2 commits.

    遇到这种问题 表示在你之前已经有2个commit而没有push到远程分支上 所以需要先git push origin 将本地分支提到远程仓库 也可以直接git reset hard HEAD x解决 这里的x表示的就是在这之前已经有多少次的
  • 分享一些你觉得在Linux上顺理成章,换到Windows上就可能令人费解的事

    Linux与Windows都是十分常见的电脑操作系统 相信你对它们二者都有所了解 在你的使用过程中 是否有什么事让你觉得在Linux上顺理成章 换到Windows上就令你费解 亦或者关于这二者你有任何想要分享的 都可以在这里留下你的看法 方
  • PSM倾向得分匹配

    1 简要介绍 我们以 是否上大学 对 收入 的影响为例来说明这个问题 这里 先讲二者的关系设定为如下线性模型 显然 在模型 1 的设定中 我们可能忽略了一些同时影响 解释变量 是否上大学 和 被解释变量 收入 的因素 例如 家庭背景 能力
  • Transformer模型简介

    简介 Transformer 是 Google 团队在 17 年 6 月提出的 NLP 经典之作 由 Ashish Vaswani 等人在 2017 年发表的论文 Attention Is All You Need 中提出 Transfor
  • gitlab分支保护_如何删除gitlab上默认受保护的master主分支

    今天开发在检查代码的时候 发现master分支有问题 现在准备删除此主分支 并且重新提交正确的代码 不过在删除时发现 master分支不能被删除 ps 主分支一般都是线上分支 需要开发确认后并且做好备份才能动 本次是因为master分支已经
  • 使用ngx_log_if模块,对阿里云SLB健康检测产生的大量日志进行过滤处理

    阿里云1000元通用代金券点此领取 最近公司购买了阿里云的SLB服务 健康检测使用的是http和https协议 直接访问web 后端的80端口是nginx 阿里云会按设置的健康检测时间使用get方法 去访问域名下的检查路径 判断web是否存
  • 【ES从入门到实战】十、全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all

    接第9节 2 Query DSL 在上一节中使用的形如 GET bank search query match all sort account number asc balance desc 的查询语言风格 我们称之为 Query DSL
  • 03-neo4j的命令

    1 查看某个联系格式 MATCH p n 开始Label r 关系名称 m 结束Label RETURN p LIMIT 25 MATCH p n Person r hive m Address RETURN p LIMIT 25 2 连续
  • Jupyterlab离线安装及windows环境多Python内核设置

    一 安装前准备 请浏览 安装多版本python 建立虚拟环境 建立虚拟python环境 假设原python路径为 D Program Files Python310 虚拟环境将建立在d mpy python3108 打开 Windows P
  • Unity今日小结1

    今天在看M Studio老师的视频学了很多东西 这里想要给自己小结一下 首先 在M studio的3DRPG课程中编写敌人追击发现玩家的脚本文件 里面我印象比较深刻的两个函数是Transform LookAt和Physics Overlap