Unity重要知识点

2023-11-19

脚本生命周期

//每当脚本被加载时调用一次

// 1.   在Awake中做一些初始化操作

void Awake(){

//初始化public成员

}

// 2.   在每次激活脚步时调用

void OnEnable(){}

//在第一次调用Update之前调用一次Start,即使取消激活,再激活也不会再执行

// 3.   在Start中做一些初始化操作

void Start(){

//一般做一些私有成员

}

// 4.   每帧调用一次Update

void Update(){}

// 5.   在Update方法调用完之后调用

void LateUpdate(){}  //如刷新完逻辑操作

// 6.   取消激活状态后调用

void OnDisable(){}

// 7.   脚步被销毁时调用

void OnDestroy(){}  //如怪物死亡爆东西

  

// 8.   持续调用  - IMGUI代码需要写在OnGUI 方法中和UGUI,NGUI

void OnGUI(){

}

// 9.   以固定的频率调用,不会受到图像刷新帧速率的影响

//一般我们会把处理物理的代码放在这里

void FixedUpdate(){}

 

 

 

Input

//n参数 0 鼠标左键

//n参数 1 鼠标右键

//n参数 2  鼠标中建

Input.GetMouseButtonDown(n)  //检测鼠标按键按下事件

Input.GetMouseButtonUp(n) //检测鼠标按键弹起事件

Input.GetMouseButton(n) //检测鼠标持续按下的事件

 

 

GameObject

//gameObject 获取当前脚本所挂载的游戏对象

//一般来说,在属性视图中能看到或修改的属性,我们同样可以在脚本中获取并修改

gameObject属性如

1. name  、tag  、

2. gameObject.activeSelf   //获取当前游戏对象的激活状态 bool类型

3. gameObject.SetActive   //设置游戏对象的激活状态

//4. 获取游戏对象身上的组件 如

controller c = gameObject.GetComponent<objectname>();

//5. 给游戏对象添加指定类型的组件

Light l = game.AddComponent<Light>();

//6. 通过tag值查找游戏对象

GameObject g  = GameObject.FindGameObjectWithTag(“TagName”);

GameObject gg = GameObject.FindWithTag(“TagName”);

//7. 通过游戏对象名查找游戏对象

GameObject g = GameObject.Find(“Object Name”):

g.name = “改名”;

//8. 通过Tag值查找多个游戏对象

GameObject [] gs = GameObject.FindGameObjectWithTag(“Object Name”); 

 

//9. 销毁游戏对象  可加参数2:延迟时间(s)后销毁

GameObject.Destroy(gameObject,2f);

 

 

 

 

Vector

1. 一个类,表示向量,向量既有大小又有方向的量

Vector3  v = new  Vector3();

成员方法:

2. //获取V的单位向量 V的长度会变成1,但方向不变

v.Normalize();

3. //返回V方向上的单位向量,但是V本身不会发生变化

Vector3 vn = v.normalized;

4. //获取V的长度

float l = v.magnitude;

5. 类方法:

// x=0,y=1,z=0

Vector3.up 表示世界坐标系中Y轴正方向的单位向量

// x=0,y=-1,z=0

Vector3.down 表示世界坐标系中Y轴负方向的单位向量

// x=1,y=0,z=0

Vector3.right 表示世界坐标系中X轴正方向的单位向量

// x=-1,y=0,z=0

Vector3.left 表示世界坐标系中X轴负方向的单位向量

// x=0,y=0,z=1

Vector3.forward 表示世界坐标系中Z轴正方向的单位向量

// x=0,y=0,z=-1

Vector3.back 表示世界坐标系中Z轴负方向的单位向量

// x=0,y=0,z=0

Vector3.zero 表示原点

 

 6. //求两个向量的夹角 参数都是Vector的对象

float f = Vector.Angle(V1,V2);

7. //求两个向量的距离

float f = Vector.Distance(V1,V2);

8. //向量点乘

float d = Vector3.Dot (v1,v2);

//两个向量的叉积

Vector vc  = Vector3.Cross(v1,v2);

 

 

Transform

//获取当前脚本所挂载的游戏对象身上的Transform组件

//transform

1. //控制游戏对象的位置、旋转、缩放

//position  属性 - 世界坐标系中的位置

Vector3 pos = transform.position;

2. //localPosition 属性 - 局部坐标系中的位置

transform.localPosition

3. //一般不直接修改四元数 

transform.rotation

transform.localRotation

4. 快捷键:对象

Q平移 W移动 E旋转 R缩放

5. //localScale - 控制游戏对象的缩放

Vector3 v = transform.localScale;

6. //变换当前游戏对象

transform.Translate (new Vector3(0,1,0));

7. //旋转当前游戏对象

transform.Rotate (Vector.up,10f);

8. //欧拉角 - 属性(直接旋转角度,不会重复旋转)

transform.eulerAngles = new Vector(0f,45f,0f);  

9. //控制游戏对象间的父子关系

//获取/重新指定 当前游戏对象父对象的transform组件

transform.parent;

10. //获取当前游戏对象的根父对象

transform.root;

11. //获取当前游戏对象  叫做name 的子对象

transform.Find(“name”);

transform.FineChild(“name”);

 

 

Time

1. //Time类用来进行时间控制

float t = Time.time; (从游戏开始到当前所用时间)

2. //从上一帧开始到当前帧结束,这两帧之间的时间间隔

Time.deltaTime

 

3. //让当前游戏对象每秒准确地旋转 30 度

transform.Rotate(Vector3.up , Time.deltaTime * 30f);

4. //表示时间流逝的快慢

// 1 - 表示正常时间流逝

// 2- 表示时间流逝加快,是正常速度的两倍

// 0 - 表示时间停止,游戏暂停

float ts = Time.timeScale;

 

Mathf 

1. //求绝对值

int i  = Mathf.Abs(-12);

2. //求最大最小值

int m =  Mathf.Max(12,15,15,17);

int ni = Mathf.Min(12,14);

3. //三角函数

Mathf.Sin();

Mathf.Cos();

Mathf.PI();

Mathf.Sqrt(); //平方根

Prefab 预设体

例子:

public GameObject playerPrefab;  //预设体 从外面挂载进来

Vector pos = new Vector3 ();

pos.y  =  0.5;

pos.x  =  Random.Range(-5f,5f); //给一个范围随机数产生坐标

pos.z  =  Random.Range(-5f,5f); 

float angle = Random.Range.Range (0f,360f);

1. 动态添加预设体

//参数1:预设体  

参数2:  创建出的游戏对象初始位置  

参数3:  创建出的游戏对象初始旋转角度  四元数旋转角 (不需要的参数都可不加)

Instantiate (plagerPrefab , pos , Quaternion.AngleAxis (angle, Vector3.up));

2. 若要接收,Instantiate返回的类型是object,所以要转换

GameObject g =  Instantiate (plagerPrefab , pos , Quaternion.AngleAxis (angle, Vector3.up)) as GameObject;

g.AddComponent<Light>(); 可往添加组件

 

 

鼠标事件

必须物体的Collider被激活,否则无法触发 

1. 当鼠标点击下去时调用

void OnMouseDown(){}

2. 当鼠标持续按下左键不放时调用(可在物体外松开取消调用)

void OnMouseDrag(){}

3. 当鼠标取消点击时调用

void OnMouseUp(){}

4 当鼠标进入到内部时调用

void OnMouseEnter(){}

5. 当鼠标持续停留在游戏对象身上时调用

void OnMouseOver(){}

6. 当鼠标离开内部时调用

void OnMouseExit(){}

7. 当我们像点击按钮一样点击游戏对象(在对象内部松开才能生效,离开物体无效)

void OnMouseUpAsButton

 

 

 

刚体 Rigidbody

刚体使用使物体位移和transform同时使物体位移是不对的,只能使用其中一个

属性:

Mass质量

Drag空气阻力

Angular Drag角阻力(旋转时受的)

Use Gravity 重力影响

Is Kinematic  是否使用运动学

Interpolate 插值 (如物体不停的颤抖时可试用)

内插值 Interpolate

根据上一帧的位置推算这一帧的位置

外插值 Extrapolate

预测下一帧的位置推算这一帧的位置

Constrains Detection 碰撞检测

Discrete 离散碰撞检测

Continuous 连续碰撞检测 (如子弹速度太快,上下帧时已经传过障碍物,对高速运动)

Continuous Dynamic 连续动态碰撞检测 (两个都是高速的碰撞)

Constraints 约束

让物体在某个轴上无法位移

freezePosition

让物体在某个轴上无法旋转

freezeRotation

Rigidbody rb = GetComponent<Rigidbody>();

 

//添加力  力的物体上必须有刚体

要有添加爆炸力脚本的对象才会受影响

1. //给当前游戏对象施加一个力

rb.AddForce(new Vector3(0f,10f,0f));

2. //给当前游戏对象添加力矩/扭矩,扭矩可以使物体旋转

rb.AddTorque(new Vector3(0f,10f,0f));//y轴施力

3. //给游戏对象在指定的位置上添加一个力

rb.AddForceAtPosition(new Vector3(0f,10f,0f), new Vector(0.5f,0.5f,0.f));

4. //在指定位置添加一个爆炸力

//参数1:爆炸力大小       参数2:爆炸位置  参数3:爆炸范围半径

rb.AddExplosionForce(1500f, Vector.zero,4f);

 

 

Collider

发生碰撞的条件: 

1.双方都有Collider,2.至少一方有刚体, 3.两个物体之间发生相互运动

(去碰撞的物体最好要有刚体,否则可能发生穿越,无触发碰撞 )

1. //碰撞相关的三个事件

//碰撞开始时会调用一次

void OnCollisionEnter (Collision other){}

2. //当碰撞持续发生的时候调用

void OnCollisionStay (Collision other){//检测跟谁发生了碰撞

if(string.Equals (“Cube2” , other,gameObject.name))

}

3. //碰撞结束时调用一次

void OnCollisionExit (Collision other){}

Trigger

如果Collider中的 is Trigger选中了,那么该物体无法使用刚体,但能使用触发器

 

触发器事件条件

1.双方有Collider 2.一方勾选Trigger 3.一方有刚体 (或角色体Character)

4.进入触发范围后不用一定要有相对运动

触发器相关的三个事件 //如 CS进入安全区

4. //刚刚进入触发范围时调用一次

void OnTriggerEnter (Collider other){}

5. //持续待在触发范围内会一直调用

void OnTriggerStay (Collider other){}

6. //离开触发范围时会调用一次

void OnTriggerExit (Collider other){}

 

 

材质

Create -> Physic Material 只有在有Collider得物体上才能添加

Physic Material 物理材质

属性

Dynamic Friction 动摩擦力  A在B运动受到的摩擦力

Static Friction 静摩擦力

Bounciness 弹性

弹力摩擦力结合情况

Friction Combine

Bounce Combine

子属性: Average 平均值

  Minimum 最小值

  Multiply 相乘

  Maximum 最大值

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

Unity重要知识点 的相关文章

  • Unity3D中uGUI事件系统简述及使用方法总结

    Unity3D的uGUI系统的将UI可能触发的事件分为12个类型 xff0c 即EventTriggerType枚举的12个值 如下图所示 xff1a 先以PointerClick为例 这个是用于某点点击事件 其他事件都可以根据相同的办法调
  • 【Unity】SafeArea适配大小

    通过使用SafeArea 修改stretch适配类型的UI画布的Top偏移 适应安卓异型屏幕
  • 游戏开发unity UGUI知识系列:判断是否点击在UI对象上

    EventSystem current IsPointerOverGameObject 检测点击是否在ui上 通常可以用来方便判断是否点击在屏幕上 用来进行镜头左右上下的角度的调整前的判断 需要注意的是 使用EventSystem时 场景里
  • UGUI改图片:位置、尺寸(踩坑)

    另外一篇博客 UGUI图片 代码修改尺寸 锚定方式为父物体的四条边时 请见 https blog csdn net weixin 42935398 article details 107044335 目录 我的代码 问题 解决 总结 我的代
  • Unity实现一个可扩展的UGUI无限滑动列表控件

    12月20日新增 增加一个可收缩的滑动列表 适用于游戏中的任务系统 成就等 使用说明 创建时需要两个模板slot 一个是button 另一个则是btn下显示的cell 配置如下图添加ExpandableView脚本 新增的IsDefault
  • Unity ScrollView左右拖拽翻页

    ScrollView来实现左右拖拽的翻页 类似于微信 左右拖拽时候上下无法拖拽 上下拖拽的时候左右无法拖拽 并且左右拖拽的是时候 会有弹力进行对对齐 using System Collections using System Collect
  • Unity UGUI Canvas基础知识及优化

    unityUGUI源码 https github com Unity Technologies uGUI git 官方API https docs unity3d com cn 2018 4 ScriptReference Canvas h
  • Unity中的UGUI源码解析之事件系统(7)-输入模块(上)

    Unity中的UGUI源码解析之事件系统 7 输入模块 上 从今天开始 我们进入事件系统的的最后一部分 输入模块 InputModules 输入模块是事件系统的核心 是真正使用检测和调用回调的地方 输入模块主要有几个角色 分别为 BaseI
  • Unity3d + UGUI 的多分辨率适配

    原文地址 http blog csdn net dingkun520wy article details 49471789 1 Canvas的属性配置 2 Canvas Scaler
  • 【Unity】 DoTween对UI进行DoFade操作存在问题及解决办法

    Unity DoTween对UI进行DoFade操作存在问题 Unity版本 5 2 5 4 当使用this GetComponent
  • Unity UGUI 无限循环列表 ----------多功能版

    一共有四种 循环列表 如下图 1 常用循环列表 2 收展嵌套 循环列表 3 弹框 循环列表 4 翻页 循环列表 注意点 1 层次结构如下图 2 Content 和 Item 控件锚点必须为如图 使用方式 只举例常用列表 其他列表查看 GIt
  • UGUI图片跟随文本框长度改变位置

    这次要完成一个功能 需要钻石图标跟随数字的长度改变位置 之前使用了Layout Group排版 在数字改变的时候会出现一点小问题 这次使用锚点去进行跟随 设置文本框的属性 使其从右往左排版 并添加ContentSizeFitter组件 使其
  • UGUI实现背包系统

    一 项目需求 1 可以生成物品 2 提示物品相关信息 3 能拖拽背包中的物品进行交换 丢弃操作 二 实现步骤 1 背包中的物品包括各种种类 如武器 消耗品 防具等 它们具备一些相同的属性 如ID 名字 描述 购买价格 出售价格 图标等 同时
  • 检测鼠标位置是否有UI

    示例 using System using System Collections Generic using UnityEngine using UnityEngine EventSystems using UnityEngine UI p
  • Unity屏幕坐标转UI局部坐标

    RectTransformUtility ScreenPointToLocalPointInRectangle https docs unity cn cn 2019 2 ScriptReference RectTransformUtili
  • UI特效应用Mask剪裁

    公司的特效做UI特效的时候 总喜欢一些奇奇怪怪的shader 做滚动窗口的时候需要用Mask把多余位置遮住 如果里面有特效的话会像这样透出 修改shader 的代码 使其支持支持stencil 可以实现mask遮盖 加入下面的两段代码 St
  • UGUI内核大探究(九)Image与RawImage

    Image组件是UGUI里最常用的组件 可能没有之一 我们知道其实还有一个RawImage组件 那么二者的区别是什么呢 之前的文章UGUI内核大探究 八 MaskableGraphic中我们提到过 二者 连同Text 都继承自Maskabl
  • UI页面切换按钮随页面切换缩放

    选中按钮放大其余按钮缩小的 效果 using System Collections using System Collections Generic using UnityEngine public class BottomBarBtn M
  • Unity 调用系统键盘

    using System Diagnostics using UnityEngine public class KeyboardEvent MonoBehaviour private Process keyboard
  • UnityUI炸出金币再收集的特效

    完成的效果 在指定位置生成一定数量的货币ICON 然后扩散出去 等待一定时间后 汇集到指定位置 代码 using System Collections using System Collections Generic using Unity

随机推荐

  • 《机器学习实战》第四章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习
  • 统计学三大分布(卡方、t、F)即相应概率密度图的R语言实现

    三大统计分布 1 2 chi 2 2分布 设随机变量 X 1
  • Thinking in Java

    Thinking in Java Java编程思想 学习总结心得 一 前序 学习java也已经有大约两年时间 但大多数断断续续 零散没有系统学习 这次经多方推荐购买了一本java学习必读书籍 Thinking in Java 学习之余将书中
  • python3 [入门基础实战] 爬虫入门之智联招聘的学习(一)

    老实说 懵逼啊 这次爬取的是智联招聘上的求职数据 虽然没有仔细正确核对一下数据是否具有重复性 随机抽查了些 数据大部分还是能对上来的 这次爬取的智联招聘上的数据90页 每页60条 主要抓取的是android开发工程的数据 抓取的数据为全国的
  • 行业权威来揭秘,商用PC为什么首选12代酷睿

    第12代酷睿处理器可以提供更卓越的性能 凭借架构先进性让商用台式机和笔记本电脑为用户带来更好的体验 帮助企业和员工效率倍增 作者 九月 来源 PConline 想要让办公效率进一步提升 一台强大的PC设备是必不可少的生产力和内容创作工具 而
  • SQL Server如何建立表关系

    SQL Server怎么建立关系表 用教师表和学生表举例 两表建立关系之前 要检查连接的条件满足否 比如学生表里的外键 教师ID 要和教师表里的主键 教师ID 的数据类型相同 也就是建立关系的条件数据类型要相同 确认条件满足之后开始建立关系
  • 对象式单片机外部模块驱动编写详解——DAC8552为例

    对象式单片机外部模块驱动编写详解 DAC8552为例 对象式驱动原理 DAC8552基本介绍 DAC8552驱动抽象 源码文件及其解释 参考资料 具体的代码和例程请参照以下GitHub仓库 记得给我star哦 https github co
  • 区块链能提供有效的身份管理?

    随着身份盗窃和数据泄露在世界各地越来越多的情况下 身份验证是一个主要问题 对访问数据的人进行身份验证实际上是他们要求的 每天 数以百万计的人在网上进行不同的活动 从研究一个学术话题 到购买新的项目 到在社交媒体平台上发表评论 甚至进行不同的
  • /etc/init.d

    etc init d目录在Linux系统中可是大名鼎鼎 它只负责一件事情 但却涉及到全系统 它包含系统中各种服务的start stop脚本 从acpid到x11 common 其重要性可见一斑 init d 初始化脚本称之为System V
  • 如何生成序号_合并单元格自动添加序号,还在手动输入就out了,学会三组函数公式一秒搞定...

    相信许多同学在用Excel表格登记各类数据的时候 为了规范表格我们经常会用到序号来进行数据标记 许多朋友在更新序号的时候 基本都是手动输入1 2 3等等 然后手动往下拖动 但是这样数据量比较大的时候 就会比较麻烦 而且如果数据是有合并单元格
  • React-Native使用react-native-community/art实现水波纹、音频波动效果

    效果如下 可以通过改变volume值实现动态效果 贴组件代码 复制就能用 依赖package json react native community art 1 1 2 react native 0 61 4 组件代码DancingLine
  • 第一次竞赛-B.连接竹竿

    B 连接竹竿 Alice从市场上买了N根竹竿 每根竹竿都以 节 为单位 这些竹竿中最短的有A节 最长的有B节 其余竹竿各有长短 每根竿的节数也必定在 A B 范围内 现在Alice希望将这些竹竿用连接部件全部接成一根长竹竿 连接部件的长度忽
  • hive详解——RANK()、DENSE_RANK()、ROW_NUMBER()

    概念 RANK 排序相同时会重复 总数不会变 DENSE RANK 排序相同时会重复 总数会减少 ROW NUMBER 会根据顺序排算 实操讲解 现在有一张score表 做查询操作 SELECT RANK over PARTITION BY
  • 初识C++

    目录 前言 什么是C 1 第一个关键字 namespace 1 namespace的用处 2 如果使用命名空间中的变量和函数 2 C 的输入和输出函数 3 缺省参数 4 函数重载 5 引用 1 初识引用 2 引用的类型 3 引用的特性 4
  • 微信小程序领取查看优惠券,会员卡总结

    又见面了 新项目新需求 这次谈谈小程序微信卡券领卡到查看卡券的功能 在做之前 脑子一头雾水 网上查了资料 基本都是领取卡券的介绍 以为很难实现呢 其实主要工作还是在后台配置以及接口处理 前端的工作量不多 主要就是调取小程序提供的卡券接口 a
  • Gephi入学教程基础记录

    Gephi入学教程基础记录 Gephi版本0 8 1 1 CSV数据输入 1 1 中文显示问题 1 2 标签设置 2 自动生成数据 3 编辑工具介绍 1 节点的移动 2 节点的放大和缩小 3 调整节点颜色 4 边的粗细的调整 6 节点的编辑
  • (可能是)完美解决WSL2重启变IP问题

    WSL2的升级对比WSL1 IO升级是巨大的 以及完整的Linux内核 等等都是完美的Linux发行版 Windows10 解决方法有几步一步一步解决 编辑bat脚本 此方法在 microsoft WSL issues 418 获得 开机启
  • Anlios装grouplist 组件之后报错,安装tiger-vncserver

    因为之前升级了一个epel release源 然后containerd也装进去了 但是版本太低 然后以为是runc挡住了 发现没有runc 删完了containerd就可以装了 rpm ivh http mirrors wlnmp com
  • 用数组实现队列和循环队列

    1 先用数组实现一个队列 package com lv queue import java util Scanner public class ArrayQueueDemo public static void main String ar
  • Unity重要知识点

    脚本生命周期 每当脚本被加载时调用一次 1 在Awake中做一些初始化操作 void Awake 初始化public成员 2 在每次激活脚步时调用 void OnEnable 在第一次调用Update之前调用一次Start 即使取消激活 再