1. 程式人生 > >【Unity3D】用滑鼠點選事件、AddForce完成跳躍與二段跳

【Unity3D】用滑鼠點選事件、AddForce完成跳躍與二段跳

遊戲裡面的跳躍和二段跳真的不是很難,尤其是Unity3D直接提供力量模擬引擎更是可以用極其簡短的程式碼完成這一切。

下面的程式將加一個對滑鼠左鍵點選的監聽,實現兩個球的跳躍與二段跳的功能,主要思想還是處理球在跳躍的時候,應該是不允許再跳躍的,而在球落地之後才重新開啟跳躍功能。二段跳則要判斷兩個狀態。其實就是《【Cocos2dx】精靈觸控跳躍功能》(點選開啟連結)的思想照搬過來。

程式具體如下圖所示:


場景佈置如下圖,非常簡單,就2個球,加上剛體屬性,1個平面,加一個Plane的tag,1個燈光,使其看起來沒這麼暗,同時再設定一個純色材質賦予給這些元件。不懂的可以參考《【Unity3D】物體、材質的設定、物體位移與旋轉》(

點選開啟連結)。



對於跳躍指令碼Jump.cs如下所示,關鍵是立個isJump的flag,防止使用者用瘋狂點滑鼠,瘋狂對球加一個向上的250的力。跳躍中收起,碰到再立起。Unity3D的碰撞事件可以參考《【Unity3D】利用物體碰撞檢測、鍵盤輸入處理完成平衡球遊戲》(點選開啟連結)。

這裡的力不知道怎麼算的,反正Unity3D剛體預設的力量是1,不知道單位是什麼,加一個250的向上的力才上升目測2-3個單位左右……

using UnityEngine;
using System.Collections;

public class Jump : MonoBehaviour
{

    float force = 250;
    bool isJump = false;

    void Start()
    {

    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (!isJump)//如果還在跳躍中,則不重複執行 
            {
                rigidbody.AddForce(Vector3.up * force);
                isJump = true;
            }
        }
    }

    // 碰撞開始  
    void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.tag == "Plane")//碰撞的是Plane  
        {
            isJump = false;
        }
    }

}
而對於二段跳的小球的指令碼DoubleJump.cs如下所示,思想基本與跳躍指令碼Jump.cs類似,只是flag變成2個:
using UnityEngine;
using System.Collections;

public class DoubleJump : MonoBehaviour
{

    float force = 250;
    bool isJump = false;
    bool isDoubleJump = false;

    void Start()
    {

    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (!isJump)//如果還在跳躍中,則不重複執行 
            {
                rigidbody.AddForce(Vector3.up * force);
                isJump = true;
            }
            else
            {
                if (isDoubleJump)//判斷是否在二段跳  
                {
                    return;//否則不能二段跳  
                }
                else
                {
                    isDoubleJump = true;
                    rigidbody.AddForce(Vector3.up * force);
                }
            }
        }
    }

    // 碰撞開始  
    void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.tag == "Plane")//碰撞的是Plane  
        {
            isJump = false;
            isDoubleJump = false;
        }
    }

}