蜜蜂游戏 小结

  1、 确保只有一颗敌人子弹,一颗自己的子弹出现。

     clone子弹预设时,先判断clone体是否为空。物体克隆出来后,在场景中是真实存在的,其他脚本对他的操作也会返还到clone脚本中。

     当clone体被销毁时,clone脚本中的clone体为null。不需要设置参数在各个script间传递。

  2、 敌人的动画效果。

     可以用Animation,也可以用纹理偏移量。二者都是在plane上进行,使用plane时,要使它的rotation.z为180,网格碰撞器朝向摄像机。

     (a)  renderer.material.mainTextureScale = new Vector2(1f/(float)2, 1f) ; mainTextureScale为纹理缩放量,在start中定义。

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

       通过改变偏移值i和控制停留时间产生动画。

     (b) 在Animation编辑器里,点击录制, 添加3个点。

       设置缩放量,分别设置3个点的offset(在Animation的material上设置)。播放后是波形图,在波形图上选择点,设置Tangent值为Constant,使其不为

       波形改变,而是3个点的状态瞬间改变。

       最后设置播放为loop。

  3、 使用plane时,一定注意使plane的正面面对摄像机(rotation.z=180)。

  4、 子弹的拖尾。

     对子弹添加Component下的Effects/Trail Renderer,选择拖尾效果材质球,修改time可改变长度。

  5、 敌人的规则移动。

     使用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;
      }
}

  6、 障碍物被射中后的效果。

    

    触发器检测+射线+逐像素判断+贴图替换

    先定义好替换图片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是空白)

    

原文地址:https://www.cnblogs.com/xiaolongchase/p/3300577.html