KEEP the KEEP

Secção para colocar diarios de desenvolvimento de projetos
Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

KEEP the KEEP

Mensagem#1 » terça jan 06, 2015 10:43 pm

Olá pessoal,

estou a fazer este devlog de maneira a tentar usa-lo como motivação para avançar com o projeto.
Este é um jogo que ja ando a querer fazer há bastante tempo. Tive a ideia de uma forma muito superficial, e quanto mais pensava em mecanicas, mais complexo o jogo ia ficando, até me parecer um projeto com corpo sufuciente para o lançar numa plataforma como steam por exemplo. Problema é que do jogo so existe concept e alguma arte.

Passo a explicar: O jogo é uma especie de tower defence, mas em que a posição das torres tem pouca importancia, mas antes que tipo de torre tens e quais a arma que dás tua torre, que na realidade é uma unidade. Um soldado, ou arqueiro, ou artilheiro ou mago.

O jogo seria visto de cima num terreno em que evitavamos que inimigos entrassem nas nossas muralhas. Esses inimigos avançam em waves, e podemos configurar coisas como a munição das torres ou a colocação de barreiras no campo de batalha.

Imagem


No que toca a personagens há bastante coisa rabiscada no meu caderninho, mas ha pouco que esteja finalizado propriamente dito. este são alguns. O arqueiro, o mercador e um inimigo base com as suas modificações

Imagem

Depois ha a questão da conversão destes concepts para 3d, e podem ver aqui uma torre em concept e a sua correspondende em modelo para o jogo

Imagem

e aqui um cenario em 3d dentro da vista inicial

Imagem

E esta imagem é um teste de perspectiva bem como um closeup so para verem o trabalho da textura nas torres e muralhas. Muralhas e torres essas que podem sofrer de upgrades para albergarem mais unidades.

Imagem

no caso da imagem de cima, as casas dentro da muralha servem para atear fogo, de forma a criar uma representação visual daquele que é o teu dano atual.

e é isto para já, espero que gostem.

Preciso que me deixem sugestoes de quais os passos a criar primeiro. Pensem em tentar criar toda a funcionalidade de colocar unidades nas muralhas, e só depois avançar para os inimigos e os disparos.

xau!

Chuckytuh
Hello World
Mensagens: 3

Re: KEEP the KEEP

Mensagem#2 » terça jan 06, 2015 11:07 pm

As unidades vão ficar posicionadas em placeholders ou têm liberdade de movimento nas muralhas?
A forma de as unidades aparecerem sugeria talvez que elas simplesmente subam as escadas das muralhas e assumam as suas posições..
Última edição por Chuckytuh em quarta jan 07, 2015 12:11 am, editado 1 vez no total.

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#3 » terça jan 06, 2015 11:30 pm

É suposto ficarem estacionarias no local que o jogador definiu. Podem ser trocadas de lugar com outra unidade, mas só sob ordem do jogador. O maximo que fazem é rodar sobre o pivot, para apontar para os inimigos

Avatar do Utilizador
Uriel
Hello World
Mensagens: 6

Re: KEEP the KEEP

Mensagem#4 » quarta jan 07, 2015 8:06 am

Até agora, bom aspecto! (e eu não gosto de tower defense)
Para que plataforma/s queres lançar o jogo? Pc?
[url]be.net/urielcordas[/url]

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#5 » quarta jan 07, 2015 8:42 am

Sim, originalmente é pc, mas lembro-me de pensar na configuração do comando da playstation e pensar como o poderia usar para jogar

Avatar do Utilizador
Nelson Rodrigues
Hello World
Mensagens: 7

Re: KEEP the KEEP

Mensagem#6 » quarta jan 07, 2015 10:38 am

Parece-me uma ideia flexível, puxando pela imaginação consegues extrair muita jogabilidade desta fórmula.

Começava por implementar uma forma de definir onde podem estar as unidades. Dependendo de como queres fazer, esta estrutura pode variar bastante. Disseste que as unidades ficam estacionárias no local que o jogador definiu, isso já facilita um bocado a coisa.

Com essa limitação, parece-me que tens três hipóteses:

1. Definir um polygon collider para cada muralha, ajustado à área onde as unidades podem estar. Quando o utilizador clica, nesse collider, a unidade fica lá e pronto.

2. Definir placeholders como disse o Chuckytuh. Quando clicas numa área da muralha, a unidade move-se para o placeholder desocupado mais próximo. Assim asseguras que todas as unidades estão distribuídas uniformemente pela muralha.

3. Igual ao ponto 1, mas cada unidade tem um raio mínimo onde não pode estar outra. Assim o limite de unidades na muralha está dependente do cuidado que o jogador teve a dispô-las.

De seguida tentava visualizar uma forma de automatizar a geração destes colliders, para não ter de fazer à mão para cada muralha.

No início dos níveis as muralhas estão sempre vazias? Ou à medida que avanças, alguns já começam com algumas unidades? Se já começar com algumas, precisas de guardar a informação do nível e respectivas unidades em scriptable objects, cuja estrutura também tem de ser pensada. Claro que podes apenas criar scenes diferentes para cada nível.. pessoalmente prefiro ter só uma scene "Level" e instanciar o que for preciso a partir dos dados de cada nível.

Bem, já estou a começar a spammar. Vou ali para o canto um bocadinho.

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#7 » quarta jan 07, 2015 11:21 am

Se calhar devia explicar que quero usar o Unity, o que vai ajudar em começar níveis com unidades já. Em principio o primeiro nível deveria realmente ter uma ou outra unidade.
Quanto ao posicionamento, as muralhas vão ter visualmente uma espécie de pequeno pódio para a unidade. quase como uma base de uma figura de warhammer. Se a muralha só tiver 10 bases, só podes colocar 10 unidades. Um dos desafios também é conseguir terminar o nível, com as unidades que tens, sem poderes spammar brutalmente unidades por todo o lado.

mais À frente gostaria de deixar o pessoal fazer upgrade à muralha para adicionar mais um corredor à muralha, ou uma espécie de andaime onde colocaria mais unidades, mas sempre sem mexer nas anteriores.

Avatar do Utilizador
Nelson Rodrigues
Hello World
Mensagens: 7

Re: KEEP the KEEP

Mensagem#8 » quarta jan 07, 2015 11:54 am

Por acaso tinha mesmo partido do princípio que era Unity, só agora me apercebo que ainda não tinhas especificado o motor.
ScriptableObject é uma classe do Unity, uma alternativa ao MonoBehaviour, é apenas um objecto para guardar dados, que não precisa de estar agarrado a um GameObject como o MonoBehaviour (http://docs.unity3d.com/ScriptReference ... bject.html)

Suponhamos que tens vários níveis em que a variação é apenas o background, a disposição das muralhas e casas, e o tipo e número de unidades que estão em cada muralha. Podias ter vários níveis basicamente repetidos em que arrastavas as coisas todas para o sítio certo, ou podias apenas definir a informação de cada nível em objectos LevelData (ScriptableObject), arrastá-los para um array num objecto Game (MonoBehaviour), e a partir daí, ao chamares o método Play (int level), o nível contrói-se a si próprio com base no que definiste no LevelData.

A vantagem disto é que, depois da programação inicial, muito rapidamente consegues gerar novos níveis facilmente, criando objectos LevelData e alterando os valores a gosto. Outra vantagem é que qualquer alteração que queiras fazer a todos os níveis, não precisas de ir a cada cena individual, visto que só tens uma (embora isto também possa ser atingido, de forma um pouco menos flexível, apenas com prefabs). Por último, tens ainda a vantagem de que visto que se passa tudo na mesma scene, não tens de lidar com a destruição automática dos dados de cada scene sempre que trocas de level (evitável com DontDestroyOnLoad), assim como o soluço que vem agarrado ao .LoadLevel do unity (cuja alternativa, o .LoadLevelAsync, é tão síncrona como o LoadLevel /rant).

Por último, tens ainda a vantagem com esta abordagem de poder gerar níveis aleatórios infinitos facilmente.

Ah.. mais um post enorme, isto já passa, é a saudade de escrever em fóruns.

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#9 » quarta jan 07, 2015 2:04 pm

Podes escrever à vontade! eu so agradeço!

Baseado no que li entao vou tentar fazer o seguinte:

montar um cenario em que nas muralhas coloco uma base para cada unidade
vou começar por detetar o click na base, e ao fazer isso, instanciar um prefab de uma unidade.
depois vou tentar fazer o mesmo, mas poder escolher qual unidade colocar (1 de quarto)

e ja deve ser bastante para me entreter, por com as minhas capacidades, nao posso pedir muito mais

Avatar do Utilizador
ivo
Hello World
Mensagens: 43

Re: KEEP the KEEP

Mensagem#10 » sexta jan 09, 2015 5:22 pm

Acho que não é mal pensado, durante o desenvolvimento para pc, dar a opção de jogar apenas com teclado . Assim quando fizeres o port para consola a parte do input será trivial.

Em relação ao posicionamento das unidades, estás a pensar usar também as torres? (não ví place holders) Caso estejas, poderias adicionar um bonus range para essas visto que o espaço é mais limitado.

De aspecto está muito bom como sempre

E já é hora de tirares esse projecto da gaveta ;)

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#11 » sábado jan 10, 2015 12:52 am

Boas pessoal

primeira questão!

isto é o que tenho neste momento
Imagem

ora o que aconteceu aqui foi simples. tenho uma rodela branca (slab) por baixo de cada capsula (testUnit (neste caso 1) )
tenho codigo na slab que diz "Se o rato clicar, instancia um prefab da unidade, e bota aqui em cima.

problema, todas as slabs têm o mesmo codigo. quando clico numa, todas ficam com unidades em cima. ideias?

isto está no start:

Código: Selecionar todos

   void Start () {
      newPos = new Vector3 (transform.position.x,transform.position.y+0.1f ,transform.position.z);
      unitType = 1;
   }


e isto está no update:

Código: Selecionar todos

      if(Input.GetMouseButtonDown(0)){
         if(unitType==1){
         Instantiate(TestUnit1, newPos, Quaternion.identity);
         }else if(unitType==2){... etc etc


tenho ifs para outras unitTypes (3) e no update tenho também leitura do teclado para mudar de unitType.
tenho que fazer raycasts???

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#12 » sábado jan 10, 2015 1:51 am

Já consegui resolver, aqui fica a prova

Imagem

mas aparentemente é uma solução precaria, porque usa o "OnMouseDown", o que não funciona em coisas que nao tenham ponteiro de rato. Da mesma forma, so funciona se o objecto tiver um rigidbody. é facil colocar, mas acho esquisito precisar

em termos de codigo é simples

Código: Selecionar todos

   void OnMouseDown(){
      if(unitType==1){
         Instantiate(TestUnit1, newPos, Quaternion.identity);
      }else if(unitType==2){
         Instantiate(TestUnit2, newPos, Quaternion.identity);
      }else if(unitType==3){
         Instantiate(TestUnit3, newPos, Quaternion.identity);
      }
   }


retirei os instantiates do update, e coloquei no OnMouseOver. com as teclas 1 2 e 3 mudo o tipo de unidade

Avatar do Utilizador
nimas
Hello World
Mensagens: 6

Re: KEEP the KEEP

Mensagem#13 » sábado jan 10, 2015 4:37 am

Em Unity nao sei bem como é, mas em Game Maker já me deparei com um problema semelhante e a solução foi dar nome diferente às várias instâncias e depois fazer uma confirmação quando clickas com o rato de qual instância se trata.
Se percebi bem a tua questão penso que a solução passará por algo semelhante, em que tens de descobrir ou atribuir um "nome" a cada instância dos slabs.

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#14 » sábado jan 10, 2015 10:01 am

pensei nisso, tendo em conta que cada nível será desenhado por mim, não é propriamente uma empreitada muito difícil.
mas para já o OnMouseDown funciona, por isso tass bem. Mas cheira-me que provavelmente vou ter que fazer isso para as unidades, até para poder dizer qual quero fazer upgrade, ou qual quero trocar com qual

Avatar do Utilizador
Iohanna
Hello World
Mensagens: 7
Contacto:

Re: KEEP the KEEP

Mensagem#15 » sábado jan 10, 2015 8:06 pm

Tá a ficar fixe! Continua o bom trabalho!

Eu não sou grande expert em input mas já tive de fazer coisas semelhantes antes.

Se quiseres mesmo que seja agnóstico de plataforma provavelmente terás de fazer uma espécie de input manager e terás que recorrer a raycasts. Depois involveria reconhecer o clique do rato ou um toque de dedo, mandar um raycast desse ponto para ver em que objecto tocou no mundo e depois mandá-lo executar o que quer que precises de fazer com esse clique.

Boa sorte com isso!

Avatar do Utilizador
Nelson Rodrigues
Hello World
Mensagens: 7

Re: KEEP the KEEP

Mensagem#16 » domingo jan 11, 2015 12:02 am

O OnMouseDown funciona bem em plataformas de touch, o Unity interpreta o toque como um clique. Se eventualmente quiseres que o jogador possa clicar em várias coisas ao mesmo tempo, aí já precisas de lidar com todos os toques diferentes (http://docs.unity3d.com/ScriptReference/Input.GetTouch.html).

No teu OnMouseDown, tens um if para cada unidade diferente, embora a instanciação de cada uma seja basicamente igual. Se fizeres um array com os tipos diferentes de unidades que tens, depois podes fazer algo deste género:

Código: Selecionar todos

   void OnMouseDown(){
         Instantiate (this.units[unitType], newPos, Quaternion.identity);
   }


Keep up the good work!

Avatar do Utilizador
Iohanna
Hello World
Mensagens: 7
Contacto:

Re: KEEP the KEEP

Mensagem#17 » domingo jan 11, 2015 1:26 am

Nelson Rodrigues Escreveu:O OnMouseDown funciona bem em plataformas de touch, o Unity interpreta o toque como um clique. Se eventualmente quiseres que o jogador possa clicar em várias coisas ao mesmo tempo, aí já precisas de lidar com todos os toques diferentes (http://docs.unity3d.com/ScriptReference/Input.GetTouch.html).


Ah, por acaso não sabia disso! Fixe! Eu tive sempre que fazer coisas que envolviam vários toques ao mesmo tempo então nunca pensei nisso e saltava logo para o Input.GetTouch para recolher dados.

Avatar do Utilizador
vascoptorres
Hello World
Mensagens: 17
Contacto:

Re: KEEP the KEEP

Mensagem#18 » segunda jan 12, 2015 2:48 pm

Exacto o OnMouseDown() é provavelmente a solução mais fácil de implementar, visto também funcionar com mobiles.

No entanto como já referiram antes, se quiseres multi touch ai já tens que arranjar outra solução. Podes usar o GetTouch num Update() mas vais voltar ao teu primeiro problema, em que depois tens que verificar em que objecto é que realmente clicaste, caso contrário vai aparecer em todos.

A melhor solução e tirando partido do novo sistema de eventos introduzido no 4.6, é criares um script em que implementas a interface "IPointerDownHandler", que basicamente substitui a função OnMouseDown(). Para este sistema funcionar, precisas também de ter o componente PhysicsRaycaster na tua Camera. Depois precisas também de um objecto com os seguintes componentes (podes por estes componentes na camera também...):

Event System - É o modulo que gere estes eventos;

Standalone Input Module (Opcional) - É um modulo que está à escuta de eventos gerados por input do PC (rato,teclado,gamepad...);

Touch Input Module (Opcional) - É um modulo que está à escuta de eventos gerados por touch;

Embora estes dois últimos sejam opcionais, tens que ter pelo menos um deles. Podes sempre ter os dois... não há problema.
Programador / Game Designer

Vanish- PC/Mac/Linux
Let Us Prey: Surrender to Hell - iOS / Android

Avatar do Utilizador
MarcoVale
printf
Mensagens: 167
Contacto:

Re: KEEP the KEEP

Mensagem#19 » terça jan 13, 2015 12:17 am

Aqui podem ver ja em acção a colocação de torres nas muralhas, o inimigo a aproximar-se e os arqueiros (Ainda apenas) a atacar o inimigo, mas ainda sem fazer dano.



e é isto!

Avatar do Utilizador
Relfos
Hello World
Mensagens: 45

Re: KEEP the KEEP

Mensagem#20 » terça jan 13, 2015 2:59 pm

Bom progresso!

Isso dos tiros tenta depois adicionar um ligeiro desvio nas trajectórias, para remover a pontaria perfeita. Não sei como estás agora a calcular o movimento deles, mas em principio será algo simples como calcular um vector de desvio aleatório para cada inimigo e usa-lo pra alterar o vector da direcção (vê as funcões Random do Unity)

Voltar para “Devlogs”

Quem está ligado:

Utilizadores neste fórum: Nenhum utilizador registado e 1 visitante

cron