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

Unity开发篇(1)

2016-07-19 16:06 549 查看
Transform.TransformPoint //可以将坐标点从局部坐标系转换到全局坐标系
Transform.InverseTransformPoint //可以将坐标点从全局坐标转换到局部坐标系
Transform.TransformDirection 			// 对向量从局部坐标转换到全局坐标
Transform.InverseTransformDirection     // 对向量从全局坐标转换到局部坐标




向量 

Vector3类的常用成员变量和方法

normalized 得到单位化后的向量(只读)

magnitude 得到向量长度(只读)

sqrmagnitude 得到向量长度平方(只读)

Cross

Dot

Project 计算向量在另一向量的投影

Angle返回两个向量之间的夹角

Distance 返回两个向量之间的距离

operator+ 向量相加

operator- 向量相减

operator* 向量乘以标量

operator/ 向量除以标量

operator ==

operator !=

GameObject.Find(" ")// 同级目录

Vector3.Lerp()//实现缓动效果

矩阵(Matrix)

平移矩阵:T(p) =  1   0    0    0

                               0   1   0    0

                               0     0    1   0

                               Px  Py  Pz  1

旋转矩阵: X(x)   = 1    0         0       0

                            0   cosx   sinx    0

                            0    -sinx  cosx     0

                            0       0       0       1

缩放矩阵      S(q) =  q(x)   0      0        0

                               0    q(y)    0        0

                               0     0      q(z)     0

                               0    0       0       1

其次坐标:就是将原来三维的向量用四维向量来表示。

引入其次坐标的目的是:

1,更好区分向量和点。三维空间中三维坐标既可以表示点也可以表示向量;但是引入其次坐标,用(x,y,z,1)表示坐标点,用(x,y,z,0)来表示向量。

2,统一用矩阵乘法表示平移、旋转、缩放变换。使用3x3矩阵,矩阵乘法只能表示旋转和缩放,不能表示平移。而在4x4其次空间中,可以使用4x4的其次矩阵来统一表示平移,旋转和缩放变量。

3,当分量w=0可以用来表示无穷远的点。

四元数:

3种旋转的表示方法:

                                       欧拉角                                   矩阵                                                     四元数

旋转一个位置点                不支持                                  支持                                                      不支持

增量旋转                          不支持                                    支持,速度慢                                       支持,速度快

平滑插值                             支持                                       基本不支持                                      支持

内存占用                           3个数值                              16个数值                                                4个数值

表达是否唯一                     无数种组合                           唯一                                                      互为负的两种表示

可能会遇到的问题              万向锁                              矩阵蠕变                                                    误差累积导致非法

Quaternion类的变量列表

x

y

z

w

this[int index]

eulerAngles 返回表示该旋转的欧拉角

identiy 返回同一象限的四元素,即该四元数表示没有旋转。

函数列表:

Set    设置Quaternion的x,y,z,w分量;

ToAngleAxis 将四元数转换成一个角-轴表示的旋转

SetFromToRotation 设置一个四元数表示fromDirection到toDirection的旋转

SetLookRotation 设置一个四元数表示朝向为forward,上方向为up的旋转

ToString  将四元数转成格式化的字符串

operator* 连接两个旋转,该相乘操作的结果的作用相当于依次应用两个旋转操作

operator==

operator!=

Dot 两个旋转点乘

AngleAxis 根据旋转角和旋转轴创建一个四元数

FromToRotation 生成一个四元数 表示fromDirection到toDirection的旋转

LookRotation 生成一个四元数表示朝向forward,上方向为up的旋转

Slerp 根据t值在四元数from和to之间进行球形插值

Lerp  根据t值在四元数from和to之间进行插值,并将结果规范化

RotateTowards 将旋转from变到旋转to

Inverse 返回旋转的逆

Angle 返回a和b两个旋转之间的夹角角度

Euler   返回一个先沿z轴旋转z角度,然后沿x轴旋转x角度,最后沿y轴旋转y角度的旋转

For example:

用键盘上下左右控制sphere,cube一直朝向sphere;

using UnityEngine;
using System.Collections;

public class MotionScript : MonoBehaviour {

public float speed = 3f;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
transform.Translate(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, 0);
transform.Translate(0, Input.GetAxis("Vertical") * speed * Time.deltaTime, 0);
}
}

using UnityEngine;
using System.Collections;

public class LookAsScript : MonoBehaviour {

public Transform target;

// Use this for initialization
void Start () {
target = GameObject.Find("Sphere").transform;
}

// Update is called once per frame
void Update () {
Vector3 relativePos = target.position - transform.position;
transform.rotation = Quaternion.LookRotation(relativePos);
}
}


c#脚本编写注意:

1,凡是需要添加到游戏对象的c#脚本类都需要直接或间接地从MonoBehaviour类继承;

2,避免使用构造函数;

3,类名要与脚本文件名相同,这里的类是从MonoBehaviour继承的行为类,普通c#类可以随便命名;

4,协同函数Coroutines返回类型必须是IEnumerator,并且用yield return 替代yield。

访问游戏对象和组件

MonoBehaviour类

事件响应函数   

OnMouseEnter   鼠标移入GUI控件或者碰撞体时调用;

OnMouseOver    鼠标停留在GUI控件或者碰撞体时调用;

OnMouseExit       鼠标移出GUI控件或者碰撞体时调用;

OnMouseDown  鼠标在GUI控件或者碰撞体上按时调用;

OnMouseUp       鼠标按键释放时调用;

OnTriggerEnter  当其他碰撞体进入触发器时调用;

OnTriggerExit     当其他碰撞体离开触发器时调用;

OnTriggerStay    当其他碰撞体停留在触发器时调用;

OnCollisionEnter 当其他碰撞体或者刚体与其他碰撞体或者刚体接触时调用;

OnCollisionExit    当其他碰撞体或者刚体与其他碰撞体或者刚体停止接触时调用;

OnCollisionStay   当其他碰撞体或者刚体与其他碰撞体或者刚体保持接触时调用;

OnControllerColliderHit 当控制器移动时与碰撞体发生碰撞时调用;

OnBecameVisible 对于任意一个相机可用时调用;

OnBecameInvisible 对于任意一个相机不可用时调用;

OnEnable 对象启用或者激活时调用;

OnDisable 对象禁用或者取消激活时调用;

OnDestroy 脚本销毁时调用;

OnGUI 渲染GUI 和处理GUI消息时调用;

访问游戏对象:

1,通过名称来查找

GameObject.Find

若存在,返回该对象的引用;若不存在,返回NULL;若存在多个,返回第一个对象的引用。

GameObject player;

GameObject obj;

void Start()
{
obj = GameObject.Find("MainHero");
}


2,通过标签查找

GameObject.FindWithTag 

若场景中存在该标签的游戏对象,那么返回该对象的引用;否则返回null;若多个对象使用同一标签,那么返回第一个对象的引用;若场景中有多个相同标签的游戏对象,可以通过你FindGameObjectsWithTag()方法获取游戏对象数组。

GameObject player;

GameObject[] enemies;

void Start()
{
player = GameObject.FindWithTag("Player");
enemies = GameObject.FindWithTag("Player");
}


19.5.3

对付
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: