【转】unity3d的一些有用的杂录

http://blog.sina.com.cn/s/blog_4ef78af50100xhcb.html (光源  以及一些属性介绍)


Light
类,继承自Behaviour。

var attenuate : bool

描述:光源是否随着距离衰减?对于Directional光源衰减总是关闭的。


var color : Color


描述:光源的颜色。为了修改光源的强度你需要改变光源颜色的亮度。光源总是增加亮度,因此一个黑色的光源与没有光源相同。光源是否随着距离衰减?对于Directional光源衰减总是关闭的。
//在2秒内使颜色变黑。
function Update ()

{
    light.color-= Color.white / 2.0 * Time.deltaTime;
}
//在2个颜色之间来回插值光源颜色。
var duration =1.0;
var color0 = Color.red;
var color1 = Color.blue;
function Update ()

{
   //设置光源颜色
   var t = Mathf.PingPong (Time.time, duration) / duration;
    light.color= Color.Lerp (color0, color1, t);
}

var flare : Flare

描述:为这个光源使用的flare asset。

var intensity : float


描述:光源的强度被光源的颜色乘。该值可以介于0~8之间。允许你创建明亮的灯光。
//随时间改变光照强度
var duration = 1.0;
function Update()

{
   //余弦理论
   var phi = Time.time / duration * 2 * Mathf.PI;
   //获取余弦,并将范围从-1~1变为0~1
   var amplitude = Mathf.Cos( phi ) * 0.5 + 0.5;
   //设置光的颜色
   light.intensity = amplitude;
}


◆ var range :float
描述:光源的范围。
即使光源关闭了attenuate,它还是只影响在它范围内的物体。
//在原始范围与原始范围一般处变换光照范围
var duration =3.0;
private var originalRange : float;
originalRange = light.range;
function Update()

{
    var amplitude = Mathf.PingPong( Time.time,duration );
    //将0..持续时间改为0.5..1范围
    amplitude = amplitude / duration * 0.5 + 0.5;
    //设置光照范围
    light.range = originalRange * amplitude;
}

var renderMode :LightRenderMode

描述:如何渲染该光源?此处可以是LightRenderMode.Auto,LightRenderMode.ForceVertex 或LightRenderMode.ForcePixel。像素光渲染比较慢但是看起来较好,尤其是对那些没有较高面数的几何体。一些效果(例如凹凸)只会在像素光照下显示。


Cancellnvoke():void

描述:取消所有在这个MonoBehaviour上调用

Cancellvoke(methodName:string):void

描述:撤销该行为中名为methodName的所有调用。

Invoke  and    InvokeRepeating


functionStartCoroutine(routine:IEnumerator):Coroutine


描述:开始一个coroutine
一个coroutine的执行可以任何位置使用yield语句暂停,当coroutine继续的时候yield返回值,当行为需要跨越多个帧的时候,Coroutines是非常好的,当Coroutines几乎没有性能负担。StartCoroutine函数总是立即返回,然而你能够yidle结果,这个将等待直到coroutine执行完成。
当使用javascript时,没有必要使用StartCorutine,编译器会为你做这件事。在写C#代码的时候你必须调用StartCoroutine
//在这个例子中我们显示如何并行调用
//一个coroutine并继续执行这个函数。
//0秒后,打印”Starting0.0”
//0秒后,打印”Before WaitAndPrint Finishes0.0”
//2秒后,打印”WaitAndPrint 2.0”
print(“Starting”+Time.time);
//WaitAndPrint作为一个coroutine开始,并等待直到它完成
WaitAndPrint(2.0)
print(“Before WaitAndPrint Finishes”+Time.time);
function WaitAndPrint(waitTime:float)

{
    //暂停执行waitTime秒
   Yield WaitForSeconds(waitTime);
   Print(“WaitAndPrint”+Time.time);
   //WaitAndPrint作为一个coroutine开始,并等待直到它完成
   yield WaitAndPrint(2.0);
   print(“Done”+Time.time);
}
//c#例子
//在这个例子中我们展示如何调用一个coroutine并等待直到它完成
IEnumerator Start(){
//0秒后,打印”strating0.0”
//2秒后,prints”WaitAndPrint2.0”
//2秒后,打印”Done 2.0”
print(“Starting”+Time.time);
yield return StartCoutine(WaitAndPrint(2.0f);
print(“Done”+Time.time);
}
IEnumerator WaitAndPrint(float waitTime){
//暂停waitTime秒
 yield return new WaitForSeconds(waitTime);
print(“WaitAndPrint”+Time.time);
}

StopCoroutine(methodName: string):void


描述:停止所有运行在这个行为上的名为methodName的Coroutine。
请注意只使用一个字符串方法名的StartCoroutine才能使用StopCoroutine停止。

————————————————————————

function Awake(): void


描述:当脚本实例被加载时,Awake 被调用。
在游戏开始前,使用Awake 来初始化任何变量或游戏状态。在脚本实例的生命期内Awake 只被调用一次。Awake在所有物体被初始化之后被调用,因此你可以安全地告诉其他物体或使用如GameObject.FindWithTag来查询它们。每个游戏物体的Awake以随机的顺序被调用。因此,你应该使用Awake 来再脚本之间设置引用,并使用Start来传递消息。

function FixedUpdate (): void

function LateUpdate (): void


OnBecameInvisible(): void


描述:OnBecameInvisible函数在这个渲染上的脚本。OnBecameVisible和OnBecameInvisible可以用于只需要在需要在物体可见时才进行的计算。
//当它不可见时禁用这个行为
function OnBecameInvisible()

{
   enabled=false;
}
OnBecameInvisible可以是一个coroutine,简单地在这个函数中使用yield语句。当在编辑器中运行时,场景试图相机也会导致这个函数被调用。

OnDisable():void


描述:当这个行为禁用或不活动时这个函数被调用。
当物体被销毁的时候这个函数也会被调用并可以用于任何清理的代码。当脚本在编译结束后被加载时,OnDisable将被调用,然后脚本加载完成后OnEnable被调用。

functiononParticleCollision(other:GameObject):void


描述:当一个粒子碰到一个碰撞器时OnParticleCollision被调用。
这个可以在游戏物体被粒子击中时应用伤害到它的上面,这个消息被发送到所有附加到
WorldParticleCollider 的脚本上和被击中的Collider上,这个消息只有当你在
WorldParticleCollider检视面板中启用了sendCollisionMessage时才会被发送。
//应用力到所有被粒子击中的刚体上


functionOnParticleCollison(other:GameObject)

{
   varbody=other.rigidbody;
   if(body)

  {
    var direction=other.transform.position+transform.position;
    direction=direction.normalized;
    body.AddForce(direction*5);
   }
}


OnParticleCollision可以是一个coroutine,简单地在这个函数中使用yield语句。


function OnpostRender():void


描述:OnPostRender在相机渲染场景之后调用。
只有脚本被附加到相机上时才会调用这个函数。OnPostRender可以是一个coroutine,简单地在这个函数中使用yield语句。
OnPostRender在相机渲染完所有它的物体之后被调用。如果你想在所有相机和GUI被渲染之后做一些事情,使用WaitForEndFramecoroutine
参见:OnPreRender,WaitForEndOfFrame
//当附加到机时,将消除
//相机纹理的alpha通道为纯白色
//如果你有一个渲染纹理并想将它显示在GUI上时可以使用这个函数
private varmat:Material;
function OnPostRender()

{
    //创建一个只渲染白色到alpha通道的着色器
   if(mat)
    {
      mat=newMaterial(“Shader Hidden SetAlpha”+)
    “SubShader{“+”pass{”+”ZTest Always Cull off ZwriteOff”+”ColorMaskA”+”Color  (1,1,1,1)”+”}”+”}”+”}”);
    }
}


// 用上述着色器绘制一个全屏四边形
GL.PushMatrix();
GL.LoadOrtho();
for(var i=0;i<mat.pssCount;++i)

{
  mat.SetPass(i);
  GL.Begin(GL.QUADS);
  GL.Vertex3(0,0,0.1);
  GL.Vertex3(1,0,0.1);
  GL.Vertex3(1,1,0.1);
  GL.Vertex3(0,1,0.1);
  GL.End();
 }
 GL.PopMatrix();
}


function OnRender():void


描述:OnpreRender在相机开始渲染场景之前调用。
只用脚本被附加到相机上时才会调用这个函数。
注意如是果你在这里改变了相机的视野参数(例如fieldOfView),它们将影响下一帧。用OnPreCull代替。OnPreRender可以是一个coroutine,简单地在这个函数中使用yield语句。


operatorbool 

    这个物体存在吗?
Instantiate       克隆original物体并返回这个克隆。
Destroy           移除一个游戏物体,组件或资源。
DestroyImmediate  立即销毁物体obj。强烈建议使用Destroy代替。
FindObjectsOfType  返回所有类型为type的激活物体。
FindObjectOfType  返回第一个类型为type的激活物体。
operator==       比较两个物体是否相同。
operator!=       比较两个物体是否不相同。
DontDestroyOnLoad  加载新场景时确保物体target不被自动销毁。


functionOnCollisionEnter(collisionInfo:Collision):void


描述:当这个碰撞器/刚体开始触碰另一个刚体/碰撞器时OnCollisionEnter被调用。
相对于OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider.Collision类包含接触点,碰撞器速度等细节。如果在函数中不使用CollisionInfo,省略collisionInfo参数以避免不必要的计算。注意如果碰撞器附加了一个非动力学刚体,也只发送碰撞事件。

functionOnCollisionEnter(collision:Collision)

{
    //调试绘制所有的接触点和法线
    for(varcontact:ContacePoint in collision.contacts)

   {
        Debug.DrawRay(contact.point,contact.normal,color.white);
    }
    //如果碰撞物体有较大的冲击就播放声音
   if(collision.relativeVelocity.magnitude.2)
    Audio.Play();
 }
 //一枚手榴弹
 //在击中一个表面时初始化一个爆炸预设
 //然后销毁它
 varexploionPrefab:Transform;
 functionOnCollisionEnter(collision:Collision)

{
  //旋转这个物体使y轴面向沿着表面法线的方向
   var contact=collision.contact[0];
    varrot=Quaternion.FromToRotation(Vector3.up,contact.normal);
    varpos=contact.point;
   Instantiate(exploionPrefab,pos,rot);
   Destroy(gameObject);
 }







  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值