您的位置:首页 > 移动开发 > Unity3D

2.2 Unity面向组件

2017-08-23 22:33 106 查看
day2 面向组件开发
1,Unity组件开发
A,工程与应用程序
Unity下有四个文件
Assets:里面存放的是项目所需要的资源;
Library:里面存放的是所需要的库文件;

ProjectSettings:里面存放的是工程设置文件;

Temp:里面存放的是临时文件;

B,工程,场景,游戏对象和组件的关系
工程(Project)->场景(Sence)->游戏对象(GameObject)
->组件(Component)

C,Unity组件开发思想
游戏物体想要实现什么样的功能,只需要添加相 对应的组件即可

D,脚本组件开发工具
Edit—Preferences— External Tools—External Script Editor

E,Unity脚本组件
1,Unity脚本类
a,宏观控制类 b,游戏对象类 c,组件类 d,资源类
2,脚本周期
初始阶段:
Awake()唤醒:当物体载入时立即调用1次,常用于在游戏开始前进 行初始化,可以判断当满足某种条件执行此脚本this.enable=true。
OnEnable()当可用:每当脚本对象启用时调用。

Start()开始:物体载入且脚本对象启用时被调用1次。常用于数据 或游戏逻辑初始化,执行时机晚于Awake。

物理阶段:
FixedUpdate()固定更新:脚本启用后,固定时间被调用,适用于 对游戏对象做物理操作,例如移动等。

设置更新频率:”Edit”—>”Project Setting”—>”Time”— >”Fixed Timestep”值,默认为0.02s。

游戏逻辑:
Update()更新:脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关。

LateUpdate()延迟更新:在Update函数被调用后执行,适用于跟随 逻辑。

3,调试打印:
常用打印消息的方式:一种是print,一种是Debug.Log。

print方法:它是MonoBehaviour 类的成员。 Debug方法:则是一个独立的、密闭的类。 因此,当一个脚本继承MonoBehaviour时,才可以使用print方法, 而Debug任何地方都可以,故建议使用Debug.Log()方法。

4,常用类(API(Application Programming Interface)应口程序编程接口):
Component类

gameObject : 组件附加的游戏对象。组件总是被附加到游戏对象上。

transform : 附加到此游戏对象Transform组件(如果没有则为空)。

tag : 此游戏对象的标签。

collider : 附加到此游戏对象的Collider (如无附加则为空)。

renderer :附加到此游戏对象Renderer组件(如果没有则为空)。

rigidbody :附加到此游戏对象Rigidbody组件(如果没有则为空)。

GetComponent :如果游戏对象有附加type类型的组件,则返回,如果没有则为空。

GetComponentInChildren :返回此游戏对象上type类型的组件或任何它的子对象,使用深度首先搜索。
GetComponents: 返回此对象type类型的所有组件。

GetComponentsInChildren :返回此游戏对象与其子对象所有type类型的组件

GameObject类
1,脚本中得到物体
通过标签得到游戏物体 : GameObject.FindWithTag(“Player”);
通过name得到游戏物体 :GameObject.Find(“char_ethan”);
2,常用属性和方法
tag 可读写属性,游戏物体的tag

name 可读写属性,游戏物体的name
FindGameObjectsWithTag(string tag) 静态方法,返回所有tag标识的物体,返回值是个数组

T GetComponent() 泛型实例方法,得到T类型的组件(强烈建议使用)

SetActive(bool value) 实例方法,设置游戏物体是否是活动的
FindWithTag (string tag) 静态方法,得到tag标识的游戏物体

Transform类
position 世界坐标系中transform的位置

localPosition 相对于父物体的位置

eulerAngles 欧拉角,旋转的角度
rotation 世界坐标系中变换的四元数
parent 物体父物体的Transform组件
root 物体最高层次父物体的Transform组件
void Translate(Vector3 translation) 使当前对象朝translation
void Rotate(Vector3 eulerAngles) 按给定的欧拉角进行旋转
void RotateAround(Vector3 point, Vector3 axis, float angle) 绕point点沿axis轴旋转angle度

Transform Find(string name) 通过名字查找子物体
void LookAt(Transform target) 使物体朝向target点

Vector3(Vector3是封装了向量运算相关变量和方法的结构体)
normalized 标准化向量,方向不变,长度为1(只读)

magnitude 向量长度(只读)

sqrMagnitude 向量长度平方(只读)

forward : Vector3(0, 0, 1)的简码,Z轴正方向

up : Vector3(0, 1, 0)的简码,Y轴正方向

right :Vector3(1, 0, 0)的简码,X轴正方向
void Normalize() 标准化向量,长度为1

static Vector3 Lerp(Vector3 from, Vector3 to, float t) 两个向量之间的线性差值

static float Angle(Vector3 from, Vector3 to) 两个向量之间的夹角
static float Distance(Vector3 a, Vector3 b) 两向量之间的距离

Quaternion(四元数)
identity 该四元数无旋转,常用在代码创建对象

LookRotation 创建一个旋转,沿着forward(z轴)并且头部沿 着upwards(y轴)的约束注视

*实例:
this.transform.rotation *= Quaternion.Euler(0,1,0); —可使物体沿坐标Y轴旋转

*Quaternion.AngleAxis(90, Vector3.right);

Time类:
time 从游戏开始到现在所用的时间(只读)

deltaTime 获取上一次Update()方法执行的时间到本次执行

Update() 方法时间的差值

fixedDeltaTime 在物理和其他固定帧速率进行更新上一帧所消耗的时间, 以秒计算

timeScale 表示时间缩放,正常时间为1

Mathf类:
Lerp 两个浮点数之间进行插值

Clamp 返回一个限制值

Sin 计算并返回浮点型的正弦值

Cos 计算并返回浮点型的余弦值

Abs 计算并返回指定参数的绝对值
Max 返回两个值之中最大的值

Min 返回两个值之中最小的值

Sqr 返回平方根

PI 圆周率

*** 预设体(很重要)
预设体是一个游戏对象与其组件的 集合,目的是使游戏对象的资源能够被重复使用,相同的游戏对象可以通 过一个预设体来创建,此过程可以理 解为实例化。
Instantiate(Object original, Vector3 position, Quaternion rotation);

注:记住一定要记得Apply否则更改无效.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐