【cocos2d-x 3D實戰】開發一款體素遊戲--1. 準備工作
本系列文章記錄下使用cocos2d-x開發一款體素風遊戲的過程,遇到的問題,解決辦法及收穫。使用了cocos2d-x的3D功能,以下簡稱c3d
前言
最近cocos官網推薦了一款使用cocos2d-x開發的3D遊戲,叫《Steps》(信步),是一個烏克蘭小夥的作品,是一款休閒小遊戲,正是類似MineCraft那種體素(voxel)風格的,看起來效果還不錯,於是自己也打算嘗試搞一個這樣的遊戲玩玩。
本文是使用c3d開發一款體素風遊戲系列的第一篇,記錄了開發環境的配置和介面編輯器的選擇和實驗。
引擎:cocos2d-x 3.10
1. 新建cocos工程
使用cocos命令列工具建立即可,建議使用lua型別,因為對3D效果的除錯可能要頻繁修改UI部分要頻繁重啟遊戲。
2. 模型建立和匯出
使用MagicaVoxel創建出一個3D小汽車,如下圖所示:
MagicaVoxel比較容易上手,
畫刷工具有六種,
L 畫線
C 圓
P
V 自由向量
F 面
B 方塊
畫刷操作型別有四種:
Attach 附加
Erase 擦除
Paint 畫 (覆蓋原體素)
Move 整體移動
自己都實踐操作下就知道其中區別了
YouTube上有很多系列教程,跟著視訊操作很快就能上手,這裡的小汽車畫法是模仿下面這個視訊來操作的:
3. 在cocos中載入模型、展示場景
c3d支援MagicaVoxel匯出的obj格式檔案,同時還支援c3b, c3t兩種模型格式檔案後兩者是通過把fbx-conv工具由fbx檔案轉換而來,在cocos中使用c3b和c3t格式模型可以支援動畫等特性,而直接使用obj的話不能播放動畫。本文暫時直接載入obj檔案,後面會使用Blender把obj轉為fbx,再通過fbx-conv轉換為c3b和c3t, 以便於在cocos中播放3D動畫等功能。
為了簡單,我直接在cpp裡建了個Layer,載入上一步匯出的car1.obj:
#include "3d/House.h"
USING_NS_CC;
bool House::init () {
if (Layer::init()) {
loadModel();
setCamera();
return true;
}
return false;
}
void House::loadModel() {
const char *modelName = "3d/car1.obj";
auto house = Sprite3D::create(modelName);
house->setCameraMask((unsigned int)CameraFlag::USER1);
addChild(house);
}
void House::setCamera() {
auto size = Director::getInstance()->getVisibleSize();
auto camera = Camera::createPerspective(60.0, size.width / size.height, 10, 100);
camera->setCameraFlag(CameraFlag::USER1);
camera->setGlobalZOrder(10);
camera->setPosition3D(Vec3(40, 40, -20));
camera->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0));
addChild(camera);
}
效果圖:
在下一篇文章中再加入調整攝像機的視角的觸控響應函式。
作者水平有限,對相關知識的理解和總結難免有錯誤,還望給予指正,非常感謝!