Unity 重要基础知识点
这是两个月前的学习记录,发出来了下,如果有误欢迎大家指出:
脚本生命周期
//每当脚本被加载时调用一次
// 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 最大值
Unity 重要基础知识点的更多相关文章
- unity常用小知识点
感觉自己抑郁变得更严重了,超级敏感,经常想崩溃大哭,睡眠超差,实在不想药物治疗,多看看书,多约约朋友,多出去走走. 来几句鸡汤吧,人一定要活得明白一点,任何关系都不要不清不楚,说不定最后受伤的就是自个 ...
- fastclick 源码注解及一些基础知识点
在移动端,网页上的点击穿透问题导致了非常糟糕的用户体验.那么该如何解决这个问题呢? 问题产生的原因 移动端浏览器的点击事件存在300ms的延迟执行,这个延迟是由于移动端需要通过在这个时间段用户是否两次 ...
- .NET基础知识点
.NET基础知识点 l .Net平台 .Net FrameWork框架 l .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转 l 两种交 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript开发者常忽略或误用的七个基础知识点
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript语言基础知识点图示(转)
一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.Ja ...
- JavaScript 语言基础知识点总结
网上找到的一份JavaScript 语言基础知识点总结,还不错,挺全面的. (来自:http://t.cn/zjbXMmi @刘巍峰 分享 )
- c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
随机推荐
- 【Win 10 应用开发】Web授权示例:获取新浪微博的授权码
在使用类似微博的开放API的时候,会涉及到授权的问题,就拿微博来说,当用户在你的应用中需要调用微博API来处理一些事情时,你首先要让用户登录微博,得到用户授权后,才能调用微博API. 授权通常通过一个 ...
- VS2010开发工具使用技巧<之简单讲解>
俗语云:工欲善其事必先利其器! 1.代码放大 效果:放大前----------------------------------------------------------------->放大 ...
- HTTP的长连接和短连接
本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...
- Android混合开发之WebView使用总结
前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...
- 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标
我们都知道,在Windows Server 2012系列的服务器版本中都已经引入了Modern的现代界面作为默认的用户交互界面,同时满足视觉一致化,新版的服务器管理程序也做成了扁平化.因此传统的计算机 ...
- niginx代理配置
常用关键词:rewrite.proxy_pass location ^~ /address/ { proxy_set_header Host xx.sohu.com; #设置header proxy_ ...
- 利用C#开发移动跨平台Hybrid App(一):从Native端聊Hybrid的实现
0x00 前言 前一段时间分别读了两篇博客,分别是叶小钗兄的<浅谈Hybrid技术的设计与实现>以及徐磊哥的<从技术经理的角度算一算,如何可以多快好省的做个app>.受到了很多 ...
- SignalR系列续集[系列6:使用自己的连接ID]
目录 SignalR系列目录 前言 老规矩,前言~,在此先道个歉,之前的1-5对很多细节问题都讲的不是很详细,也有很多人在QQ或者博客问我一些问题 所以,特开了这个续集.. - -, 讲一些大家在开发 ...
- 认识W3C标准盒子模型,理解外边距叠加
概述: 注:加粗斜体字是非常重要的概念,决定着你是不是能看懂那句话,所以不懂的请一定要搜索一下. 页面上的每个元素,都在一个矩形框里. 每个矩形框都是一个盒模型. 每个盒模型都由内容区域(co ...
- scikit-learn一般实例之八:多标签分类
本例模拟一个多标签文档分类问题.数据集基于下面的处理随机生成: 选取标签的数目:泊松(n~Poisson,n_labels) n次,选取类别C:多项式(c~Multinomial,theta) 选取文 ...