[Unity遊戲開發]向量在遊戲開發中的應用(一)

  本文已同步發表在博客園:http://www.cnblogs.com/davidsheh/p/5246213.html

-----------------------------------------------------------------------------------------------------------------------------------------------

    向量在遊戲開發中是非常實用的,我們在學校學完向量的知識後,只知道向量的基本知識,但對於如何將所學到的向量知識運用到實際的遊戲開發中卻不知所措。我計劃寫幾篇關於向量在遊戲中的應用的文章,總結一下在實際工作中所遇到過的運用向量機智處理問題的技巧。接下來要寫的東西都是記錄在我的雲筆記中,現在計劃整理一下後分享出來。

    對於向量的那些基本性質我不想說太多,有興趣的讀者可以自行查閱相關文檔,這裏只說向量的大小和方向。不知道讀者朋友曾經玩過安卓上一款比較火的跳躍遊戲沒有,遊戲名字叫《塗鴉跳躍》,英文名爲「Doodle Jump」,遊戲截圖如下:

    在玩《塗鴉跳躍》時,不知道你有沒有想過這麼一個問題:從下往上跳躍會直接穿過平臺,從上往下掉不會穿過平臺,這是如何實現的?

    關於這個問題,我的思考是:可以利用小人運動的速度的方向來判定是否啓用碰撞體,速度方向向上時禁用碰撞體,速度方向向下時啓用碰撞體。可能我說的這個思路讀者朋友還是不明覺厲,下面我用Unity3D寫了一個小Demo來幫助理解我的思路。

先上動態效果圖:


具體實現代碼如下:

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {
    public Vector3 jumpForce = new Vector3(10, 35, 0);
    private Rigidbody mRigidbody;
    private BoxCollider boxCollider;

    // 是否處於碰撞狀態
    private bool stayCollision = false;

	void Awake () 
    {
        this.mRigidbody = this.GetComponent<Rigidbody>();
        this.boxCollider = this.GetComponent<BoxCollider>();
	}
	
	void Update () 
    {
        // 當剛體靜止時,按空格鍵跳躍纔有效
	    if(mRigidbody.IsSleeping() && Input.GetKeyDown(KeyCode.Space))
        {
            // 給剛體施加一個力,是其運動起來
            this.mRigidbody.AddForce(jumpForce);
        }

        if(this.mRigidbody.velocity.y > 0) // 速度方向向上
        {
            // 這裏不能重複設置isTrigger,否則IsSleeping()方法會失效
            // 這裏具體原因不得而知,因爲被官方封裝起來了,
            // 但是猜測是因爲剛體規定自身方法沒有調用時爲休眠狀態
            if (!this.boxCollider.isTrigger) 
                this.boxCollider.isTrigger = true;
        }
        else if (!stayCollision) // Player沒有發生碰撞
        {
            if (this.boxCollider.isTrigger)
                this.boxCollider.isTrigger = false;
        }
	}

    void OnTriggerEnter(Collider collider)
    {
        stayCollision = true;
    }

    void OnTriggerExit(Collider collider)
    {
        stayCollision = false;
    }
}


    在這個小案例中,運用了速度向量的方向來判斷是向上碰撞還是向下碰撞。作爲《向量在遊戲開發中的應用》這個小系列文章的第一篇,就用這個非常簡單的小案例來開始吧。後續會更精彩,但更新時間不定。


    本Demo使用的的開發工具是Unity5.0.1f1和VS2013,建議下載源碼後用Unity5.0.1f1或者更高的版本打開。源碼地址:http://download.csdn.net/detail/wenxin2011/9453669


------------------------------------------------------------------------------------------------------------------

聲明:本文歡迎轉載和分享,但是請尊重作者的勞動成果,轉載分享時請註明出處:http://blog.csdn.net/wenxin2011/article/details/50810102

發佈了22 篇原創文章 · 獲贊 16 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章