前两年学习python时,写过一个飞机大战游戏,算是pygame开发游戏的入门,这次学习unity3D,泰课在线也提供了一个这样的范例,还是同样的素材,同样的逻辑,一遍做下来,感觉游戏引擎开发游戏太方便直观了。 在unity中,游戏对象对应的就是类,非常直观,可以是空对象,添加各种组件构成游戏对象,包括脚本。在hierarchy中可管理场景中的游戏对象,还有一种预制体,可以通过脚本加载。本篇,对unity制作这款游戏,留点资料(游戏逻辑不赘述了) 一、项目 2D,Android平台,game视图设置800*480,调整MainCamera的size=4 需要切换平台(需要安装),安装后还是不能发布,困惑! 二、单例 GameManager 游戏得分、游戏状态(暂停和运行) GameOver 游戏结束,得分记录显示,重新开始和退出 BombManager 炸弹管理 // 单例写法,如 public class GameManager : MonoBehaviour { public static GameManager _instance; void Awake() { _instance = this; } … } // 单例在项目中调用,如 GameManager._instance. 三、音频 AudioSource组件,可添加声音并可选PalyOnAwake、Loop 勾选PlayOnAwake时,不需要脚本调用 否则,需要脚本 方法一,直接获取AudioSource组件,如this.GetComponent<AudioSource>().Play(); 方法二,public GameObject Audioxx,通过inspector指定,然后Audioxx.Play() 四、图片按钮 图片加BoxCollider2D组件,事件 void OnMouseUpAsButton() { … } 五、自身的移动 this.transform.Translate(Vector3.down * moveSpeed * Time.deltaTime); 六、碰撞检测 // 子弹的碰撞 void OnTriggerEnter2D(Collider2D other) { if (other. tag == "Enemy") { if (!other.GetComponent<Enemy>().isDeath) { other.gameObject.SendMessage("BeHit"); // 让敌机执行BeHit GameObject.Destroy(this.gameObject); } } } 常用 tag标志 Destroy 销毁, GameObject.Destroy(this.gameObject) 销毁自己 GameObject.Destroy(other.gameObject) 销毁碰撞对象 other.gameObject.SendMessage("BeHit"); 让碰撞对象执行函数,如让敌机执行BeHit 七、延时循环执行 InvokeRepeating("函数名字符串", 开始时间, 间隔时间); 如InvokeRepeating("fire", 0, rate); 取消CancelInvoke("fire"),参数可空,取消所有invokeRepeating 八、动画帧 public Sprite[] sprites 精灵组 public float timer = 0 计时器,+=Time.deltaTime public int frameCountPerseconds = 10 动画每秒帧 int frameIndex = ((int)(timer / (1f / frameCountPerseconds))) % 2 计算精灵组索引(2图时) private SpriteRenderer spriteRender 渲染组件 spriteRender = this.GetComponent<SpriteRenderer>() 开始时获取 |