Unity3D开发总结2
2013-03-07 19:29
357 查看
1. 当mouse、key按下时,按下的动作速度、帧的更新速度、if(input.getkey(..))的速度的快慢顺序是:
if(input.getkey(..))//程序的判读速度最快,一帧内完成 > 帧的更新速度 > mouse、key按下的动作速度//所以一个按下的动作可能会跨越多帧
2.
***************scriptA***************
using UnityEngine;
using System.Collections;
public class fun : MonoBehaviour
{
// Use this for initialization
//public GameObject test;
private test test;
void Start ()
{
test test=GetComponent("test") as test ; //scriptA通过此方式,每调用一次scriptB的 test.fun()方法时,
//在scriptB中有个Updata()方法 主要用于更新fun()中的状态值(主要是和时间有关系的)
//而且只要脚本被实例化,如作为某个object的组件时,呢么该脚本中的Updata方法就一直在更新,无论是否被别的脚本调用
}
// Update is called once per frame
void Update ()
{
test.fun();
}
}
***************scriptB***************
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
// Use this for initialization
private float mytime=0;
private float totaltime=2;
private float timelength=3;
private bool isplay=true;
private float mylengthtime=0;
void Start () {
}
// Update is called once per frame
void Update () { //update方法只要用于更新fun()方法中的状态值,如 mylengthtime
mylengthtime+=Time.deltaTime;
if(isplay)
{
isplay=fun ();
}
if(mylengthtime>timelength)
{
Destroy(this); //如果为Destroy(GameObject),那么就是销毁与该script组件相绑定的GameObject对象,
//如果为Destroy(this),那么就是销毁组件本身,组件可以看做是主GameObject的成员属性实例
}
}
public bool fun()
{
mytime+=Time.deltaTime;
if(mytime>=totaltime)
{
return false;
}
return true;
}
}
3. 一个脚本A引用另一个脚本B中的静态属性,可以直接引用,不用先获取B脚本的实例
4.
a. new vector3(myTime*0.26飞,0,0) //会得到一个归一化的vector3,结果应该是 (1,0,0)
b. 关联到脚本的prefab,只要改动prefab(包括prefab所绑定的脚本、关联的材质等),就会自动更新别处对其的引用
c. 只用rigidbody才具有 gameobject.velocity.y ...和 physical.gravity.y=-8; //这样的设置才能对其生效
d. 如果只有collision,而没有rigidbody,就只能用于检测碰撞,而没有碰撞的“动态”
e. 使用tag比name好,因为 instance物体在生成时其Name会自动更改--->如: Name(Clone),但是instance的tag不会更改
f. collider.enbled=false //关闭碰撞
g.
raycastHit hit ;
if( raycast(从什么点//世界坐标,沿着什么方向//世界坐标,out Hit,多远距离) ) //raycast用于判断是否有物体被击中
{..........}
5. 在进行游戏各种事件的处理时,要使用瞬间状态分析方法
6.
a. collider.enable --->让碰撞失效
b. IsTrigger// 是否碰撞时容许穿越
c. if(shipBullet!=null&& collider.enable) physics.ignoreCollision(shipBullet.collider,collder) //忽略shipBullet实例和本gameobject的碰撞
d.
e.
f.
g.
h.
7. startCoroutine的调用原理
void Updata ( )
{
print ("Starting " + Time.time); //A
StartCoroutine (WaitAndPrint (2.0F)); //B
print ("Before WaitAndPrint Finishes " + Time.time); //C
}
//Updata ( )执行时,A、B、C会顺序执行,B延时yield return new WaitForSeconds(waitTime);
//然后返回print ("WaitAndPrint " + Time.time);
//返回print ("WaitAndPrint " + Time.time)后,WaitAndPrint (float waitTime)方法才能再次被调用
IEnumerator WaitAndPrint (float waitTime)
{
yield return new WaitForSeconds(waitTime);
print ("WaitAndPrint " + Time.time);
}
8. gameobject、transform的this和非this区别:
a. 如果在脚本中使用脚本所绑定的主对象的 gameobject和transform实例,可以直接使用(直接写gameobject或transform,不用加任何前缀)
b. 如果在本脚本中引用其他实例(非脚本所绑定的主对象),可以使用如下方式:
function OnCollisionEnter(Collision collision)
{.......
Destroy(collision.gameobject);
}
9. Gameobect.active //控制是否可见
10.
obj.transform.Rotate(Vector3.up,speed*Time.deltaTime); //沿着自身的Vector.up方向进行旋转
obj.transform.Rotate(Vector3.up,speed*Time.deltaTime,Space.World); //沿着世界坐标的Y轴进行旋转
11.
a. transform、render、collision...都是主Object的组件,在脚本中可以直接使用transform、render、collision(前面不用使用主实例名称)来表示脚本绑定主对象的各个组件
b. AddComponent(脚本名称)-->动态创建了一个脚本实例
if(input.getkey(..))//程序的判读速度最快,一帧内完成 > 帧的更新速度 > mouse、key按下的动作速度//所以一个按下的动作可能会跨越多帧
2.
***************scriptA***************
using UnityEngine;
using System.Collections;
public class fun : MonoBehaviour
{
// Use this for initialization
//public GameObject test;
private test test;
void Start ()
{
test test=GetComponent("test") as test ; //scriptA通过此方式,每调用一次scriptB的 test.fun()方法时,
//在scriptB中有个Updata()方法 主要用于更新fun()中的状态值(主要是和时间有关系的)
//而且只要脚本被实例化,如作为某个object的组件时,呢么该脚本中的Updata方法就一直在更新,无论是否被别的脚本调用
}
// Update is called once per frame
void Update ()
{
test.fun();
}
}
***************scriptB***************
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
// Use this for initialization
private float mytime=0;
private float totaltime=2;
private float timelength=3;
private bool isplay=true;
private float mylengthtime=0;
void Start () {
}
// Update is called once per frame
void Update () { //update方法只要用于更新fun()方法中的状态值,如 mylengthtime
mylengthtime+=Time.deltaTime;
if(isplay)
{
isplay=fun ();
}
if(mylengthtime>timelength)
{
Destroy(this); //如果为Destroy(GameObject),那么就是销毁与该script组件相绑定的GameObject对象,
//如果为Destroy(this),那么就是销毁组件本身,组件可以看做是主GameObject的成员属性实例
}
}
public bool fun()
{
mytime+=Time.deltaTime;
if(mytime>=totaltime)
{
return false;
}
return true;
}
}
3. 一个脚本A引用另一个脚本B中的静态属性,可以直接引用,不用先获取B脚本的实例
4.
a. new vector3(myTime*0.26飞,0,0) //会得到一个归一化的vector3,结果应该是 (1,0,0)
b. 关联到脚本的prefab,只要改动prefab(包括prefab所绑定的脚本、关联的材质等),就会自动更新别处对其的引用
c. 只用rigidbody才具有 gameobject.velocity.y ...和 physical.gravity.y=-8; //这样的设置才能对其生效
d. 如果只有collision,而没有rigidbody,就只能用于检测碰撞,而没有碰撞的“动态”
e. 使用tag比name好,因为 instance物体在生成时其Name会自动更改--->如: Name(Clone),但是instance的tag不会更改
f. collider.enbled=false //关闭碰撞
g.
raycastHit hit ;
if( raycast(从什么点//世界坐标,沿着什么方向//世界坐标,out Hit,多远距离) ) //raycast用于判断是否有物体被击中
{..........}
5. 在进行游戏各种事件的处理时,要使用瞬间状态分析方法
6.
a. collider.enable --->让碰撞失效
b. IsTrigger// 是否碰撞时容许穿越
c. if(shipBullet!=null&& collider.enable) physics.ignoreCollision(shipBullet.collider,collder) //忽略shipBullet实例和本gameobject的碰撞
d.
e.
f.
g.
h.
7. startCoroutine的调用原理
void Updata ( )
{
print ("Starting " + Time.time); //A
StartCoroutine (WaitAndPrint (2.0F)); //B
print ("Before WaitAndPrint Finishes " + Time.time); //C
}
//Updata ( )执行时,A、B、C会顺序执行,B延时yield return new WaitForSeconds(waitTime);
//然后返回print ("WaitAndPrint " + Time.time);
//返回print ("WaitAndPrint " + Time.time)后,WaitAndPrint (float waitTime)方法才能再次被调用
IEnumerator WaitAndPrint (float waitTime)
{
yield return new WaitForSeconds(waitTime);
print ("WaitAndPrint " + Time.time);
}
8. gameobject、transform的this和非this区别:
a. 如果在脚本中使用脚本所绑定的主对象的 gameobject和transform实例,可以直接使用(直接写gameobject或transform,不用加任何前缀)
b. 如果在本脚本中引用其他实例(非脚本所绑定的主对象),可以使用如下方式:
function OnCollisionEnter(Collision collision)
{.......
Destroy(collision.gameobject);
}
9. Gameobect.active //控制是否可见
10.
obj.transform.Rotate(Vector3.up,speed*Time.deltaTime); //沿着自身的Vector.up方向进行旋转
obj.transform.Rotate(Vector3.up,speed*Time.deltaTime,Space.World); //沿着世界坐标的Y轴进行旋转
11.
a. transform、render、collision...都是主Object的组件,在脚本中可以直接使用transform、render、collision(前面不用使用主实例名称)来表示脚本绑定主对象的各个组件
b. AddComponent(脚本名称)-->动态创建了一个脚本实例
相关文章推荐
- Unity3D手游开发实践《腾讯桌球》客户端开发经验总结
- Unity3D手游开发实践《腾讯桌球》客户端开发经验总结
- unity3d中隐藏/显示物体方法总结 – unity3d游戏开发
- Unity3d 开发之 ulua 坑的总结
- Unity3D开发之Unity3D性能优化总结
- Unity3D开发总结3
- 中级Unity3D开发工程师-面试经验总结
- 【小松教你手游开发】【unity实用技能】Unity3D之OnGUI知识总结
- Unity3D开发基础组件提取总结
- [Unity3D]U3D开发项目总结(转)
- Unity3D开发和总结:用C#封装类似苹果NSNotificationCenter消息通信机制(KVO)
- Unity3d 开发之 ulua 坑的总结
- FairyGUI与Unity3D开发案例小总结
- Unity3D开发总结一
- Unity3D常用游戏开发插件测评总结
- Unity3D开发总结一
- Unity3D开发基础组件提取总结
- Unity3D手游开发实践《腾讯桌球》客户端开发经验总结
- vuforia 结合 unity3d 开发 AR 的 androidAPP 总结
- Unity3D手游开发实践《腾讯桌球》客户端开发经验总结