tiki黑暗之光Unity记录

便捷的快捷键和一些操作 

Scene场景的克隆Ctrl+D再改名

修改界面的值可以运行的时候复制,不运行了再paste上去(不止transform可以)

在Inspector面板的右上角找到一个类似三个点(...)的菜单按钮,点击它,然后在弹出的菜单中选择“Debug Mode”,开启Debug模式后,Inspector面板将显示更多的信息,包括脚本中的私有变量等

涉及的知识的深入

Physics.Raycast函数:

基本功能
射线投射:Physics.Raycast发射一条射线,并检测这条射线是否与场景中的任何碰撞体(Collider)相交
返回值:如果射线与碰撞体相交,则返回true,否则返回false。
碰撞信息:如果发生相交,Physics.Raycast还提供了一个RaycastHit结构体,该结构体包含了关于相交点的详细信息,如相交点的位置、碰撞体的法线方向、被命中的碰撞体引用等。

bool hit = Physics.Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = Physics.DefaultRaycastLayers);

  • Ray ray:一个Ray结构体,表示射线的起点和方向。你可以通过new Ray(origin, direction)来创建一个射线,其中origin是射线的起点(Vector3类型),direction是射线的方向(Vector3类型,通常是单位向量)。
  • out RaycastHit hitInfo:一个RaycastHit结构体,用于存储射线击中的碰撞器的信息。如果射线没有击中任何碰撞器,则此结构体的信息将不会被更新。
  • float maxDistance(可选):射线的最大长度。默认值是Mathf.Infinity,即无限长。
  • int layerMask(可选):一个层掩码,用于指定射线应该检测哪些层上的碰撞器。默认值是Physics.DefaultRaycastLayers,即检测所有默认层上的碰撞器。

character controller组件

Character Controller 是一个常用的组件,它简化了角色在复杂地形上的移动控制。与刚体(Rigidbody)和碰撞检测(Collider)相比,Character Controller 提供了一种更直观、更易于控制角色在地形上移动的方法,尤其是当你不需要物理引擎的复杂模拟(如重力、摩擦力等)时。

  1. 配置Character Controller
    • 在Inspector中,你可以调整Character Controller的各种参数,如半径(Radius)、高度(Height)、步高(Step Offset)、坡度限制(Slope Limit)等。
    • 半径和高度定义了角色的物理尺寸。
    • 步高决定了角色能跨越的最大垂直障碍高度。
    • 坡度限制则限制了角色能够攀爬的最大坡度。
  2. 编写移动代码
    • 你需要编写脚本来控制角色的移动。这通常涉及到监听输入(如键盘、鼠标或游戏手柄)并根据输入调整Character ControllerMoveSimpleMovevelocity属性。
    • SimpleMove是一个简单的方法,它允许你通过给定一个方向和速度来移动角色,而无需担心方向和速度之间的转换。
    • Move方法提供了更多的控制,但你需要自己处理方向和速度的计算。

Mathf类

在Unity中,Mathf 是一个非常重要的类,它提供了一系列用于数学运算的静态方法。这些方法主要用于处理浮点数(float)运算,特别是在处理游戏开发中的物理、动画、摄像机移动等场景时非常有用。

  1. 基本运算
    • Mathf.Abs(float f): 返回浮点数的绝对值。
    • Mathf.Ceil(float f): 返回大于或等于指定浮点数的最小整数。
    • Mathf.Floor(float f): 返回小于或等于指定浮点数的最大整数。
    • Mathf.Round(float f): 返回最接近指定浮点数的整数。
    • Mathf.RoundToInt(float f): 返回最接近指定浮点数的整数,并直接转换为 int 类型。
  2. 三角函数
    • Mathf.Sin(float f): 返回指定角度(以弧度为单位)的正弦值。
    • Mathf.Cos(float f): 返回指定角度(以弧度为单位)的余弦值。
    • Mathf.Tan(float f): 返回指定角度(以弧度为单位)的正切值。
    • Mathf.Asin(float f): 返回其正弦值等于指定数值的角的弧度值。
    • Mathf.Acos(float f): 返回其余弦值等于指定数值的角的弧度值。
    • Mathf.Atan(float f): 返回其正切值等于指定数值的角的弧度值。
  3. 指数和对数
    • Mathf.Exp(float f): 返回 e 的指定次幂的值。
    • Mathf.Log(float f): 返回指定浮点数的自然对数(底数为 e)。
    • Mathf.Log10(float f): 返回指定浮点数的以 10 为底的对数。
  4. 插值和映射
    • Mathf.Lerp(float a, float b, float t): 根据时间 t(范围从 0 到 1)在 a 和 b 之间进行线性插值。
    • Mathf.LerpAngle(float a, float b, float t): 类似于 Lerp,但考虑了角度的循环性质(即,它会在 360 度内插值)。
    • Mathf.Clamp(float value, float min, float max): 将 value 限制在 min 和 max 之间。
    • Mathf.Clamp01(float value): 将 value 限制在 0 和 1 之间。
  5. 其他
    • Mathf.Max(params float[] values): 返回一系列浮点数的最大值。
    • Mathf.Min(params float[] values): 返回一系列浮点数的最小值。
    • Mathf.Pow(float f, float p): 返回 f 的 p 次幂。
    • Mathf.Sqrt(float f): 返回指定浮点数的平方根。
    • Mathf.DeltaAngle(float current, float target): 返回两个角度之间的最短差值(以度为单位),考虑了角度的循环性质。

在C#中,params 关键字

你可以在调用方法时传递零个或多个指定类型的参数。当使用 params 关键字时,必须将该参数指定为方法中的最后一个参数,并且该参数的类型必须是一维数组。但是,在调用方法时,你不需要显式地创建数组实例;C# 编译器会自动为你处理这一转换

Vector3结构体

  • 属性
    • xyz:分别表示向量在X、Y、Z轴上的分量。
    • magnitude(只读):向量的长度(),即向量到原点的距离。
    • sqrMagnitude(只读):向量的长度的平方,计算起来比magnitude更快,因为它避免了开方运算。
    • normalized(只读):向量的单位化版本,即保持方向不变,但长度为1的向量。
  • 方法
    • Distance(Vector3 a, Vector3 b):计算两个点之间的距离。
    • DistanceSquared(Vector3 a, Vector3 b):计算两个点之间距离的平方,比Distance更快,因为避免了开方运算。
    • Lerp(Vector3 a, Vector3 b, float t):在点a和点b之间按参数t(范围从0到1)进行线性插值
    • MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta):将当前点current向目标点target移动,但不超过maxDistanceDelta的距离。
    • Normalize():将向量的长度归一化为1,即单位化向量。
    • Scale(Vector3 scale):将向量的每个分量乘以scale向量的对应分量。
    • Cross(Vector3 lhs, Vector3 rhs):计算两个向量的叉积,结果是一个垂直于这两个向量的新向量。

MonoBehaviour类相关

OnMouseOver函数

在Unity中,OnMouseOver 函数是MonoBehaviour类的一个方法,它用于检测当鼠标悬停在Collider(碰撞体)或GUIElement(GUI元素,但在UGUI系统中更常用的是EventSystem和Raycaster来处理)上时的情况。这个函数会在每一帧鼠标悬停在对象上时调用,直到鼠标移开。

以下是关于OnMouseOver函数的详细解释:

调用时机


OnMouseEnter:在鼠标首次进入对象上方的第一帧调用。
OnMouseOver:随后,只要鼠标保持在对象上方,每帧都会调用这个函数。
OnMouseExit:当鼠标从对象上方移开时调用。

使用场景

OnMouseOver函数常用于实现鼠标悬停效果,比如改变对象的颜色、显示提示信息、播放音效等。


以下是一个简单的示例,展示了如何在Unity中使用OnMouseOver函数来改变游戏对象的颜色:

using UnityEngine;

public class OnMouseOverColor : MonoBehaviour
{
    // 当鼠标悬停时对象将变为这个颜色(红色)
    Color m_MouseOverColor = Color.red;
    // 存储对象的原始颜色
    Color m_OriginalColor;
    // 获取对象的MeshRenderer以访问其材质和颜色
    MeshRenderer m_Renderer;

    void Start()
    {
        // 从对象获取MeshRenderer组件
        m_Renderer = GetComponent<MeshRenderer>();
        // 获取对象的原始颜色
        m_OriginalColor = m_Renderer.material.color;
    }

    void OnMouseOver()
    {
        // 当鼠标悬停在游戏对象上时,将其颜色更改为红色
        m_Renderer.material.color = m_MouseOverColor;
    }

    void OnMouseExit()
    {
        // 当鼠标从游戏对象上移开时,将颜色重置为原始颜色
        m_Renderer.material.color = m_OriginalColor;
    }
}


注意事项


在属于Ignore Raycast层的对象上,不会调用OnMouseOver函数
当且仅当Physics.queriesHitTriggers为true时,才会在标记为触发器的碰撞体上调用该函数。
OnMouseOver函数可以是一个协程,但在函数内部使用yield语句时需要注意上下文和逻辑的正确性。


总结


OnMouseOver是Unity中用于处理鼠标悬停事件的一个非常有用的函数,通过结合OnMouseEnter和OnMouseExit函数,可以实现丰富的交互效果。开发者可以根据自己的需求,在OnMouseOver函数中编写相应的逻辑来处理鼠标悬停事件。

Texture2D

Texture2D和JPG

  1. Texture2D
    • Texture2D是Unity中的一个类,用于表示和处理二维纹理图像。
    • 它是一个数据结构,可以在代码中直接创建、修改和使用,以用于游戏对象(如3D模型、UI元素等)的表面纹理。
  2. JPG
    • JPG(也称为JPEG)是一种图像文件格式,由JPEG联合图像专家组定义,用于连续色调静态图像压缩。
    • 它是一种经过压缩的有损图片格式,文件后缀名主要是.jpg或.jpeg。
    • JPG文件通常用于存储和传输图像数据,但不能直接用于Unity中的纹理处理,除非先被导入到Unity项目中并转换为Texture2D或其他纹理类型。

sprite与texture的区别:虽然Sprite基于图像文件(纹理),但Sprite更侧重于图像在游戏场景中的表现方式,包括其位置、大小、旋转等属性,以及如何通过渲染管线将其呈现给玩家。而纹理则更多地是指图像数据本身,以及这些数据如何被应用到物体表面上。

Texture2D和Texture3D

  • Texture2D
    • Texture2D是二维纹理,主要用于2D游戏或UI界面中的图像显示。
    • 它是一张二维的图片,可以覆盖在网格(Meshes)、粒子(Particles)或UI元素上,为其提供视觉上的细节和外观。
    • 在Unity中,Texture2D通常用于Sprite的制作,以及UI元素(如按钮、图标等)的显示。
  • Texture3D(虽然通常不直接提及Texture3D,但可以从Texture的扩展理解其特性):
    • Texture3D是三维纹理,理论上它用于存储三维空间中的纹理数据,但在Unity的标准用法中,更常见的是使用Texture2D配合其他技术(如法线贴图、高度图等)来模拟3D效果
    • 然而,Unity并没有直接提供一个名为Texture3D的常规纹理类型用于游戏开发中的常规纹理贴图。相反,对于3D游戏开发,Unity提供了多种支持3D图形渲染和物理模拟的功能,如使用3D模型、材质(Materials)和Shader等。

  • 36
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值