蜜蜂遊戲 小結

  一、 確保只有一顆敵人子彈,一顆本身的子彈出現。編輯器

     clone子彈預設時,先判斷clone體是否爲空。物體克隆出來後,在場景中是真實存在的,其餘腳本對他的操做也會返還到clone腳本中。oop

     當clone體被銷燬時,clone腳本中的clone體爲null。不須要設置參數在各個script間傳遞。動畫

  二、 敵人的動畫效果。spa

     能夠用Animation,也能夠用紋理偏移量。兩者都是在plane上進行,使用plane時,要使它的rotation.z爲180,網格碰撞器朝向攝像機。code

     (a)  renderer.material.mainTextureScale = new Vector2(1f/(float)2, 1f) ; mainTextureScale爲紋理縮放量,在start中定義。orm

       renderer.material.mainTextureOffset = new Vector2(1f/(float)2*i, 1f) ;mainTextureOffset爲紋理偏移量,i爲偏移值。blog

       經過改變偏移值i和控制停留時間產生動畫。圖片

     (b) 在Animation編輯器裏,點擊錄製, 添加3個點。ip

       設置縮放量,分別設置3個點的offset(在Animation的material上設置)。播放後是波形圖,在波形圖上選擇點,設置Tangent值爲Constant,使其不爲it

       波形改變,而是3個點的狀態瞬間改變。

       最後設置播放爲loop。

  三、 使用plane時,必定注意使plane的正面面對攝像機(rotation.z=180)。

  四、 子彈的拖尾。

     對子彈添加Component下的Effects/Trail Renderer,選擇拖尾效果材質球,修改time可改變長度。

  五、 敵人的規則移動。

     使用enum+switch/case組合

enum Move{
    right,
    left,
    down1,
    down2
}
Move enemyMove;

void Update () {
    switch(enemyMove){
        case Move.right:
            transform.Translate(new Vector3(5f,0,0)*Time.deltaTime, Space.World);
            if(Time.time>starttime+steptime){
                enemyMove=Move.down1;
                starttime=Time.time;
            }
            break;
        case Move.left:
            transform.Translate(new Vector3(-5f,0,0)*Time.deltaTime, Space.World);
            if(Time.time>starttime+steptime){
                enemyMove=Move.down2;
                starttime=Time.time;
            }
            break;
        case Move.down1:
            transform.Translate(new Vector3(0,-2f,0)*Time.deltaTime, Space.World);
            if(Time.time>starttime+1){
                enemyMove=Move.left;
                starttime=Time.time;
            }
            break;
        case Move.down2:
            transform.Translate(new Vector3(0,-2f,0)*Time.deltaTime, Space.World);
            if(Time.time>starttime+1){
                enemyMove=Move.right;
                starttime=Time.time;
            }
            break;
      }
}

  六、 障礙物被射中後的效果。

    

    觸發器檢測+射線+逐像素判斷+貼圖替換

    先定義好替換圖片splat和自身的貼圖myTex

    

public Texture2D splat;
private Texture2D myTex;

void Start () {
    myTex=(Texture2D)Instantiate(renderer.material.mainTexture);//獲取貼圖
    renderer.material.mainTexture=myTex;//將貼圖設置爲獲取的當前貼圖
}

 

   a、 先是觸發器檢測碰撞,找到碰撞點

   b、 而後在碰撞點垂直於障礙物面作一條射線

   c、 找到射線碰撞到的全部碰撞點,判斷是否碰撞了bunker

   d、 若碰撞到了,獲取碰撞點的uv值

   e、 將uv轉化爲屏幕座標,判斷碰撞點的像素的alpha值(alpha爲0是空白)

相關文章
相關標籤/搜索