2015年9月24日星期四

[Unity3D]接觸uFrame三個月有感

接觸uFrame大約有三個月了,其實這差不多也是開始了解並進行遊戲製作的時間。雖然有用Unity3D的經驗,但其實一直都不知道遊戲該怎樣做的。所以大約三個月前就可以問Google大神遊戲該怎樣做,然後在網上尋找一些寫遊戲的結構,框架之類,希望方便自己寫遊戲。其實小弟剛開始是研究MVC模式,但覺得有點困難。後來偶然在Asset Store發現uFrame,它用的是MVVM + Controller 的模式,覺得不錯,就買下來用了。三個月很快就過去了。驀然回首,雖然自己還是一名菜鳥,但對遊戲製作的認識及程式上的知識都多了。我想其中一個主要是uFrame 其實有個Slack的群組,大家只要買了uFrame就可以進去了,那裏可以問uFrame的問題、Unity3D的問題、遊戲製作的問題、甚至各種代碼的問題或閒聊都可以!群組裏的人滿友善。話說回來,這篇文章主要不是技術分享,只想說用uFrame的心路歷程。

如果想先了解uFrame是甚麽的話,可以先去看看小弟第一篇關於uFrame的文章!
傳送門:http://isaacforfun.blogspot.hk/2015/06/uframeflappy-brid.html

買下uFrame的6月的事,剛開始研究時發現先用uFrame 寫一個小遊戲最實際,然後就跟著官方教學的Angry Flapper(也就是Flappy Bird)來寫。剛開始其實廷順利的,跟著做大概很快就做好了,而且對uFrame的理解也多了,說到底就是 MVVM +Controller的模式。但發覺跟著教學做還是有一些問題,例如遊戲中的管子在離開畫面沒有被破壞(Destroy),後來發現原來版本不對了!身邊又沒有人用uFrame!最後發現原來uFrame有一個Slack的群組供大家發問,進去了之後很快就把問題解決了!

但是同時得知uFrame很快就更新了,還說到更新到版本1.6後會加入不少新元素,總之感覺是用當時1.5版本開發的話,轉過去1.6會很麻煩,也不知版本1.6的實際釋出的時間。因為覺得uFrame 1.5版本不用再有用,所以就放棄了研究uFrame 1.5,也沒有再更新用uFrame寫Flappy Bird系列的文章。有一段短時間重拾MVC模式的懐抱。

2015年9月15日星期二

2015年9月10日星期四

[Unity3D] Array與List

在學習List<T>, 其實List<T>跟Array有點相似所以問了一下Google大神,發現兩個不錯的說明

[C#] 陣列 & List<T>
https://kw0006667.wordpress.com/2013/04/03/c-陣列-listt/
下面的 code主要是抄考這篇的,只是弄了一個Unity的版本,用上Lambda真的廷方便的呀,Lumbda也是最近才學習的!左邊是參數(parameters), 右邊則是指令(instructions),這樣就不用開一個有名的function那麽麻煩!
students.Sort((x, y) => { return -x.Score.CompareTo(y.Score); });

例如這一句,(x, y)是參數,reutrn -x.Score.CompareTo(y.Score) 則是指令,這樣就可以由大到小排序了~

Array與List
http://sharecoder.blogspot.hk/2012/10/arraylist.html
//Array使用連續記憶體空間,List【不需要】使用連續記憶體空間。//
重點呀!長知識了~

好了看看測試的程式

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Test: MonoBehaviour {
 
 public struct Student
 {
  public string Name;
  public int Score;

  public Student(string name, int score)
  {
   this.Name = name;
   this.Score = score;
  }
 }
 
 void Start()
 {
  List students = new List()
  { 
   new Student("Tim", 80),
   new Student("Jimmy", 76),
   new Student("David", 92),
   new Student("Jason", 57),
   new Student("Amy", 40)
  };
  
  // 利用 Lambda 運算式,由大到小排序
  students.Sort((x, y) => { return -x.Score.CompareTo(y.Score); });
  
  foreach (var item in students)
  {
   Debug.Log(item.Name + " : " + item.Score);
  }
 }
}

結果:

2015年9月1日星期二

[Unity3D] 初嘗插件Grids Pro 與 Hex/Isometric tiles 的合作


前言

故事開始之先想先讓各位認識一下 2D Isometric Game,我想起兩個比較有名的遊戲:世紀帝國II和暗黑破壞神II


其實它們是用了Isometric Tiled Map 就是用2D去模仿3D的感覺,例如你看下圖的地圖,每一個正方體(Cube)看似立體:

每一個正方體都是平面(2D)的!只是畫出來好像立體(3D)~


你看到的地圖其實只是一張平面的畫~以前是怎樣將一用2D的素材去模仿3D的環境?就像我們怎樣畫畫是怎樣畫出立體的感覺?

這就要說起透視投影(Perspective projection)和平行投影(Parallel projection),而Isometric Game用的是等軸測投影(Isometric Projection),這是源自Parallel projection

簡單點說就是假設光線是平行,物件不會因為遠了而縮小但也產生了3D的感覺

如果引發了大家對Isometric Projection/Game 興趣的話,可以參考一下以下網址
Isometric game 及譯法漫談:http://www.ituring.com.cn/article/788
或是問問偉大的Google大神!