1. 程式人生 > >【cocos2d-x 3D實戰】開發一款體素遊戲--1. 準備工作

【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.png

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); }

效果圖:

car1.png

在下一篇文章中再加入調整攝像機的視角的觸控響應函式。

作者水平有限,對相關知識的理解和總結難免有錯誤,還望給予指正,非常感謝!