» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 23 12
发新话题
打印

indie developer用哪个引擎好?更新:MVP制作完成!1080P画面秒杀Wii U!

posted by wap, platform: Firefox

花了3个小时看视频,2个小时做游戏,终于完成游戏RC1了!

http://1drv.ms/1mU013k


=========

有经验的介绍一下。

本帖最后由 业内消息 于 2014-4-29 13:01 通过手机版编辑


TOP

posted by wap, platform: BlackBerry (Z10)

多谢大家的建议,我自己也搜了一下,决定用xna了!



TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @yilaguan2k2  于 2014-3-23 11:25 发表
XNA?别犯傻了。

要是上个月我肯定让你用Unity。
但这个月我就推UE4,只要19刀的初始成本。全部C++开发,不需要去搞什么脚本语言了。工具链比其他两个完善得多,几乎不需要程序员分心去搞工具。源码完全开放,这个是Unity和Cry压根没法比的。
我c++还行,那就ue4了!


TOP

posted by wap, platform: BlackBerry (Z10)

说明一下,做游戏就我一个人。以前做过ios, android 和 wp的app,精通java和网站,没接触过3d.

TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @FXCarl  于 2014-3-24 01:11 发表
按照现在这个阶段来问引擎的话,可以先自问几个问题

1 我要做的游戏是什么
2 3D 对游戏有什么用
3 我打算什么时候做出来

答案摸底是这样的

第一个问题,一般很多时候动手时都能说个一二。我要做个 XXX 的玩意,这个我们就不解说了
第二个问题,如果你想说的是我希望游戏看起来好看,或者说我希望画面牛逼 …… 那你搞错了,拼画面的事情委实轮不到 indie 来干,除非你自己是艺术家
第三个问题,这个问题意味着你是要成果还是享受过程,享受过程不在意结果,那用多复杂的工具都没所谓,享受结果 …… 那只能用会用的,没有会用的要算学习成本

最后的悲剧结果一般是这样的,最后滚回去修改问题1的答案 …… indie 就是这样子的
成功的 indie 作品大多数是垃圾堆砌起来的一个偶然作品 …… 那些成功了得牛逼了的 indie 很多根本就是有行业背景的正规军出来搞小分队
很多多年 indie 之后逐步获得了成功的 indie 其实去行业里也是挑公司的节奏

所以LZ,其实你现在先摸个容易弄到的引擎先研究起来 …… 譬如 Unity,之后呢,慢慢一边实践一边修改自己的创意。会有成果的。
有人说你为啥推荐 Unity …… 我想说我其实更想推荐 Cocos 2DX 但肯定会被 LZ 鄙视不够高大上
主要是个人爱好,我在微软做full time ba,做3d游戏不为赚钱,也不会收钱。

TOP

posted by wap, platform: BlackBerry (Z10)

我去看看cocos2d先。

TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @yilaguan2k2  于 2014-3-24 01:30 发表
是呀,要早知道就一人单干,就不回这帖子了。
少于4人团队这三个都别搞,还是cocos2D得了,光是3D的美术流程和关卡编辑器一个人半年都搞不定。

unreal的Material editor确实是重要卖点,而且一直是UE美术流程的核心。去年试了一下Unity那个卖80刀的shader forge,瞬间就觉得现在UE4才19刀性价比无敌了。另外请关注一下这几天UE4的开放新策略,已经几乎没有门槛了。

我如果用自带素材,一个场景外加几个敌人的游戏,用ue4,unity都需要多少时间。因为不卖钱,所以素质不用太高。

TOP

posted by wap, platform: iPhone
引用:
原帖由 @yilaguan2k2  于 2014-3-24 01:30 发表
是呀,要早知道就一人单干,就不回这帖子了。
少于4人团队这三个都别搞,还是cocos2D得了,光是3D的美术流程和关卡编辑器一个人半年都搞不定。

unreal的Material editor确实是重要卖点,而且一直是UE美术流程的核心。去年试了一下Unity那个卖80刀的shader forge,瞬间就觉得现在UE4才19刀性价比无敌了。另外请关注一下这几天UE4的开放新策略,已经几乎没有门槛了。

Ue4新策略是什么?有链接吗?

TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @FXCarl  于 2014-3-24 02:09 发表
那我真心实意的给LZ推荐一条不坑的路 …… 你看加分的人就知道可定是在努力帮你。看到好的一定给分了啊

3D 游戏其实有两种设计流派。我们姑且把它分为中西 …… 因为你主要看到的就是这两类。

中式游戏重内核,轻表现 —— 说实在我很多时候认为这和计算机教育有关系,很多程序相关的课程设计都是从实现一个数据管理模块开始的(不跑题了)。这个所谓的轻重,已经形成了行业特性,你在将来咨询别人的时候,特别是深入到行业,会听到一些有意思的名词。这里趁早给你解惑一下。国内的策划经常挂在嘴上和策划沟通的词儿是“数据结构”,譬如玩家属性结构,任务数据结构等等。这种数据至上的表现从本质上代理着一种观点 —— 游戏本身是一个数值系统,画面是它的表现形式。所以国内也常常会说这游戏有没有必要 3D 之类的讨论。

这种内核本质上是两样东西,一个玩家的数据集,一堆数据集的操作器,以及一堆约束器。譬如从国内的思考的方式,打怪这件事情是  
我只要能做出一个场景几个npc的fps就行了。

TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @M9M8M7M6M5  于 2014-3-24 05:23 发表
其实各个引擎都各有优劣,我看来区别不大,关键是你想做到什么样的效果。所谓对症下药
楼主目前是属于入门阶段,建议随便找个引擎学3个月,觉得不行再换。
如果想做出高大上的效果那必须得是每个模块都有专业人士负责才能搞定。所以花时间找个合适的合伙人比自己去学要有效率很多
所谓用什么引擎根本不需要纠结,都是会什么就用什么。除非你unreal,ce,Unity3个都会,而且很精通,可能会小纠结一下。当然这种情况也不可能出现。
我们现在2个人用unreal也做得挺好。一个负责美术,一个负责程序,当然我们选unreal的前提是我们都有好几年的unreal使用经验。
如果我们是好几年的Unity那我们就也就用它了
所以还是那句话,会什么就用什么。先学一个再说。
多谢建议,那我还是先试试ue4吧。

TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @SONIC3D  于 2014-3-24 05:55 发表
本来不想说的。不过看了总结了你的特点:
1.会写程序,移动平台接触过
2.只有1个人
3.游戏是个简单的3D FPS
4.对3D没概念
5.对各类主流游戏框架或引擎没有经验

简单给你个简易:
用Unity。

我不说高大上的内容,只说几个原因:
1.你要做fps,不可能去2D fps吧,所以Cocos2dx暂时可以不用考虑了,新的3.0有有限的3D支持,但是工具链跟不上,会导致你浪费太多时间在非游戏核心设计上。所以就剩下Unity3D和UE了。
2.文档、示例。Unity3D和UE4秒Cocos2dx几百条街没问题。
3.易学性以及开发者生态圈。这个目前Unity3D最优。众多平台扩展和Assets Store,UE在Mobile平台晚了一步造成了巨大差距。
4.集成开发环境的学习曲线。Unity上手会非常快,UE无法做到,UE更倾向于团队内有清晰分工并有所专长,而非Indie。
5.价格。这个可能没有关系但是对于Indie项目来说,我倒是更简易能买断的Licence Model而非分成式。

LZ可以以做一个简单FPS为目标,学习一下3D的FPS gameplay该怎样做,3D的游戏项目在知识结构上自己有哪些方面需要补充。这些对于以后使用其他引擎来说都可以算一个准备工作。而Unity3D的好处是,你在用它做准备工作的时候,不会发现有太多的连带的周边坑需要填。可以让你更容易专注在"你"的项目中。半年后等UE4基本稳定,可以再根据其发展状况和市场上的Indie美术人员的知识结构决定是否换开发工具。
多谢,我决定用unity了!有好的英文tutorial吗

TOP

posted by wap, platform: Firefox

以前C++写的作业hangman,不知道水平够不够用unity, 请大家指点。

Source.cpp

#include <random>
#include <time.h>
#include "Hangman.h"

using namespace std;

string words[10] = { "COMPUTER"
                                        ,"INTERNET"
                                        ,"MONITOR"
                                        ,"TABLET"
                                        ,"PHONE"
                                        ,"SURFACE"
                                        ,"BANANA"
                                        ,"APPLE"
                                        ,"PEACH"
                                        ,"ORANGE" };
Hangman hangman;

int main()
{       
        srand ((unsigned int ) time(NULL));

        while (true)
        {
                hangman.setUp(words[rand() %10]);

                hangman.play();

                cout << "Play again? (yes/no) ";       
                string playAgain;
                cin >> playAgain;
                if (playAgain != "yes"
                {
                        break;
                }
        }

        cout<<"\nThank you for playing hangman."<<endl;

        system("pause";
        return 0;
}

Hangman.h

#include <iostream>
#include <string>
#include <set>

using namespace std;

class Hangman
{
public:
        Hangman();
        void setUp (const string);
        void play();

private:               
        const static int MaxNumberOfGuess = 7;
        string word;               
        unsigned int wrongGuess;
        unsigned int rightGuess;       
        set<char> guessedLetters;
       
        char getUserInput();
        string wordWithMask() const;
        void displayAvatar() const;
        void processGame(char);
        void displayGuess() const;
};

Hangman.cpp

#include "Hangman.h"

Hangman::Hangman()
{
}

void Hangman::setUp(string wordToGuess) // init or reset the game state
{
        Hangman::word = wordToGuess;
        Hangman::guessedLetters.clear();
        Hangman::wrongGuess = 0;
        Hangman::rightGuess = 0;
}

void Hangman::play() // one round play for one word
{
        while (true)
        {
                cout << "Guess the word: "<<string (Hangman::word.length(), 'X') << endl << endl;

                char input = getUserInput();
                processGame(input);
                displayAvatar();

                if (Hangman::wrongGuess == Hangman::MaxNumberOfGuess)
                {
                        cout << "...GAME OVER..." << endl << endl << endl;
                        cout << "Word:" << Hangman::word << endl << endl;
                        break;
                }

                displayGuess();

                if (Hangman::rightGuess == Hangman::word.length())
                {
                        cout << "Word: " << Hangman::word << endl << endl;
                        cout << "Congratulations!!! You guessed my word." << endl;
                        break;
                }
        }
}

string Hangman::wordWithMask() const
{
        string maskedWord = Hangman::word;

        for (string::iterator it = maskedWord.begin()
                ;it != maskedWord.end()
                ;it++)
        {
                bool letterIsGuessed = false;
                for (set<char>::iterator it2 = Hangman::guessedLetters.begin()
                        ;it2 != Hangman::guessedLetters.end()
                        ;it2++)
                {
                        if (*it == *it2)
                        {
                                letterIsGuessed = true;
                                break;
                        }
                }
                if (!letterIsGuessed)
                {
                        *it = '?';
                }
        }
        return maskedWord;
}

void Hangman::displayGuess() const
{
        cout << "Your guesses:" << endl;
        for (set<char>::iterator it = Hangman::guessedLetters.begin()
                        ;it != Hangman::guessedLetters.end()
                        ;it++)
        {
                cout << " " << *it;               
        }
        cout << "\n\n";
}

void Hangman::processGame( char input)
{
        bool isInWord = false;

        Hangman::guessedLetters.insert(input);

        for (string::const_iterator it=Hangman::word.begin()
                ;it!=Hangman::word.end()
                ;it++)
        {
                if (*it == input)
                {
                        Hangman::rightGuess ++;                       
                        isInWord = true;
                }
        }

        if (!isInWord)
        {
                Hangman::wrongGuess ++;
        }       
}

char Hangman::getUserInput()
{       
        char input;

        while (true)
        {               
                cout << "Guess a letter (case does not matter): " << wordWithMask() << endl << "? ";

                cin >> input;

                input = toupper(input);

                if (!isalpha(input))
                {
                        cout << "\nLETTERS ONLY PLEASE" << endl << endl << endl;
                        continue;
                }

                bool isValidInput = true;

                for (set<char>::iterator it=Hangman::guessedLetters.begin()
                        ;it!=Hangman::guessedLetters.end()
                        ;it++)
                {
                        if (*it == input)
                        {
                                cout << "\nYOU HAVE THIS LETTER BEFORE!!!" << endl << endl << endl;
                                isValidInput = false;
                        }
                }

                if (!isValidInput)               
                {               
                        continue;
                }

                return input;
        }
}

void Hangman::displayAvatar() const
{
        switch(Hangman::wrongGuess)
        {
                case 1:
                        cout << " o";
                        break;
                case 2:
                        cout << " o" << endl << "/";
                        break;
                case 3:
                        cout << " o" << endl << "/|";
                        break;
                case 4:
                        cout << " o" << endl << "/|\\";
                        break;
                case 5:
                        cout << " o" << endl << "/|\\" << endl << " |";
                        break;
                case 6:
                        cout << " o" << endl << "/|\\" << endl << " |" << endl << "/";
                        break;
                case 7:
                        cout << " o" << endl << "/|\\" << endl << " |" << endl << "/ \\" << endl;
                        break;
                default:
                        break;
        }
        cout << endl << endl;
}

TOP

posted by wap, platform: BlackBerry (Z10)
引用:
原帖由 @yilaguan2k2  于 2014-3-24 10:06 发表
这一段要赞。
我在国内推广UE的过程中发现阻力最大的并不是美术而是程序,特别是有个23年经验的那类。他们往往觉得引擎对他们是束缚,什么都得按引擎的思路来很不舒服。于是虽然用着引擎但处处逆着引擎来做,让引擎沦为纯美术工具。
美术往往是最欢迎引擎的,因为再也不用受程序员的鸟气了。国内美术的苦逼人所共知,要实现一个效果得求着程序,程序通常都很忙,没闲工夫帮美术实现,更别提做工具了。有了引擎以后就扬眉吐气多了,再难也愿意学。
策划就没啥好说的了,愿意花大量精力学引擎的策划我就没见过,和他们说基于prototype的设计他们就当听个热闹。

其实现在的UE已经成熟到完全不需要代码,就可以做出非常完善的prototype的阶段了。UE4新的Blue print可视化脚本可以实现原来Unreal script 7080%的功能,学习起来虽然难一点但比起学一门语言总是简单多了。现在主要是人们一听到Unreal就觉得这玩意好重、好复杂,直接就打了退堂鼓,一听到Unity就觉得“大家都说好简单,我就用它吧”。
说得好,我觉得用unreal了!

TOP

posted by wap, platform: Firefox
引用:
原帖由 @yilaguan2k2  于 2014-3-24 11:01 发表
你丫不会是反串引战的吧?就这么几层楼反复几回啦?

就你楼上那需求就一FPS mod的量级,用得着纠结吗?
关键是说得都很有道理,本来我以为ue4很复杂,unity很简单,但是一看其实ue4不难上手,我就想试试。而且我也会c++。

TOP

posted by wap, platform: Firefox
引用:
原帖由 @karsus  于 2014-3-24 11:12 发表
搞笑,我就问你做过实际的产品吗?我参与过开发周期超过24个月已经上线的端游,C++开发,也刚结束开发周期不超过6个月的手游基于Unity,同事也做过COCOS 2D的项目。
这些结论,都是在实际工程开发下来的结果,对于短平快,人员周期短的项目来说,快速开发和原型试验都要求非常高的工程实现速度和快速调整的能力。编译速度在调试中非常重要,至于C#和C++其他方面的开发便利性,做过的人都知道,用我在这里废话一句句说?你没做过搞不清楚就别在这扣字眼。

一个没做过实际项目的人在这里给人家出什么馊主意,净把人往沟里带,开发人员越少越是要快速看到东西,学个编辑器就用半年,干脆别做了,UE那编辑器和unity学起来能一个难度吗?
废话不多说,你先把实际工程经验拿出来亮亮,不然就是空口白话空想,我说你打嘴炮有说错?
我是需要上手快的,做个能玩几分钟的fps就成,主要和同事朋友炫耀一下。
既然你有实际经验,那我就用C# + Unity了,毕竟我做过几个WP7和Win8的App。
我决定不再变了,下次再来就直接上游戏贴图。

TOP

 23 12
发新话题
     
官方公众号及微博