Unity3D-Game1

game1

完成品: Unity3D-Game1

學習目標
物件移動-蛋
複製物件-蛋
鍵盤控制-玩家
碰撞-蛋,玩家
計分
畫面文字-分數

Page 5
改善地方
1. 加入遊戲結束事件和重新遊戲
2. 加入隨機爆炸和死亡物件給玩家作回避
3. 分開PlayerScript.cs畫面文字和建立遊戲介面程式
4. 改善蛋移動順暢(當蛋移動到碰撞玩家時出現”Lag”), 可加入物理現象給蛋;
同時限制蛋只在XY移動.(可到 Game2 參考)

設定:
Bucket
Create -> Cube
Add -> Mesh Collider
Delete -> Box Collider
Add -> PlayerScript.cs

Egg
Add -> rigidbody
untick -> Use Gravity
Delete -> Sphere Collider
Add -> Box Collider
Add -> EggScript.cs
Prefab
|
V
EggPrefab
Create Empty
Reset
Drag -> Prefab

EggCollider
Add -> Cube
untick -> Mesh Renderer
Add -> EggColliderScript.cs
|
V
SpawnObject
Create Empty
Reset
Add -> SpawnerScript.cs
Drag -> EggPrefab

程式碼:

EggScript.cs

 
using UnityEngine;
using System.Collections;

public class EggScript : MonoBehaviour {

void Awake()
{
// 增加力量給蛋
//rigidbody.AddForce(new Vector3(0, -100, 0), ForceMode.Force);
}

// 持續更新蛋移動位置
//Update is called by Unity every frame
void Update () {

// 蛋在Y方向每秒移動
float fallSpeed = 2 * Time.deltaTime;
transform.position -= new Vector3(0, fallSpeed, 0);

//蛋在Y方向範圍以外就消失
if (transform.position.y < -1 || transform.position.y >= 20)
{
//Destroy this gameobject (and all attached components)
Destroy(gameObject);
}
}
}

// 作者: http://www.m2h.nl/
// 原檔案: https://www.assetstore.unity3d.com/#/content/116(內附教學文件)

SpawnerScript.cs

 
using UnityEngine;
using System.Collections;

public class SpawnerScript : MonoBehaviour {

	// 加入預製物件
    public Transform eggPrefab;

	// 下一次預製物件時間
    private float nextEggTime = 0.0f;
	// 預製物件速度
    private float spawnRate = 1.5f;

	// 更新預製物件位置, 時間, 速度
	void Update () {
        if (nextEggTime < Time.time)
        {
            //複製預製物件
			SpawnEgg(); 

			nextEggTime = Time.time + spawnRate; 

			// 加速下一次複製預製物件
			//Speed up the spawnrate for the next egg 
            spawnRate *= 0.98f;
			//加速限制在0.3到99這範圍
			spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f); 
        }
	}
	//複製預製物件設定
    void SpawnEgg()
    {
        float addXPos = Random.Range(-1.6f, 1.6f); //限制在X範圍
        Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0); //預製物件移動範圍
        Instantiate(eggPrefab, spawnPos, Quaternion.identity); //複製預製物件
    }
}

// 作者: http://www.m2h.nl/
// 原檔案: https://www.assetstore.unity3d.com/#/content/116(內附教學文件)

PlayerScript.cs

 
using UnityEngine;
using System.Collections;

public class PlayerScript : MonoBehaviour {

    //設定分數
	public int theScore = 0;

	void Update () {

		// 玩家水平移動
        //These two lines are all there is to the actual movement..
        float moveInput = Input.GetAxis("Horizontal") * Time.deltaTime * 3; 
        transform.position += new Vector3(moveInput, 0, 0);

        // 玩家在X方向範圍移動
		//Restrict movement between two values
        if (transform.position.x <= -2.5f || transform.position.x >= 2.5f)
        {
            float xPos = Mathf.Clamp(transform.position.x, -2.5f, 2.5f); //Clamp between min -2.5 and max 2.5
            transform.position = new Vector3(xPos, transform.position.y, transform.position.z);
        }
	}

    //OnGUI is called multiple times per frame. Use this for GUI stuff only!
    void OnGUI()
    {
        // 顯示分數
		//We display the game GUI from the playerscript
        //It would be nicer to have a seperate script dedicated to the GUI though...
        GUILayout.Label("Score: " + theScore);
    }    
}

// 作者: http://www.m2h.nl/
// 原檔案: https://www.assetstore.unity3d.com/#/content/116(內附教學文件)

EggCollider.cs

 
using UnityEngine;
using System.Collections;

public class EggCollider : MonoBehaviour {

    // 玩家設定
	PlayerScript myPlayerScript;

    //Automatically run when a scene starts
    void Awake()
    {
    // 載入PlayerScript
	myPlayerScript = transform.parent.GetComponent();
    }

    // 觸發碰撞, 蛋消失, 加分
	//Triggered by Unity's Physics
	void OnTriggerEnter(Collider theCollision)
    {
        //In this game we don't need to check *what* we hit; it must be the eggs
        GameObject collisionGO = theCollision.gameObject;
        Destroy(collisionGO);

        myPlayerScript.theScore++;
    }
}

// 作者: http://www.m2h.nl/
// 原檔案: https://www.assetstore.unity3d.com/#/content/116(內附教學文件)

發佈留言