當前位置:首頁 » 游戲類別 » 電腦代碼製作射擊游戲

電腦代碼製作射擊游戲

發布時間: 2022-08-31 12:48:24

A. FLASH CS6 AS3 ,製作射擊類游戲時,若想使空中有隨機的戰機產生,應該怎樣編寫代碼

一種是隨機時間生成
一種是隨機位置生成

基本是2種結合用

弄個計時器,然後在計時器里判斷當前過去時間

在需要的時間,生成一個戰機就行了,然後可以自己設定戰機的位置
基本概念就是這樣

B. 怎麼製作槍戰游戲

槍戰游戲主要應用的代碼
1.滑鼠跟隨 startDrag(this, true);用來做標准器
2.層級別的控制 swapDepths();
3.碰撞檢測 hitTest(_root.gun.hit)
4.動態載入敵人: _root.attachMovie();
5.動態文本框製作 顯示分數

製作流程:
1.准備一個瞄準器MC,內含開火的動畫
2.敵人MC一個,內含敵人中彈動畫,在庫中將敵人MC連接ID命名為「man"
3.動態文本框 編寫代碼: 首先主時間軸第一幀AS:
// ------主時
間軸代碼----------------
// 將滑鼠隱藏
Mouse.hide();
// 初始設置分數為0
scores = 0; 此變數必須和分數文本框的變數名對應
// 封裝代碼,建立新的函數"man"
function man() {
// 復制庫中ID為「man"的MC到主場景,命名為「man」+_root.i,層級別為_root.i
// 注意:_root.i沒有設置初始值,所以默認為無。
// _root.i++,就是_root.i+1
_root.attachMovie("man", "man"+_root.i, _root.i++);
// 設置新MC的位置
// 將復制出來的新MC放到x軸為0-550之間,y軸為0-400的隨機坐標上
_root["man"+_root.i]._x = random(550);
_root["man"+_root.i]._y = random(400);
}
// 執行新函數
man();
然後將瞄準器MC拖到舞台實例名為「gun」在其MC上寫AS:
// ----------準星MC的代碼--------------
onClipEvent (enterFrame) {
// 實現滑鼠跟隨,並且所定滑鼠到此MC的注冊點
startDrag(this, true);
}
onClipEvent (mouseDown) {
// 當滑鼠按下的時候運行到此MC第3幀(開火動畫)執行
gotoAndPlay(3);
}
onClipEvent (load) {
// 設置次準星層級別為9999,數字越大層級越高,以免準星被敵人覆蓋
this.swapDepths(9999);
}
此MC內部有個開火的動畫在開火動畫這一段加上一隱形MC,實例名為「hit」
製作敵人MC內部
敵人MC內部,第一幀為沒有中彈時候的畫面,在這幀再加入一隱形MC,加AS:
// 碰撞檢測
onClipEvent (enterFrame) {
// 如果如果檢測到於準星MC里的hit發生接觸就在上一級跳轉到第5幀(被毖了)執行.
if (hitTest(_root.gun.hit)) {
_parent.gotoAndPlay(5);
}
}
5幀以後為中彈後死亡的動畫,在最後一幀加AS:
// 分數加100
_root.scores += 100;
//運行man的函數 復制敵人
_root.man();
// 刪除此MC
removeMovieClip(this);

C. 如何使用cocos2d製作一個太空射擊游戲

在這個教程裡面,你將會學習到如何開發一個太空射擊游戲!

你可以使用加速計(重力感應)來控制飛船的移動,並且可以點擊屏幕來發射激光武器。

如果你對於如何製作基於cocos2d-x3.0的游戲完全陌生的話,這個教程可以幫助你!你將會學習到,如何從頭至尾構建一個完整的游戲,不需要任何的經驗!

假如你對cocos2d-x3.0編程完全陌生的話,那麼你可能需要先學習一下相關的教程了。

這個教程對於中級開發者來說也非常好,因為它覆蓋了一些比較高級的主題,比如視差滾動(parallax scrolling),預分配Node,加速計移動以及粒子系統的使用。

話不多說,直入主題!
添加相關資源文件
為了做這樣一個手機游戲,你將需要一些跟太空主題相關的圖片資源和聲音資源。

你可以直接下載我老婆製作的太空游戲資源。

因此,請直接下載吧,並且把它解壓到你的項目的Resources目錄下面去。

如果你很好奇,你可以隨便看看你剛剛向工程裡面添加進去了一些什麼東西。下面是完整的內容列表:

Backgrounds: 一些背景圖片,你等下會使用它們來製作一個滾動背景。裡麵包含星系,太陽,和空間異常(它移動速度比較慢),還有一組空間塵埃圖片(它們會出現在背景前面,而且會移動地稍微快一點)
Fonts: 使用 Glyph Designer製作的點陣圖字體,我們將使用這些字體來在游戲中顯示文字。
Particles: 使用 Particle Designer製作的一些特殊的粒子效果。 在這里,我們用來創建星星飛動的效果。
Sounds: 一些與太空相關的背景音樂和音效。使用 Garage Band 和 cxfr製作的。
Spritesheets: 一張格式為pvr.ccz的大圖片,裡麵包含了游戲中將要用到的許多小圖片,比如隕石,太空船等。這個文件使用 Texture Packer製作的---如果你想使用pvr.ccz文件格式的話,你可能就需要使用這個工具。當然pvr.ccz格式的優點就是文件小,載入速度快。
如果你還沒安裝上面任何一款工具的話,也不用擔心!對於這個教程來說,你完全不需要他們,你可以使用我已經製作好的這些資源就夠了。以後,如果有條件,你可以再去試試上面提到的工具。
你可能會奇怪,為什麼要把所有的這些圖片都弄成這樣一張大圖呢?因為,首先,它可以幫助節省內存,同時還可以提高性能。

接下來,讓我們開始coding吧!:)

添加一個太空船
首先,讓我們在屏幕上添加一艘太空船吧!

讓我們試試,看是否工作!打開HelloWorld.h,在HelloWorld類開頭加入下面代碼(在已有public:行的上面)

SpriteBatchNode *_batchNode;
Sprite *_ship;
上面的代碼創建了兩個私有實例變數 – 一個是SpriteBatchNode,一個是太空飛船精靈。
現在切換到HelloWorldScene.cpp,在init()方法里,刪除從注釋「2. add a menu item」到方法最後的所有代碼,加入下面代碼:

_batchNode = SpriteBatchNode::create("Sprites.pvr.ccz"); // 1
this->addChild(_batchNode); // 2
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Sprites.plist"); // 3

_ship = Sprite::createWithSpriteFrameName("SpaceFlier_sm_1.png"); // 4
auto winSize = Director::getInstance()->getWinSize(); // 5
_ship->setPosition(Point(winSize.width *0.1, winSize.height *0.5)); // 6
_batchNode->addChild(_ship,1); // 7
注意這些代碼與你過去使用的Objective-C版的cocos2d 非常類似。API是有很多相同的地方的,僅僅是有一些與C++的語法不同。

編譯運行,你應該可以看到你的船出現在屏幕上
增加視差滾動
接下來,我們會加入宇宙背景,使它以視差滾動這種很酷的方式來滾動。

首先,我們不得不在所有的類名前面加上cocos2d::這個名字空間,這太煩人了!所以在HelloWorld.h類聲明前加入下面行:

USING_NS_CC;

接著在HelloWorld的private部分加入一些新的變數(注意我們不再需要加cocos2d前綴):

ParallaxNodeExtras *_backgroundNode;
Sprite *_spacest1;
Sprite *_spacest2;
Sprite *_planetsunrise;
Sprite *_galaxy;
Sprite *_spacialanomaly;
Sprite *_spacialanomaly2;

然後,在HelloWorldScene.cpp的init方法中,return語句前加入下面代碼:

// 1) Create the ParallaxNodeExtras
_backgroundNode = ParallaxNodeExtras::node();
this->addChild(_backgroundNode,-1);

// 2) Create the sprites we'll add to the ParallaxNodeExtras
_spacest1 = Sprite::create("bg_front_spacest.png");
_spacest2 = Sprite::create("bg_front_spacest.png");
_planetsunrise = Sprite::create("bg_planetsunrise.png");
_galaxy = Sprite::create("bg_galaxy.png");
_spacialanomaly = Sprite::create("bg_spacialanomaly.png");
_spacialanomaly2 = Sprite::create("bg_spacialanomaly2.png");

// 3) Determine relative movement speeds for space st and background
Point stSpeed = Point(0.1, 0.1);
Point bgSpeed = Point(0.05, 0.05);

// 4) Add children to ParallaxNodeExtras
_backgroundNode->addChild(_spacest1,0,stSpeed,Point(0, winSize.height / 2));
_backgroundNode->addChild(_spacest2,0,stSpeed,Point(_spacest1->getContentSize().width, winSize.height / 2));
_backgroundNode->addChild(_galaxy, -1, bgSpeed,Point(0, winSize.height *0.7));
_backgroundNode->addChild(_planetsunrise, -1, bgSpeed,Point(600, winSize.height * 0));
_backgroundNode->addChild(_spacialanomaly, -1, bgSpeed,Point(900, winSize.height *0.3));
_backgroundNode->addChild(_spacialanomaly2, -1, bgSpeed,Point(1500, winSize.height *0.9));
編譯運行,你應該可以看到一個宇宙場景的啟動
而,這還不是很有趣,因為還沒有任何東西在動!

為了移動太空塵埃和相關背景層,你只需要移動一樣東西就可以了,ParallaxNodeExtras。對於移動parallax node的每一個y值,灰塵就會移動0.1y值,同時背景會移動0.05y值。

為了移動parallax節點,你只需要飛一幀更新一下它的位置就可以了。打開HelloWorldLayer.m文件,加入下列的代碼:(添加位置注意看注釋)

this->scheleUpdate();

void HelloWorld::update(float dt)
{
Point backgroundScrollVel = Point(-1000, 0);
_backgroundNode->setPosition(_backgroundNode->getPosition()+backgroundScrollVel*dt);
}
編譯並運行工程,你會看到,使用parallax來做視差滾動效果真是太簡潔了!

D. vb程序設計射擊游戲

Private Declare Function GetObject Lib "gdi32 "
Private Declare Function GetBitmapBits Lib "gdi32 "
Private Declare Function SetBitmapBits Lib "gdi32 "
Dim PicBits() As Byte, PicInfo As BITMAP, Cnt As Long
Private Sub Command1_Click()
Set Picture1.Picture = Clipboard.GetData(vbCFBitmap)
GetObject Picture1.Picture, Len(PicInfo), PicInfo
Debug.Print PicInfo.bmWidth * PicInfo.bmHeight * 3
ReDim PicBits(1 To PicInfo.bmWidth * PicInfo.bmHeight * 3) As Byte
GetBitmapBits Picture1.Picture, UBound(PicBits), PicBits(1)
For Cnt = 1 To UBound(PicBits)
PicBits(Cnt) = 255 - PicBits(Cnt)
Next Cnt
SetBitmapBits Picture1.Picture, UBound(PicBits), PicBits(1)
Picture1.Refresh
End Sub

E. 怎樣自己製作單機游戲

如果只是單純想自己動手做一個游戲出來的:

1、應該首先考慮非編程途徑。比如 PC 和 Mac 上面都有一些 game maker 軟體,可以幫助理解游戲的製作過程。

2、再進一步的話,可以試試用 jme 或 flash 製作游戲。

3、再進一步的話,可以學習使用某種游戲開發庫,常見的有:NDS 的 homebrew SDK、PSP 的 homebrew SDK、cocos2d (iOS 游戲)、unity3d (iOS/android)、XNA (PC/Xbox)。

線上+線下實體課免費預約試學+限時VIP會員—可下載網校APP點這里獲取游戲設計初級+中級+高級課程全部學習資料

如果學習製作單機游戲的話,可以到王氏教育進行學習製作。王氏教育與美國創新巨頭公司Azooca和夏威夷萬國大學,達成深度合作。定期組織學生赴美實習深造,讓王氏教育的學生都有平等的機會。帶上夢想,一起到美國萬國大學學習「好萊塢」式的先進技術。到Azooca公司參與項目製作,獲得實習證明。

F. 射擊小游戲VB代碼

那位大俠做起了,給偶也來個源碼嘛。謝謝

G. 如何正確的使用UNITY3D製作FPS游戲

第一部分:簡介
這個教程中,我們詳細了解下如何製作一個簡單的第一人稱射擊游戲(FPS)。其中將介紹一些基本的3D游戲編程的概念和一些關於怎樣如游戲程序員般思考的技巧。

前提

這個教程假定你已經熟悉軟體Unity基本操作,掌握了基本的腳本概念。

創建新工程
下載FPS_Tutorial.zip壓縮文件,解壓,在Unity中打開工程文件。
從Unity安裝目錄導入Standard Assets資源包。
導入工程後,你會在Unity工程面板中的「Standard Assets」文件夾下看見這些資源內容。當我們導入新資源時,最好安裝按照資源功能對其分組,例如:火箭、爆炸、音頻等。

設置游戲環境
導入資源後,你會注意到在工程面板中有許多文件夾。
工程面板中,從文件夾「Object/mainLevelMesh」中選擇「mainLevelMesh」。
在參數面板,FBXImporter選項中,你會發現「Generate Colliders」選項,勾選此選項。如果不做這一步,游戲中玩家會穿越地面直接掉下深淵(實際是開啟「碰撞」,產生交互)
把「mainLevelMesh」拖放到場景中。
場景中不需要添加燈光,這關全部場景已經全部應用了燈光貼圖。整個場景對所有燈光進行了燈光貼圖渲染,使用了「預烘焙陰影」。燈光貼圖對顯示效果有很大幫助,特別是復雜燈光環境。
下面可以在場景中添加一個角色了。

添加主要角色
下面在場景中增加一個可以操控的角色物體。Unity針對第一人稱射擊游戲預置了許多內置的控制器,在工程面板Standard Assets->;Prefabs下。
添加第一人稱控制器,點擊工程面板Standard Assets旁邊的小三角,彈出資源列表。找到Prefabs文件夾,點擊小三角形,彈出資源列表。把「First person controller」拖到場景里。

這時場景中會出現一個代表玩家的圓柱體,三個大箭頭代表物體在3D空間中的位置(如果沒有看見箭頭,選擇物體,按「W」鍵),白色面代表物體當前視角。現在FPS控制器處於默認視角位置,通過移動它可以改變游戲視野。把角色移動到游戲環境關卡地面上面的位置。

Main Camera現在已經沒有用處了,可以刪掉了。
點擊「Play」鍵,現在應該可以通過使用滑鼠和鍵盤在本關卡地形中四處移動了(游標或者「W,A,S,D」)
現在我們創建了一個非常簡單的FSP,下面我們給角色添加武器。

增加武器
下面我們將給游戲角色一個類似榴彈的物體,可以在游戲中發射。要實現這個功能,需要創建一些腳本語言來在Unity中告知這個武器如何動作。

那麼我們具體要實現什麼呢?我們要使游戲角色能在攝像機的任意位置開火。但是,我們還是首先來思考一下游戲角色和武器。游戲角色游戲中是第一人稱的視角,所以攝像機的位置與眼睛平行。如果玩家使用武器射擊,武器應該是在角色的手部位置開火而不是眼睛的位置。這樣我們就要增加一個「game object」(游戲物體)來代表榴彈發射器,同時把它放置在游戲角色手持武器時武器所處的位置。這樣就保證了開火的位置沒有問題。

創建武器發射器
首先,創建一個「game object」代表榴彈發射器。游戲物體是3D世界中的任一物體(角色、關卡、聲音),零件就是游戲物體的屬性。因此我們還需要對游戲物體添加零件:
從主菜單欄選擇GameObject>Great Empty,並在層級面板中(Hierarchy)命名為「Launcher」。注意,空物體在場景中是看不見的,只是用它來作放置飛彈發射器。

現在在場景中把視野推近到FPS控制器,便於我們放置武器發射器。
層級面板中選擇FPS控制器,確保滑鼠處於場景視圖中,按「F」鍵。使窗口以當前選擇的物體為中心。
層級面板中選擇發射器,主菜單欄選擇Game Object>Move to view。注意發射器如何移動到FPS控制器附近的。然後使用手柄,把發射器移動到大概角色手部的位置。

注意:可以通過設置這個物體的位置來設定游戲角色是左撇子還是右撇子,不需要寫代碼。
使Unity窗口模式是「2by3」模式(window>Layouts>2by3),點擊播放鍵(play)。確保層級面板中點選了發射器,四處移動角色,同時觀察場景窗口。你將發現發射器並沒有隨著角色一起運動(現在再次點擊播放鍵停止運行游戲)
下面來解決這個問題,層級面板中,把發射器拖放到FPS控制器下面的主攝像機上。彈出的對話框點擊「是」。再次運行游戲,觀察場景窗口,發射器已經和角色運動一致了。這樣我們就把發射器與攝像機關聯起來了。

創建飛彈
下面我們來創建在玩家點擊開火鍵時能夠發射出來的飛彈。
我們先用一個簡單物體-球體-代替飛彈。Unity主菜單欄點擊Assets>Creat>;Prefab創建一個預制(Prefab)物體,命名為「Missile」
創建一個球體(GameObject>Create Object>Sphere)
層級面板中,拖放球體到飛彈預制物體上(Missile),這時預制物體圖標會變化。你可以從層級面板中刪除球體。

技巧:游戲運行中產生的任何游戲物體都應該是預制物體(Prefab)。
編寫飛彈發射器腳本
FPS控制器是一個包含了幾個游戲物體和部件的預制物體。FPS控制器本身是一個只能沿Y軸旋轉的圓柱體,因此,如果我們直接把發射器腳本賦予FPS控制器的話,是實現不了上下開火的。所以我們把腳本賦予控制器中的能夠四周轉動的主攝像機。

下面我們來編寫第一個描述發射器行為的JavaScript代碼。
點擊Assets>Greate>JavaScript,創建一個空的JavaScript文檔。一個名為「NewBehaviourScript」資源將會出現在工程面板中,把它更名為「MissileLauncher」

技巧:通過Unity>;Preferences點擊External Script Editor,可以自定義外部腳本編輯器。
工程面板中創建一個「WeaponScripts」文件夾,放置我們所有的武器腳本。把MissileLauncher腳本和飛彈預制物體(Missile Prefab)拖到這個文件中。

我們來看看飛彈發射器的完整JavaScript腳本。
進一步思考一下,我們到底想實現什麼效果?我們要檢測玩家是否按了開火鍵,然後產生一枚飛彈,然後把它沿著玩家朝向的方向按照一定的速度發射出去。我們仔細的解剖一下腳本:
var projectile: Rigibody;
var speed=20;
function Update( )
{
這是腳本的開頭部分,定義了一些屬性,開啟了「Update」的功能
if(Input.GetButtonDown(「Fire1」))

首先我們要檢測玩家是否按了開火鍵,「開火1」映射的是滑鼠左鍵和當前配置的鍵盤上的按鍵(可以通過主菜單欄的Editor>;Project Settings>Input設定)
{
var instantiatedProjectile: Rigidbody=Instantiate(
projectile, transform.position,transform.rotation);

我們用變數來定義產生的物體。變數的類型是Rigibody(剛體),因為飛彈是具有物理屬性的。
Unity中產生新物體使用的函數是Instantiate,它有三個參數,分別是:產生的物體、產生物體的3D空間位置、物體的旋轉。它還有另一個語法結構,參照API手冊,這里我們只使用這種結構。

第一個參數,projectile,代表我們想創建的物體。那麼到底發射什麼物體?具體產生的物體是可以手動設定的。實現方法:把Projectile定義為函數的外部變數,這樣就可以在參數面板中顯示出來。發射的物體也可以通過代碼來創建,但如果你想使一個變數可調的話,還是用上面的方法。

第二個參數,transform.position,使產生的物體與發射器的空間位置一致。為什麼就是發射器呢?因為如果要使飛彈產生的位置沒有問題,腳本就要關聯給發射器。(transform讀取的transform數據就是被賦予腳本的游戲物體transform數據)

第三個參數transform.rotation,與第二個類似,只是它的值與發射器的旋轉值是一樣的。

代碼的下一部分使飛彈產生運動。為了實現運動,我們要賦予飛彈一個速度,但是在哪個方向上(X,Y,Z)產生速度呢?在場景中,點擊FPS控制器,出現運動箭頭(如果沒有出現,按「W」鍵),其中一個箭頭是紅色、一個是綠色、一個是藍色。紅色代表X軸,綠色代表Y軸,藍色代表Z軸。因為藍色指向的方向,與玩家面朝的方向一致,所以我們要在Z軸上給飛彈一個速度。

(Velocity)速度是instantiatedProjectile的一個屬性。我們怎麼知道的呢?因為instantiatedProjectile是剛體的一種,如果我們看看API手冊,我們就會知道速度是剛體的屬性中的一種。同時也看看剛體的其它屬性。要設置速度,我們就必須在各個軸向上設定數值。但還有個小問題。3D空間中的物體一般使用兩種坐標模型:本地坐標系和世界坐標系。在本地坐標系中,物體的軸向只與物體本身有關。在世界坐標系中,軸向是絕對的,例如:向上,對所有物體來講向上的方向都是一樣的。

Rigidbody.Vellocity剛體物體速度必須使用世界坐標系。因此,定義速度時,需要把本地坐標系中的Z軸(朝前的方向)向轉換成世界坐標系中的相應方向。可以用函數transform.TransformDirection,它有三個向量作為自變數。變數speed也應該定義成外部變數,便於後面在編輯器中直接調節數值。

最後,我們要關閉飛彈與游戲角色之間的碰撞。如果不這樣做的話,飛彈產生的時候就可能與角色發生碰撞。可以在API手冊IgnoreCollision下查詢詳細信息。

MissileLauncher.js全部完整代碼如下:

把腳本MissileLauncher賦予FPS控制器中的發射器。在層級面板中點擊發射器,檢查一下參數面板下面是否顯示了MissileLauncher script。
先前創建的飛彈的預制物體還沒有與腳本中的變數projectile創建關聯,我們需要在編輯器中創建一下。變數projectile只能與剛體關聯,因此,首先我們要賦予飛彈一個Rigidbody。

工程面板中點擊飛彈,然後從主菜單欄選擇Components>;Physics>Rigidbody。這樣將會給我們想開火發射的飛彈一個剛體屬性。我們必須確保想在游戲中發射的物體類型與腳本中外部變數要求的物體類型是同一類型的物體。

創建飛彈與腳本中變數projectile的鏈接。首先在層級面板中點擊發射器,然後把飛彈的預制物體從工程面板中拖拽放置在發射器參數面板中MissileLauncher script部分上。

運行游戲的話,你會發現點擊開火鍵可以發出一個受重力影響的小球了。
飛彈爆炸
下面,當飛彈與其他物體發生碰撞時,增加一個爆炸效果。要實現這個效果,我們要編寫一段新腳本賦予飛彈。
創建一個新腳本,命名為Projectile。拖放到工程面板的WeaponScripts文件夾下。

那麼我們想要腳本Projectile實現什麼樣的效果呢?我們要檢測飛彈是否發生碰撞,然後在碰撞點產生一個爆炸效果。代碼如下:

函數OnCollisionEnter內的程序代碼的作用是計算被賦予腳本的物體是否與其他物體發生碰撞。

在函數OnCollisionEnter中我們主要是要實現在3D空間中飛彈發生碰撞的點產生一個新爆炸。那麼在何處了碰撞的呢?函數OnCollisionEnter就有個記錄這個信息的功能。碰撞發生的點的信息儲存在變數ContactPoint中。

這里我們使用函數Instantiate來創建一個爆炸。我們已經知道函數instatiate有三個參數:(1)產生的物體(2)物體的3D空間位置

(3)物體的旋轉。
第一個參數,後面我們將會賦給一個帶粒子系統的游戲物體。同時我們還想通過編輯器來實現這個功能,所以我們把變數設置為外部變數。
第二個參數,爆炸產生的點的位置,就是碰撞發生的位置。
第三個參數,爆炸旋轉的設置,需要解釋一下。我們需要爆炸體的Y軸方向與飛彈和其他物體發生碰撞的那個表面的法線方向一致。這就是說如果是牆面那麼爆炸就面向外,如果是地板就朝上。那麼實際上我們就是要使爆炸體在本地坐標系的Y軸與飛彈與之碰撞的物體的表面法線方向(世界坐標系)一致。

最後,我們要讓飛彈碰撞後就從游戲中消失,通過函數Destroy()實現,它的參數是gameObject(gameObject代表被賦予這個腳本的物體)。
Projectile.js全部代碼如下:

把腳本賦予飛彈預制物體(Missile prefab)。
下面我們要創建飛彈發生碰撞時所產生爆炸的爆炸效果物體。
首先,創建一個新的預制物體(命名為Explosion)用來存放爆炸效果資源。
標准資源包中(standard asset)有個不錯的爆炸預制物體,粒子系統和燈光都設置好了。把這個爆炸預制物體(在Standard Assets/Particles/explosion中)拖放到層級面板。

調節這個爆炸效果的各個參數直到你覺得滿意,然後把它從層級面板中拖放到工程面板中的爆炸預制物體(Explosion Prefab)中。
現在把爆炸配置給飛彈:
點選飛彈預制物體(Missile Prefab),在參數面板Explosion變數欄,拖放工程面板中的爆炸到上面。

定義爆炸的行為
下面我們要再創建一個腳本來定義爆炸自身的特性。
創建一個新的腳本-Explosion,放在Weapons文件夾中,雙擊腳本進行編輯。

腳本中另一個常用函數稱為Start()。當它配置給的物體是在游戲中產生的時候,函數Start()中的代碼只被執行一次。我們要實現的效果就是在一定時間後,在游戲中刪除爆炸。我們通過函數Destroy()的第二個參數實現,它的作用是定義執行刪除前的時間長度。

變數explosionTime設置成外部變數,方便調節。
新建腳本插入以上代碼時,要刪除函數Update()。
把腳本Explosion賦予給爆炸預制物體。

音效
目前的游戲世界太安靜了,讓我們給爆炸效果增加點音效。
首先,給爆炸預制(Prefab)添加一段音頻。
給爆炸添加音效前,我們首先要添加一個音源部件(Audio Source),在主菜單點擊Component—Audio—Audio Source。你會發現音源部件有一個Audio Clip的屬性。
把「RocketLauncherImpact」音效添加給爆炸預制體的AudioClip外部變數。Unity支持多種音頻格式。
運行游戲,發射飛彈的時候就有聲音了!

添加圖形界面
下面我們來添加GUI,有點像頭部顯示設備(HUD)。我們要做的GUI非常簡單,就一個準星。
添加一個準星:
工程欄中創建一個GUI的文件夾。
創建一個新腳本,命名為「準星」(Crosshair),拖到GUI文件夾。
Crosshair中寫入下面的腳本:

首先我們設定了兩個變數。第一個變數是定義我們將要用可選的方式來選擇圖形紋理。第二個變數定義了一個方形區間,它是圖形紋理在屏幕上的位置范圍。
在start( ) 中函數用來設定圖形紋理在屏幕上的位置。函數中,有四個參數,用來定義方形區域的大小和位置。第一個參數定義了方形區域的左邊框,第二個是底邊框,第三和第四個參數定義了寬和高。

OnGUI( )函數中,使用GUI類程序來讓圖形顯示在屏幕上。DrawTexture( )函數的參數position和crosshairTexture將使準星顯示在屏幕的中央位置。
保存腳本。
創建一個新的空物體,命名為「GUI」。
把腳本「Crosshair」賦予給GUI物體。
點選GUI物體,把在文件夾Texturelaim下的欲使用的圖形拖放到參數面板變數Crosshair Texture中。
運行游戲,屏幕中就會有準星顯示了。

物理特效:
現在,我們想要游戲中的物體效果越真實越好,這是通過添加物理特效實現的。在這一節中,我們將在環境中添加一些物體,他們能被飛彈擊中後有相應的反應。首先有幾個新概念要解釋下。

校正(Update)
先前,我們在函數Update()中寫入代碼,這樣可以在每一幀都執行其中的代碼。其中有個例子是檢測玩家點擊開火鍵。幀速並不是一個固定值,它是根據場景復雜度等因素來定的。各幀之間的時間差會導致不穩定的物體反應。因此,如果想在場景中添加有物理反應的物體(剛體等),代碼就應該寫在函數FixedUpdate()中。Unity中deltaTime的值用來測定渲染兩個連續幀的所用時間。

一般而言,函數Update與FixedUpdate之間的區別如下:
Update()-其中的代碼通常用於角色行為、游戲邏輯等。這個函數中的deltaTime值並不是固定的。
FixedUpdate()-其中的代碼通常用於剛體物體(物理屬性的行為)。函數中deltaTime的值通常是固定的。
FixedUpdate函數被調用的頻率是主菜單中Edit-Project Settings-Time的FixedTimestep屬性確定的,當然也是可以更改的。第二個屬性Time Scale是讀取每秒的幀速和相應的倒數值。

技巧:定義FixedTimestep值時,要注意把握好一個平衡:值越小,物理效果越真實越好,但影響游戲運行速度。應該同時確保游戲運行速度和物理效果的真實性。
最後說一下yield,它相當於暫停當前正在執行的函數。
回到游戲,我們想實現的效果:
使玩家可以發射飛彈(已經實現了)。

如果飛彈與其它剛體物體發生碰撞,檢測其范圍類是否有其它被賦予剛體屬性的物體。
對爆炸沖擊力范圍內的每個剛體物體,均給予一個upwards方向上的力,使它們對飛彈產生反應。
讓我們看看修改後的爆炸腳本(Explosion Javascript)

首先檢測下飛彈落點周圍是否有帶碰撞器的物體。函數Physics.OverlapSphere()有兩個參數:3D位置和半徑值,然後返回一組檢測到的在半徑內的碰撞器的數組。

一旦得到這些數組後,就會對每個對應碰撞器的剛體物體一個在特定方向上的力。

然後我們在飛彈的炸點處,向上的方向增加一個力(ExplosionPower)。但是,爆炸效果是隨著距離而遞減的,作用力大小不能在整個半徑內都一樣。圓周位置的剛體物體受到的作用力應該比炸點中心處小。函數把這種效果也考慮在內的。通過調節外部變數explosionPower和explosionRadius的值,可以較容易的得到想要的效果。

H. 我想製作第一人稱射擊游戲,誰知道有什麼軟體可以做到

目前對於業余的製作愛好者來說,只有三款軟體提供學習。
第一款是:rpg maker xp,中文名:RPG製作大師XP,是製作RPG類游戲。而rpg maker vx是XP的升級版。
第二款是:fps製作大師,製作類似於CS,CF類型的游戲。
第三款是:動作游戲製作大師,英文名忘記了,這款軟體可以製作像拳皇等類型游戲。
如果你要自己去做什麼游戲,勸你一句,除非你是去做專業游戲,但是對於一個人的能力有限,即使你一個人能做的出專業游戲,光找素材,描繪等方面就要累死你。還要額外的進行代碼,編程,更重要的是必須要理解c++等一系列語言。

只有一個團隊才能做的出一部專業的好游戲來。
對於你個人來說,僅僅只能做一部業余游戲,所以還是推薦你用以上的三款軟體,我記得還有個ARPG製作大師。

熱點內容
絕地求生未來之役比賽為什麼進不去 發布:2023-08-31 22:07:08 瀏覽:1500
dota2位置什麼意思 發布:2023-08-31 22:00:04 瀏覽:939
lol電競是什麼樣子 發布:2023-08-31 21:58:40 瀏覽:1397
絕地求生八倍鏡的那個圓圈怎麼弄 發布:2023-08-31 21:58:31 瀏覽:1487
lol龍龜一個多少金幣 發布:2023-08-31 21:55:07 瀏覽:845
王者如何改游戲內名稱 發布:2023-08-31 21:55:06 瀏覽:1128
游戲主播打廣告是什麼意思 發布:2023-08-31 21:55:06 瀏覽:1832
絕地求生如何免費拿到ss7賽季手冊 發布:2023-08-31 21:52:13 瀏覽:1016
pgg是哪個國家的戰隊lol 發布:2023-08-31 21:52:07 瀏覽:904
一個人的時候才發現游戲很沒意思 發布:2023-08-31 21:49:24 瀏覽:1536