欢迎来到unity学习、unity培训,这里有很多U3D资源、U3D培训视频、U3D教程,我们致力于打造业内unity3d培训、学习第一品牌
今天总结一下上周学习的知识。
坐标系:
世界坐标系与本地坐标系:所有物体的世界坐标系都是相同的、不会改变。每个物体都有一个本地坐标当物体旋转时,本地坐标系统也会跟着物体一起旋转。World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
常用的必然事件:
在Unity的脚本中,可以定义一些特定的函数,这些函数会在满足某些条件时由Unity自动调用,它们被称为必然事件(Certain Events)。
1)、Awake():唤醒脚本,此方法为系统执行的第一个方法,用于脚本的初始化,在脚本的生命周期中只执行一次。
2)、Update():正常更新,用于更新逻辑。每创建一个脚本,脚本中都会默认添加这个方法。此方法每帧都会由系统自动调用一次。
3)、Start():此方法在Awake()方法之后,Update()方法之前执行,并且只执行一次
4)、LateUpdate():此方法在Update()方法执行后调用,同样每一帧都调用。
5)、FixedUpdate():固定更新,更新频率为0.02s
6)、OnGUI(): OnGUI()在每一帧都会由系统自动调用一次,渲染和处理GUI事件时调用。
Transform类:
物体的位置、旋转和缩放。
Transform属性方法:
transform.position:在世界空间坐标transform的位置
transform.rotaition:重设世界的旋转角度
transform.translate: 向某方向移动。
transform.Rotate :旋转
transform.Find 查找:通过名字查找子物体并返回它。
Input输入:
使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据。
input方法:
GetAxis(“Horizontal")和GetAxis(“Verical”) : 用方向键或WASD键来模拟-1到1的平滑输入
GetKey : 当通过名称指定的按键被用户按住时返回true。想想自动开火。
GetKeyDown: 当用户按下指定名称的按键时的那一帧返回true。
GetKeyUp : 在用户释放给定名字的按键的那一帧返回true。
GetButton:根据按钮名称返回true当对应的虚拟按钮被按住时。
GetButtonDown:在给定名称的虚拟按钮被按下的那一帧返回true。
GetButtonUp:在用户释放指定名称的虚拟按钮时返回true。
GetMouseButton:当指定的鼠标按钮被按下时返回true
GameObject
创建,销毁,克隆游戏对象
创建:GrameObject cube =GrameObject.CreatePrimitive(PrimitiveType.Cube):
cube.name=”立方体”;//设定名字
cube.renderer.material.color=Color.red;
克隆:GrameObject obj =(GameObject)Instantiate(cube);
销毁:Destroy(cube,1)//一秒后销毁cube;
Find查找
通过名字查找物体并返回。
通过标签查找游戏物体
void OnCollisionEnter(Collision col) {
if (col.gameObject.name == "Player")//通过名字查找
{}
if (col.tag == "Player")通过标签查找
{}
}
Time类:倒计时
属性: deltaTime
float a = 3f;
a -= Time.deltaTime;
if (a >= 0) {
print(a);
}
使用Time类移动物体:
float move_h=0;
if (Input.GetKey (KeyCode.A)) {
move_h-=Time.deltaTime;
}
if (Input.GetKey (KeyCode.D)) {
move_h+=Time.deltaTime;
}
transform.Translate(new Vector3(move_h,0,move_v));
Yield
可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行
void Start () {
StartCoroutine("Get");
}
IEnumerator Get() {
yield return new WaitForSeconds(2f);
print("aaaaaaaa");
}
消息传递函数:
SendMessage ("函数名",参数,SendMessageOptions) //GameObject自身的Script
BroadcastMessage ("函数名",参数,SendMessageOptions) //自身和子Object的Script
SendMessageUpwards ("函数名",参数,SendMessageOptions) //自身和父Object的Script
Random随机数
返回一个随机浮点数,在min(包含)和max(包含)之间。(只读)
float a=Random.value;
int b=Random.Range(0,100) 包括最大和最小
float c=Random.Range(0.0f,1.0f); 包括最小但不包括最大
碰撞检测
在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。
碰撞(Collision)信息是传递到Collider.OnCollisionEnter, Collider.OnCollisionStay 和 Collider.OnCollisionExit事件。
碰撞器:Box Collision,Sphere Collision,Capsule Collision,Mesh Collision,Whell Collision,Terrain Collision
触发器(勾选Is Tagger):
触发信息检测:
1 、当进入触发器
MonoBehaviour.OnTriggerEnter( Collider other )
2、当退出触发器
MonoBehaviour.OnTriggerExit( Collider other )
3、当逗留触发器
MonoBehaviour.OnTriggerStay( Collider other )
触发信息检测2:
1、当进入碰撞器
MonoBehaviour.OnCollisionEnter( Collision collisionInfo )
2、当退出碰撞器
MonoBehaviour.OnCollisionExit( Collision collisionInfo )
3、当逗留碰撞器
MonoBehaviour.OnCollisionStay( Collision collisionInfo )
忽略碰撞
有些时候我们不想让指定的两对象发生碰撞,即要忽略他们的碰撞
public Transform ball;
void Start() {
Physics.IgnoreCollision(ball.collider, this.collider);
}
今天上午测试有道题没写出来,复习一下
Test2访问Test1的脚本
Test1
{
public int x=3;
}
Void Start(){
Test1 a=GameObject.GetComponent<Test1>();
print (a.x);
}
更多精彩请看:http://www.gopedu.com/