码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程第二次作业

时间:2014-11-27 22:03:24      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   sp   for   on   div   

   这次的作业是二选一,我综合了自己的兴趣以及情况,我选择了做一个3D游戏来完成。在查阅了很多资料之后,我选择了Unity3d来学习,因为它自带强大的编辑器,易于我们这些新人上手,在学习了两个星期后,我决定做一个之前很火的flappy bird来练手,下面是具体完成的情况。

  设计思路:利用U3D自带的物理碰撞引擎去检测碰撞事件,在每帧重画的时候去选择小鸟形态的切换,给小鸟的一个水平的速度,然后在场景上设置一个触发器,负责场景的延生,这样游戏就可以源源不断的进行下去。

  主要代码如下:

using UnityEngine;
using System.Collections;

public class Bird : MonoBehaviour {


	public float timer=0;
	public int frameNumber= 10;// frame number one seconds
	public int frameCount=0;//  frame counter

	public bool animation=false;// whether play the fly animation
	public bool canJump=false;

	void Start(){
		//this.rigidbody.velocity = new Vector3(2,0,0);
	}

	// Update is called once per frame
	void Update () {
		//hard code here for test
//		Vector3 vel  = this.rigidbody.velocity;
//		this.rigidbody.velocity = new Vector3(5,vel.y,vel.z);

		// animation
		if(GameManager._intance.GameState==GameManager.GAMESTATE_PLAYING){
			timer+=Time.deltaTime;
			if(timer>=1.0f/frameNumber){
				frameCount++;
				timer-=1.0f/frameNumber;
				int frameIndex = frameCount%3;
				// update material ‘s offset x
				// how to set the property of(x offset)  MainTex : Main Texture
				this.renderer.material.SetTextureOffset("_MainTex",new Vector2(0.333333f*frameIndex,0));
				//this.renderer.material.SetTextureScale("_MainText",new Vector2(1,1));
			}
		}

		if(GameManager._intance.GameState==GameManager.GAMESTATE_PLAYING){
			// control jump
			if(Input.GetMouseButton(0) ){// left mouse button down
                audio.Play();
				Vector3 vel2  = this.rigidbody.velocity;
				this.rigidbody.velocity = new Vector3(vel2.x,5,vel2.z);
			}
		}
	}

	public void getLife(){
		rigidbody.useGravity=true;
		this.rigidbody.velocity = new Vector3(2,0,0);
	}
}

  

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {
	// define the state of the game
	public static int GAMESTATE_MENU 		=0;//游戏菜单状态
	public static int GAMESTATE_PLAYING		=1;//游戏中状态 ... 
	public static int GAMESTATE_END			=2;//游戏结束状态


	public Transform firstBg;
	public int score = 0;
	public int GameState  = GAMESTATE_MENU;

	public static GameManager _intance;

	private GameObject bird;

	void Awake(){
		_intance = this;
		bird = GameObject.FindGameObjectWithTag("Player");
	}

	void Update(){
		if(GameState==GameManager.GAMESTATE_MENU){
			if(Input.GetMouseButtonDown(0)){
				// transform state
				GameState = GAMESTATE_PLAYING;
				// set bird is playing 
				// 1.set gravity 2.add velocity of x
				bird.SendMessage("getLife");
			}
		}

        if (GameState == GameManager.GAMESTATE_END) {
            GameMenu._instance.gameObject.SetActive(true);
            GameMenu._instance.UpdateScore(score);
        }
	}
}

  

using UnityEngine;
using System.Collections;

public class MoveTrigger : MonoBehaviour {

	public Transform currentBg;
	public Pipe pipe1;
	public Pipe pipe2;

	public void OnTriggerEnter(Collider other){
		print("OnTriggerEnter");
		if(other.tag=="Player")
		{
			// move the bg to the front of first transform
			//1. get the first transfrom
			Transform firstBg=  GameManager._intance.firstBg;
			// 2. move
			currentBg.position = new Vector3( firstBg.position.x+10,currentBg.position.y,currentBg.position.z);
		
			GameManager._intance.firstBg = currentBg;
			// new position for pipe

			pipe1.RandomGeneratePosition();
			pipe2.RandomGeneratePosition();
		}
	}

}

  

bubuko.com,布布扣   bubuko.com,布布扣

 

心得体会:

    通过这次U3D的学习,我有机会去了解3d程序的基本概念以及开发过程,在学习的过程中,我遇到了很多问题,通过查阅资料与咨询他人将这些问题都一一解决。从此之后,我觉得自己对编程也抱有更大的热情,受益匪浅。

  

软件工程第二次作业

标签:blog   http   io   ar   os   sp   for   on   div   

原文地址:http://www.cnblogs.com/ztypeer/p/4127208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!