flappy brid 开发实录(基于3d环境)

一、游戏场景逻辑:

创建三个游戏面块,通过迭代改变面块的位置来生成无尽模式的游戏场景,通过常量来控制游戏状态

二、开发顺序:
1、场景搭建
2、主角控制
3、声音添加与游戏管理器
4、设计UI  

三、开发难点

一、小鸟动作
 动画计时器原理:
1.定义3个变量:

       timer=0 时间常量记录时间的流逝
      frame_Count=10(一秒10帧) 规定动作的帧数
      frame_Number= 0告诉游戏当前播放第几帧
2.思路逻辑
每次更新游戏界面,timer加上更新所用时间,当timer的大小大于播放
    一帧需要的时间时,播放动作,减去加上的时间常量,然后动作帧数(frame
    _Number)自加(下次需要播放后一帧)
         3.代码实现:

    public int farme_Count = 10;//帧数
    private float timer = 0;//时间常量
    private int farmer_Number = 0;//动作帧数



	void Update () 
	{
        timer += Time.deltaTime;
        if (timer > 1.0f / farme_Count)
        {
            timer -= 1.0f / farme_Count;
            int farmer_index = farmer_Number % 3;
	    this.GetComponent<Renderer> ().material.SetTextureOffset ("_MainTex", new Vector2 (farmer_index*0.33333f, 0));
            //标签"_MainTex"指的是该材质里的主要图片(有的材质存在多张texture)
	    farmer_Number++;
            
            
        }
	}

二、场景迭代
1思路:有三个块面来迭代游戏场景
2.迭代原理:在每个块面里添加一个触发器,当Player进入触发器时,将当前的这个块面移动到
最后一个块面的后面,使用单例模式创建一个gamemanager类,实例化为主摄像机,再添加一个
3.fristbg的位置信息(transform)来存储最后一个块面的位置信息;
4.代码实现:
//单例模式下的gamemanager,和声明位置信息属性

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

	public Transform Fristbg;
	public static GameManager _instance;
	void Awake(){
		_instance = this;
	 }
	
}

//场景面块的迭代和位置信息的储存
using UnityEngine;
using System.Collections;

public class MoveTrigger : MonoBehaviour 
{

        public Transform bg_position;
        //bg_position 可以赋值为当前面块的位置信息

        public void OnTriggerEnter(Collider other)
        {
            if(other.tag=="Player")
            {  //更改面块的位置
               bg_position.position=new Vector3(GameManager._instance.Fristbg.position.x+6.24f,bg_position.position.y,bg_position.position.z);
               //将最后一个面块的位置信息改为当前面块的位置
	       GameManager._instance.Fristbg = bg_position;

            }

        }
	
	
}
三、游戏管理器(GameManager)
创建一个类,实例化为Main Canmera,用于控制游戏状态,储存游戏得分,控制小鸟的横向移动速度
游戏状态通过三个常量来控制,代码如下:

  public class GameManager : MonoBehaviour {
    //定义游戏状态
    
    public static int GAMEMUNE      = 0;
    public static int GAMEING       = 1;
    public static int GAMROVER      = 2;
    public   int GameState=GAMEMUNE;
    private GameObject brid;
    public int x_Force = 100;
    public int Source = 0;



    //场景迭代:单例模式
    public static GameManager _instance;
	public Transform Fristbg;
	void Awake(){
		_instance = this;
        brid=GameObject.FindGameObjectWithTag("Player");
	 }

    //游戏启动
    
    

    void Update() {

        if(this.GameState==GAMEMUNE)

        {
            if (Input.GetMouseButtonUp(0))
            {
                GameState = GAMEING;
                brid.GetComponent<Rigidbody>().useGravity = true;
                brid.GetComponent<Rigidbody>().AddForce(new Vector3(x_Force, 0, 0));
                this.GetComponent<AudioSource>().Play();



            }
        }
    

    }
}

这是笔者刚刚学习u3d,参考了taikr网上,siki老师的设计思路,和taikr网提供的素材来编写,笔者刚刚学习u3d,很多不足之处希望各位指出,让笔者可以学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值