学习https://blog.csdn.net/VRunSoftYanlz/article/details/78881752

1.Component类
gameObject:组件附加的游戏对象。组件总是被附加到游戏对象上
transform:附加到此游戏对象Transform组件
tag:游戏对象的标签
collider:附加到此游戏对象的collider组件
renderer:附加到此游戏对象的Renderer组件
rigidbody:附加到此游戏对象的Rigidbody组件
GetComponent:如果游戏对象有附加type组件,则返回
GetComponentInChildren:返回此游戏对象上type类型的组件或任何他的子对象,使用深度优先搜索
GetComponents:返回此游戏对象type类型的所有组件
GetComponentsInChildren:返回此游戏对象与其子对象所有type类型的所有组件

2.GameObject类
通过tag获取游戏物体
static GameObject FindWithTag(string tag)
通过名字获取游戏物体
static GameObject Find(string name)

常用属性和方法
tag:游戏物体的tag
name:游戏物体的name
FindGameObjectWithTag(string tag):静态方法,返回所有tag标识的物体,返回值是个数组
T GetComponent<T>():泛型实例方法,得到T类型的组件
SetActive(bool Value):实例方法,设置游戏物体是否是活动的
FindWithTag(string tag):静态方法,得到tag标识的游戏物体

3.Transform类
负责游戏对象的变换(位置,旋转,缩放)
维持父子关系

常用属性
position:世界坐标系中的transform位置
localPosition:相对于父物体的位置
eulerAngles:欧拉角,旋转的角度
rotation:世界坐标系中的变换的四元数
parent:物体父物体的Transform组件
root:物体最高层次父物体的Tranform组件

常用方法
void Translate(Vector3 translation):使当前对象朝translate
void Rotate(Vector3 eulerAngles):按给定的欧拉角旋转
void Rotate(Vector3 point, Vector3 axis, float angle): 绕point点沿axis轴旋转angle度
Transform Find(string name):通过名字查找子物体
void LookAt(Transform target):使物体朝向target点

4.Vector3类
点乘,又乘点积或内积
(x1,y1,z1)*(x2,y2,z2) = x1*x2+y1*y2+z1*z2
几何意义:a*b = |a|*|b|*cos<a,b>
API: float dot = Vector3.Dot(Va, Vb);
点乘应用:
对于标准化过的向量, 点乘结果对于两向量夹角的余弦值
float dot = Vector3.Dot(a.normalized, b.normalized);
float angle = Mathf.Acos(dot)*Mathf.Rad2Deg;

叉乘,又乘叉积或外积
(x1,y1,z1)X(x2,y2,z2) = (y1*z2-y2*z1, x2*z1-x1*z2, x1*y2-x2*y1)
几何意义,结果为两个向量所组成面的垂直向量,
API: Vector3 v = Vector3.Cross(a,b);
叉乘应用:
创建垂直于平面的向量
判断两条向量的相对位置

Vector3是封装了向量运算相关变量和方法的结构体
normalized:标准化向量
magnitude: 向量长度
sqrMagnitude:向量长度平方(开方?)
forward: Vector(0,0,1)的简码
up: Vector(0,1,0)的简码
right: Vector(1,0,0)的简码
void Normalized() 标准化向量
static Vector3 Lerp(Vector3 from, Vector3 to, float t):两个向量之间的线性差值
static float Angle(Vector3 a, Vector3 b):两个向量的夹角
static float Distance(Vector3 a, Vector3 b): 两向量之间的距离

5.Time类
time:从游戏开始到现在的所用时间
deltaTime:获取上一次Update()方法执行的时间到本次执行Update()方法时间的差值
fixedDeltaTime:在物理和其他固定帧速率进行更新上一帧所消耗的时间,
timeScale:表示事件缩放,正常为1

6.Mathf类
Mathf封装了常见的数学计算方法的结构体
Lerp:两个浮点数之间进行插值
Clamp:返回一个限制值
sin,cos,abs,max, min,sqr,pi

7.Translate
transform.Translate(transform.forward*Time.deltaTime); 移动方向为(两向量相加):自身在世界坐标系的方向+自身的前方方向

transform.Translate(transform.position*Time.deltaTime); 移动方向为(单向量)自身在世界坐标系的方向向量

transform.Translate(target.forward*Time.deltaTime); 移动方向为(单向量)目标的前方

transform.Translate(target.position*Time.deltaTime); 移动方向为(单向量)目标在世界坐标系的方向向量

8.GameObject, gameObject, Transform, transform区别和联系
GameObject是类型,gameObject是一个对象
Transform是一个类,原来描述物体的位置,大小,旋转
transform是Transform类的对象,依附于每一个物体,也就是当前游戏对象的一个组件

transform:当前游戏对象的transform组件
gameObject:当前游戏对象的实例

在unity中每个游戏对象都是一个gameObject, monodevelop中的gameObject就代表着脚本所依附的对象。每个gameObject都包含各种各样的组件,由此可见transform是gameObject的一个组件,控制着gameObject的位置,旋转,和缩放,而且每个gameObject有且仅有一个transform组件

gameObject.transform和transform.gameObject
gameObject.transform,是获取当前游戏对象的transform组件,所以在start()中,gameObject.transform和this.transform,都是指向同一个对象
transform.gameObject, 获取当前gameObject组件所在的gameObject,所以二者可以一直互相引用下去

9.对Vector3.Lerp插值的理解
游戏中有些跟随动作不够圆滑或者需要一个缓冲效果,这时一般会考虑到插值(比如摄像机跟随主角)
插值是数学上的一个概念,公式表示就是 a + (b-a)*t, 这个也就是lerp的返回值(用这个公式分别算出x,y,z)

deltaTime就是这一帧到下一帧经历的时间

10.四元数quaternion和旋转
旋转是三种坐标变换(缩放,平移,旋转)最复杂的一种
三种旋转的方法:矩阵旋转,欧拉旋转,四元数旋转
四元数本质上是一种高阶复数,是一个四维空间, 相当于复数的二维空间
三种旋转方式(矩阵旋转,欧拉旋转,四元数旋转)的优缺点:
矩阵旋转: 旋转轴可以是任意向量
缺点: 旋转只需要一个向量和一个角度,4个值的信息,但矩阵法使用了16个元素
欧拉旋转: 容易理解,形象直观,表示方便,只需要3个值(分别对应x,y,z的旋转角度)
缺点: 要按照一个固定的坐标轴顺序旋转,否则造成不同的结果。
会造成万向节锁现象。
四元数旋转:可以避免万向节锁现象,只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高
缺点: 理解困难,不直观

11.用点乘和叉乘来判断物体与人物的相对位置
用点乘来判断物体是在人物的前方还是后方
用叉乘来判断在人物的左手边还是右手边

12.预设体
预设体是一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复使用,相同的游戏对象可以通过一个预设体来创建,此过程可以理解为实例化。
把一个游戏对象从层级视窗拖到工程视窗后就会生成一个预设体

prefab:通过预设体创建的游戏对象会在Inspector视窗出现prefab
select:点击select可以选中创建该物体的预设体
revert:更改实例化后的游戏物体,点击revert会取消更改
apply:将该对象的信息同步到预设体

13.多种移动方式参考
(1)transform.position
transform.position += Vector3.forward*Time.deltaTime*5;

(2)Translate
transform.Translate(Vector3.forward*5*Time.deltaTime, target.transform)

(3)Lerp
transform.position = Vector3.Lerp(transform.position, target.position, 0.5f*Time.deltaTime)

(4)获取输入设备的横轴,纵轴
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
transform.position += new Vector3(hor, 0, ver)*Time.deltaTime*5f;

(5)刚体
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
rig.AddForce(new Vector3(hor, 0, ver)*5f*Time.deltaTime);

(6)Vector3.MoveTowards();
transform.position = Vector3.MoveTowards(transform.position, target.position, 5f*Time.deltaTime);

(7)SmoothDamp();
Mathf.SmoothDamp(); //角色控制器

1.人机交互
Input类是输入系统的接口,使用这个类能够读取输入管理器设置的案件,以及访问移动设备的多点触控或加速感应数据,可以通过该列来实现外部设备控制游戏场景里面的物体

键盘输入的常用方法:
GetKey() 按键按下期间返回true
GetKeyDown() 按键按下的第一帧返回true
GetKeyUp() 按键松开的第一帧返回true

GetAxis()

2.碰撞器(Collider)
OnMouseDown 鼠标在Collider之上,按下鼠标,事件被触发
OnMouseDrag 鼠标在Collider之上,拖动鼠标,事件被触发
OnMouseEnter 移动鼠标进入Collider区域,事件被触发
OnMouseExit 移动鼠标移出Collider区域,事件被触发
OnMouseOver 鼠标在Collider之上,每帧都会调用事件
OnMouseUp 当鼠标弹起的时候,事件被触发
OnMouseUpAsButton 当鼠标在同一个Collider上,按下又弹起 触发该事件

3.刚体(Rigidbody)
常用属性:
velocity 刚体的速度
angularVelocity 刚体的角速度
drag 物体的阻力
angularDrag 物体的角阻力
mass 物体的质量
useGravity 是否受重力影响
isKinematic 是否使用动力学
freezeRotation 是否冻结旋转
collisionDetectionMode 碰撞检测模式
position 刚体位置
rotation 刚体旋转
注:所有组件属性获取方法:
rid = GetComponent<Rigidbody>(); print(rid.mass);

常用方法:
AddForce 给刚体添加一个力
AddExplosionForce 给刚体添加一个力,模拟爆炸效果
AddForceAtPosition 在指定位置添加一个力
AddRelativeForce 添加相对力,相对于坐标系统
AddRelativeTorque 相对于他的局部坐标系统添加力矩

4.碰撞检测(Collider + Rigidbody)
条件1 两个物体都有Collider
条件2 至少有一个带有Rigidbody
条件3 两个物体有相对运动

碰撞回调方法
OnCollisionEnter()、OnCollisionStay()、OnCollisionExit()

5.射线(Ray)
射线创建
public Ray(Vector3 orgin, Vector3 direction);
Ray ray = new Ray(transform.position, transform.forward);

射线碰撞的应用:使用Physics类的Raycast()方法实现射线碰撞检测功能
bool Raycast(Ray ray, out RaycastHit hitinfo);

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition)

Unity学习之路——主要类的更多相关文章

  1. [原创]java WEB学习笔记57:Struts2学习之路---ActionSupport类的说明

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. java学习之路--String类的基本方法

    String类常见的功能 获取 1.1 字符串中包含的字符数,也就是获取字符串的长度:int length(); 1.2 根据位置获取某个位置上的字符:char charAt(int index) 1 ...

  3. Unity学习之路——C#相关

    1.C#数组数组定义 int[] number; float[] score; string[] names;动态初始化,借助new运算符为数组元素分配空间int[] Array = new int[ ...

  4. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  6. Qt 学习之路 2(73):Qt 线程相关类

    Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类  豆子  2013年11月26日  Qt 学习之路 2  7条评论 希 ...

  7. [EntLib]微软企业库5.0 学习之路——第一步、基本入门

    话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...

  8. 8年,从2D到3D,我的学习之路

    Mickey 写了一篇 <一个本科毕业生创业两年的感悟>,从他的视角,总结了我们合作的两年经历. 我也来写一篇,介绍我的学习之路,希望对大家有所帮助,谢谢大家- 我的学习方法 1.直接从0 ...

  9. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

随机推荐

  1. HTTPRunner实践二——数据驱动

    基于文档http://cn.httprunner.org/advanced/data-driven/ 场景一:用例集+独立参数+参数列表 1.原始用例文件savePatient_01.yml - co ...

  2. 剑指Offer的学习笔记(C#篇)-- 二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  3. 【手撸一个ORM】第四步、Expression(表达式目录树)扩展

    到这里,Orm的基架已经搭起来了,接下来就是激动人心的部分,表达式目录树转Sql语句,SqlDataReader转数据实体等等,但是在这之前,我们需要扩展下表达式目录树的方法,以方便后面的相关操作. ...

  4. NET Core 防止跨站请求

    ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击 什么是反伪造攻击? 跨站点请求伪造(也称为XSRF或CSRF,发音为see-surf)是对Web托管应用程序的攻击,因为恶意网站可 ...

  5. (转)Linux下java进程CPU占用率高-分析方法

    Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...

  6. 基于CDH5.7.x Kylin部署

    配置目标文件为 /etc/profile #Kylin exportKYLIN_HOME=/opt/apache-kylin-1.5.4-cdh5.7-bin #Hadoop export HBASE ...

  7. 汉柏杯&&政治生日6月5日&&端午节

    (一)汉柏杯 前不久汉柏杯2019年计算机设计大赛由我校承办,参加了软件应用开发组竞赛.开发了一个基于微信公众号的求职招聘系统,虽然很low但是貌似还是进了国赛,大概八月十号去安徽芜湖参加国赛决赛.据 ...

  8. js 回车提交表单

    一.整个页面用一个回车提交事件: <input type="button" value="回车提交" id="auto" onclic ...

  9. .net的基础知识点

    在这个It市场都是风云变化的,都是又市场供需来定的,当年iOS火的一塌糊涂的,现在也出现找不到工作的,满地的出入门者,我就属于其中一个,在一个逼不得已的情况下,开始转行做.net ,我相信当年的很多. ...

  10. js浮点数乘除法

    JS在处理浮点数计算时经常会遇到精度的问题,上一篇博客封装了JS浮点数加减法的方法,这一次来封装一下js浮点数乘除法运算. 其实浮点除法的封装跟加减法的封装原理是一样,只是在第一次计算完后会再复位小数 ...