IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity今日小结1 -> 正文阅读

[游戏开发]Unity今日小结1

今天在看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球体的半径。
layerMaskLayer 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 手册

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:09:00  更:2022-03-13 22:09:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 18:41:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码