Unity3D--學習太空射擊游戲制作(二)


步驟三:創建主角

游戲的主角是一艘太空飛船,我們將使用一個飛船模型作為游戲的主角,並賦予他一個腳本,控制他的運動,游戲體的組件必須依賴於腳本才能運行。

01:在Project窗口找到Player.fbx(通過3D Max制作的模型),將其拖動到Hierarchy窗口創建飛船的模型游戲體,然后在Inspector窗口將它的Y軸坐標設置為0,並旋轉180度,如圖:

 

02:在Project窗口選擇Assets,右鍵選擇Create->Folder創建一個文件夾,取名為Scripts,用於存放腳本文件,然后選擇Scripts文件夾,右鍵選擇Create->C# Script創建一個C#腳本,取名為Player,雙擊Player.cs腳本將其打開,Unity自動已經創建了一些基本代碼,如圖:

using UnityEngine;
using System.Collections;

[AddComponentMenu("MyGame/Player")] //此處為自定義腳本在菜單欄的位置,可以在Component->MyGame->Player找到
public class Player : MonoBehaviour
{

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

03:控制飛船的移動,在Player類中默認有一個Update函數,這個函數在程序運行時候每一幀都會調用一次,我們的代碼主要就是寫在這里:

using UnityEngine;
using System.Collections;

[AddComponentMenu("MyGame/Player")] //此處為自定義腳本在菜單欄的位置,可以在Component->MyGame->Player找到
public class Player : MonoBehaviour
{
    public float m_speed = 1;//控制飛船的速度
    public Transform m_transform; //定義游戲的Transform組件,Transform組件提供的主要功能都是和移動、
    //旋轉、縮放游戲體有關的
    void Start()
    {
        m_transform = this.transform;
    }
    void Update()
    {
        //縱向移動距離
        float moveVertical = 0;
        //水平移動距離
        float moveHorizontal = 0;

        //按上鍵
        if (Input.GetKey(KeyCode.UpArrow))
        {
            moveVertical -= m_speed * Time.deltaTime;//Time.deltaTime表示每幀的經過時間,那些需要每幀做增減變動的數值都需要乘上Time.deltaTime
            //此處速度與Time.deltaTime相乘表示每幀移動N米距離
        }
        //按下鍵
        if (Input.GetKey(KeyCode.DownArrow))
        {
            moveVertical += m_speed * Time.deltaTime;
        }
        //按左鍵
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            moveHorizontal += m_speed * Time.deltaTime;
        }
        //按右鍵
        if (Input.GetKey(KeyCode.RightArrow))
        {
            moveHorizontal -= m_speed * Time.deltaTime;
        }
        //移動 Translate函數移動游戲體 Vector3類型的參數分別表示x、y、z三個方向上的移動距離
        m_transform.Translate(new Vector3(moveHorizontal, 0, moveVertical));//此處是根據模型在設計器中的Scene坐標來講的
    }
}

  此時運行游戲,按鍵盤的上下左右鍵已經可以移動游戲體,但是速度有些慢,我們可以在編輯器中修改一下Speed的值改變速度,這里需要注意的是在后台代碼中定義的Public類型的變量,在編輯器中都會有所呈現,如圖:

04:創建子彈,因為這是一個射擊游戲,所以飛船要發射子彈,我們創建子彈的游戲體和腳本,在Project窗口找到rocket.fbx模型文件,拖動到Hierarchy窗口創建子彈游戲體,然后在Scripts文件夾中創建子彈的腳本文件Rocket,並將其指定給rocket游戲體,如圖:

在Rocket類中添加3個屬性,分別控制子彈的飛行速度、生存時間和威力:

using UnityEngine;
using System.Collections;
[AddComponentMenu("MyGame/Rocket")]
public class Rocket : MonoBehaviour
{

    //子彈飛行速度
    public float m_speed = 10;
    //生存時間
    public float m_liveTime = 1;
    //威力
    public float m_power = 1.0f;
    protected Transform m_transform;
    void Start()
    {
        m_transform = this.transform;
Destroy(this.gameObject, m_liveTime); //表示一定時間后銷毀自身 } void Update() { m_transform.Translate(new Vector3(0, 0, -m_speed * Time.deltaTime)); } }

05:創建子彈Prefab,由於游戲中的子彈是由玩家發射的,並可以發射很多,對於需要重復發射的游戲體,需要做成Prefab,Prefab可以理解為可以重復使用的游戲體。在Project窗口的Assets目錄內創建一個名為prefabs的文件夾用於保存prefab,然后單擊右鍵選擇Create->Prefabs,創建一個空的Prefab,命名為Rocket,如圖:

 在Hierarchy窗口選擇前面創建的子彈的游戲體,將其拖動到剛剛創建的prefab上,Prefab的制作就完成了,場景中的原始子彈游戲體已經沒有用,可以刪掉,如圖:

06:發射子彈,首先我們需要將飛船和子彈的Prefab關聯起來,打開Player.cs腳本文件,添加一個Transform屬性,將它指向子彈的Prefab

public Transform m_rocket; //在飛船的類中定義一個子彈的變量 把二者聯系起來

  在Unity編輯器中,選擇Player游戲體,在Inspector窗口找到Player腳本組件,發現多了一個Rocket選項,選擇子彈的Prefab,將其拖動到Rocket選項上,如圖:

打開Player.cs腳本,在Update函數中的最下面添加發射子彈的代碼:

public float m_rocketRate = 0;//發射子彈的速度
Void Update()
{
  ...
       //按空格或者鼠標左鍵發射子彈
        m_rocketRate -= Time.deltaTime;
        if (m_rocketRate <= 0)
        {
            m_rocketRate = 0.1f; //每隔0.1秒發射一次子彈
            if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
            {
                //Instantiate函數動態的創建子彈游戲體 發射子彈
                Instantiate(m_rocket, m_transform.position, m_transform.rotation);
            }
        }
}

  下面是創建敵人...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM