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
对付
相关文章推荐
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
- unity游戏在安卓按home或者锁屏键后不能后台运行的结局方案
- unity调android ios 浏览器 uniwebview2.1使用
- 京城游戏人-Day6:Unity 点击坐标与世界坐标
- 【Unity】关于Unity切换手机前后相机
- Unity3d爬坑记—'physicMaterial' is not a member of 'UnityEngine.TerrainData'. 报错!!
- Unity UGUI —— 无限循环List(转载)
- 简单总结Unity使用AssetDatabase编辑器资源管理
- PlayerPrefs存储数据在本地的存储位置
- Unity快速实现回合制游戏
- unity语言本地化插件 I2 Location2.5.6使用简单记录
- unity3d之VS2013默认编辑器问题
- 由Unity5.3.3f1引发的一场血案
- unity3d 第八天
- unity3d接入支付宝 iOS篇(二)
- 【Unity Shader】第一节 最基本的shader---漫反射
- unity3d接入支付宝 iOS篇(一)
- 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC与ECharts
- RPG 游戏 unity ngui 实现2D名字牌血条等功能
- 遮挡剔除 Unity3d官方教程