Unity3D开发总结2

相关网盘免费资源下载...

 

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(脚本名称)-->动态创建了一个脚本实例

 

相关网盘免费资源下载...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值