基于Unity3D的2d拾宝游戏(五)

来源:互联网 发布:阿里云总裁胡晓明辞职 编辑:程序博客网 时间:2024/05/16 19:27

继上一篇文章(http://blog.csdn.net/qq_29859497/article/details/72886620),继续分析游戏实现(C#)


敌人控制类enemyController的主要行为:


  • 敌人动作控制,包括左右走动与碰撞玩家时动作
  • 控制动作序列贴图显示

enemyController类代码:


using System.Collections;using System.Collections.Generic;using UnityEngine;public class enemyController : MonoBehaviour {    public Material runMaterial;    public Material dieMaterial;    public Material idleMaterial;    //左右移动速度    public float speed;    //初始位置    private float startPos;    //控制左右方向    private bool isRight;    int index;    Vector2 size;    Vector2 offset;    void Start()    {        speed = 0.03f;        isRight = true;        startPos = transform.position.x;    }    //控制敌人动作    void Update()    {        //右        if (isRight)        {            transform.Translate(Vector3.right * speed);            transform.GetComponent<Renderer>().material = runMaterial;            animateSprite(10, 10, false);        }        else//左        {            transform.Translate(Vector3.left * speed);            transform.GetComponent<Renderer>().material = runMaterial;            animateSprite(10, 10, true);        }        //左右转向        if ((transform.position.x - startPos) <0)        {            isRight = true;        }        if ((transform.position.x - startPos) > 2.5f)        {            isRight = false;        }        //玩家死亡,敌人不动        if (playerControler.isKill)        {            speed = 0;            if (isRight)            {                anSprite(10, 1, false);            }            else            {                anSprite(10, 1, true);            }        }        else        {            speed = 0.02f;        }    }    //控制播放shader中的动作精灵    void animateSprite(int columnSize, float framesPerSecond, bool moveDirection)    {        index = (int)(Time.time * framesPerSecond);        index = index % columnSize;        if (moveDirection)        {            size = new Vector2((float)1.0 / columnSize, 1);            offset = new Vector2(index * size.x, 0);        }        else        {            size = new Vector2((float)-1.0 / columnSize, 1);            offset = new Vector2(-index * size.x, 0);        }        transform.GetComponent<Renderer>().material.SetTextureOffset("_MainTex", offset);        transform.GetComponent<Renderer>().material.SetTextureScale("_MainTex", size);    }    //指定选取一帧图片    void anSprite(int columnSize, int ind, bool moveDir)    {        float x2 = 1.0f / (float)columnSize;        float x1 = (float)ind * x2;        if (moveDir)        {            transform.GetComponent<Renderer>().material.SetTextureOffset("_MainTex", new Vector2(x1, 0));            transform.GetComponent<Renderer>().material.SetTextureScale("_MainTex", new Vector2(x2, 1));        }        else        {            transform.GetComponent<Renderer>().material.SetTextureOffset("_MainTex", new Vector2(x1, 0));            transform.GetComponent<Renderer>().material.SetTextureScale("_MainTex", new Vector2(-x2, 1));        }    }}

附:相关代码编写伙伴BLOG:XiaoMingAudioMiao欢迎撩

原创粉丝点击