2010年8月11日 星期三

Unity 3D Client/Server Socket Connection Sample Code


版權歸 UnityBuster.blogspot.com 所有。轉載請註明出處!
Welcome to link to this blog when referencing the article!

I'v been looking everywhere to find a socket connection sample code for Unity 3D. Although there are many sites/blogs pointed out some feature, but not a sample in whole can be found. Finally, I put some resources that I found and came out this sample. Hope those people who are looking for the answer can get one step further via this article.

You can use .net sockets to connect between Unity and socket-based applications. Furthermore, you can use most of the .net 2.0 API. If you happen to have a Unity Pro, you can write your own C++ Dlls, be noted, for the security reason, C++ Dlls can't be used with Web Player.

.NET Sockets is kind of TCP/IP Sockets. Existing network class of .NET, ex: TcpClient(client side) and TcpListener(server side), they include socket other feature support, and are easier then using Socket directly.

Below is a simple implementation. There are 2 parts: server side and client side. Server side is the Server side TcpListener code listed below. Just compile it and run it to wait for the connection. The Server was a sample code from MSDN, it can handle one Client connection at a time. As an example to make the socket connection work is enough. I'll keep on working on a simple server code that can handle multiple clients. Wish I can get it in the near future.

To do the client in the Unity, you can create a new Project, then create a JavaScript and rename to GUI_Script, copy and past the code in 'GUI_Scripts.js' listed below. When you finish this step, press left key to grab "CUI_Script" inside Unity/Project sub-window and drop on the "Main Camera" object inside Hierarchy sub-window, the script can then be attached to the Camera, you can then see the GUI when running the game. We then create a folder in the Unity/Project sub-window and rename to "Standard Assets", create a C# Script, rename it to "s_TCP", copy and past the code in the 's_TCP.cs' below. Now, run the unity game, you can try the result now.

Client side C# TCP script is attach to a GUI JavaScript. The GUI JavaScript contains a "Connect" button, a "Level 1" button, and a "Level 2" button; a text field and a "Disconnect" button. In the beginning of the game running, there is only one "Connect" button display on the screen; after the player press the button, the Unity game client will connect to the Server and establish a socket connection. The "Connect" button disappear, and the "Level 1", "Level 2" button, text filed, and "Disconnect" button show up. Whenever press the "Level 1" or "Level 2" button, the text field will use WriteSocket() function in the GUI JavaScript to send the preset string to the server, the server will then convert the lower case text to upper case text and send the result string to the client. The GUI JavaScript will then use the ReadSocket() function to read the return string and display in the text field. If you press the "Disconnect" button, the connection will be closed and the screen will change back to display "Connect" button only.



====================================================

Code listed below is for Server side TcpListener:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MyTcpListener
{
  public static void Main()
  { 
    TcpListener server=null;   
    try
    {
      // Set the TcpListener on port 13000.
      Int32 port = 13000;
      IPAddress localAddr = IPAddress.Parse("127.0.0.1");
      
      // TcpListener server = new TcpListener(port);
      server = new TcpListener(localAddr, port);

      // Start listening for client requests.
      server.Start();
         
      // Buffer for reading data
      Byte[] bytes = new Byte[256];
      String data = null;
      int counter = 0;


      // Enter the listening loop.
      while(true) 
      {
        Console.Write("Waiting for a connection... ");
        
        // Perform a blocking call to accept requests.
        // You could also user server.AcceptSocket() here.
        TcpClient client = server.AcceptTcpClient();
        counter++;
        Console.WriteLine("#"+counter+" Connected!");

        data = null;

        // Get a stream object for reading and writing
        NetworkStream stream = client.GetStream();

        int i;

        // Loop to receive all the data sent by the client.
        while((i = stream.Read(bytes, 0, bytes.Length))!=0) 
        {   
          // Translate data bytes to a ASCII string.
          data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
          Console.WriteLine("Received: {0}", data + counter);
       
          // Process the data sent by the client.
          data = data.ToUpper();

          byte[] msg = System.Text.Encoding.ASCII.GetBytes(data+"Client counter:"+counter);

          // Send back a response.
          stream.Write(msg, 0, msg.Length);
          Console.WriteLine("Sent: {0}", data + "Client counter:"+counter);            
        }
         
        // Shutdown and end connection
        client.Close();
      }
    }
    catch(SocketException e)
    {
      Console.WriteLine("SocketException: {0}", e);
    }
    finally
    {
       // Stop listening for new clients.
       server.Stop();
    }

      
    Console.WriteLine("\nHit enter to continue...");
    Console.Read();
  }   
}


====================================================

Code listed below is a C# TCP program 's_TCP.cs', which was graped from Unity Forum and made some modification:

using UnityEngine;
using System.Collections;
using System;
using System.IO;
using System.Net.Sockets;

public class s_TCP : 
MonoBehaviour {
    bool socketReady = false;

    TcpClient mySocket;
    NetworkStream theStream;
    StreamWriter theWriter;
    StreamReader theReader;
    String Host = "localhost";
    Int32 Port = 13000; 

    // Use this for initialization
    void Start() {

    }

    // Update is called once per frame
    void Update() {

    }

    public void setupSocket() {
        try {
            mySocket = new TcpClient(Host, Port);
            theStream = mySocket.GetStream();
            theWriter = new StreamWriter(theStream);
            theReader = new StreamReader(theStream);
            socketReady = true;
        }
        catch (Exception e) {
            Debug.Log("Socket error:" + e);
        }
    }

    public void writeSocket(string theLine) {
        if (!socketReady)
            return;
  String tmpString = theLine + "\r\n";
        theWriter.Write(tmpString);
        theWriter.Flush();
    }

    public String readSocket() {
        if (!socketReady)
            return "";
        if (theStream.DataAvailable)
            return theReader.ReadLine();
        return "";
    }

    public void closeSocket() {
        if (!socketReady)
            return;
        theWriter.Close();
        theReader.Close();
        mySocket.Close();
        socketReady = false;
    }
 
    public void maintainConnection(){
 if(!theStream.CanRead) {
  setupSocket();
 }
    }
} // end class s_TCP

====================================================

This is a JavaScript 'GUI_Scripts.js':

private var textFieldString = "Socket Testing String";
private var myTCP; 

function Awake() {
 myTCP = gameObject.AddComponent(s_TCP);
}

function OnGUI () {
 if(myTCP.socketReady==false) {
  if (GUI.Button (Rect (20,10,80,20),"Connect")) {
   myTCP.setupSocket();
  }
 }
 else {
  myTCP.maintainConnection();

  if (GUI.Button (Rect (20,40,80,20), "Level 1")) {
   myTCP.writeSocket(" The is from Level 1 Button");
   textFieldString=myTCP.readSocket();
  }
  if (GUI.Button (Rect (20,70,80,20), "Level 2")) {
   myTCP.writeSocket(" The is from Level 2 Button");
   textFieldString=myTCP.readSocket();
  }
  
  textFieldString = GUI.TextField (Rect (25, 100, 300, 30), textFieldString);
  
  if (GUI.Button (Rect (20,140,80,20),"Disconnect")) {
   myTCP.closeSocket();
   textFieldString = "Socket Disconnected...";
  }
 }
}

版權歸 UnityBuster.blogspot.com 所有。轉載請註明出處!
Welcome to link to this blog when reference the article!

2010年8月8日 星期日

Unity3D的Socket連線實作範例


版權歸 UnityBuster.blogspot.com 所有。轉載請註明出處!

你可以使用標準的 .net sockets 來連接Unity和其他的socket-based應用軟體. 另外, 你也可以使用大多數的.net 2.0 API. 如果你有Unity Pro, 你還可以自己撰寫 C++ Dlls來使用, 需注意的是, 為了安全的理由, C++ Dlls不可以用在Web Player之中.

.NET Sockets 基本來說就是 TCP/IP Sockets. .NET 現有的network classe例如:TcpClient(client端)和 TcpListener(伺服器端), 它們包括了Socket及其他的支援功能, 這比直接使用Socket來得容易一些.

以下為一個簡單的試作.  若是想要實際在Unity中驗證,  可以開啟一個新的Project, 先create一個JavaScript並更名為GUI_Script後將以下'GUI_Scripts.js'的內容貼入. 完成後, 在Unity/Project子視窗中左鍵按住此一物件並移動到Hierarchy子視窗中的"Main Camera"物件上放開左鍵, 此一腳本即可和Camera連接上, 執行時就可以看到GUI在畫面上顯示.  接下來在Unity/Project視窗中create一個folder並更名為"Standard Assets", 然後在此一folder中create一個C Sharp Script並更名為s_TCP後將以下的's_TCP.cs'內容貼入.  將最上端的server程式編譯後執行, 然後執行Unity的client即可看到結果.

Client端的C# TCP腳本程式是附加在一個JavaScript GUI腳本上的.這個GUI腳本包含一個"Connect"按鈕, 一個"Level 1"按鈕和一個"Level 2"按鈕, 一個文字框和一個 "Disconnect"按鈕. 開始時, 畫面只會出現一個"Connect"按鈕, 按下按鈕後會把Unity的TcpClient連接到Server端建立Socket連線. 之後"Connect"按鈕會消失, 變而出現"Level 1", "Level 2"按鈕, 文字框, 和"Disconnect"按鈕. 當按下"Level 1"或"Level 2"按鈕, 文字框內利用GUI腳本的 WriteSocket()功能將預設的文字傳送給server, 而server則將收到的文字轉換成大寫傳回. 這個GUI腳本同時也包含了一個 ReadSocket()功能用來讀取server傳回的資訊並顯示在文字框中. 最後按"Disconnect"按鈕時則關閉連線回到"Connect"按鈕的初始畫面

Server端是取自MSDN的一個很簡單的程式碼, 一次只能處理一個Client的連結. 但足以用來驗證連線功能, 日後若想要強化, 則可依個人需求來修改了.

====================================================

以下為Server端 TcpListener 程式碼範例:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MyTcpListener
{
  public static void Main()
  { 
    TcpListener server=null;   
    try
    {
      // Set the TcpListener on port 13000.
      Int32 port = 13000;
      IPAddress localAddr = IPAddress.Parse("127.0.0.1");
      
      // TcpListener server = new TcpListener(port);
      server = new TcpListener(localAddr, port);

      // Start listening for client requests.
      server.Start();
         
      // Buffer for reading data
      Byte[] bytes = new Byte[256];
      String data = null;
      int counter = 0;


      // Enter the listening loop.
      while(true) 
      {
        Console.Write("Waiting for a connection... ");
        
        // Perform a blocking call to accept requests.
        // You could also user server.AcceptSocket() here.
        TcpClient client = server.AcceptTcpClient();
        counter++;
        Console.WriteLine("#"+counter+" Connected!");

        data = null;

        // Get a stream object for reading and writing
        NetworkStream stream = client.GetStream();

        int i;

        // Loop to receive all the data sent by the client.
        while((i = stream.Read(bytes, 0, bytes.Length))!=0) 
        {   
          // Translate data bytes to a ASCII string.
          data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
          Console.WriteLine("Received: {0}", data + counter);
       
          // Process the data sent by the client.
          data = data.ToUpper();

          byte[] msg = System.Text.Encoding.ASCII.GetBytes(data+"Client counter:"+counter);

          // Send back a response.
          stream.Write(msg, 0, msg.Length);
          Console.WriteLine("Sent: {0}", data + "Client counter:"+counter);            
        }
         
        // Shutdown and end connection
        client.Close();
      }
    }
    catch(SocketException e)
    {
      Console.WriteLine("SocketException: {0}", e);
    }
    finally
    {
       // Stop listening for new clients.
       server.Stop();
    }

      
    Console.WriteLine("\nHit enter to continue...");
    Console.Read();
  }   
}


====================================================

以下為一個C# TCP 程式碼 's_TCP.cs', 本程式取自Unity Forum中並加以簡單的修改:

using UnityEngine;
using System.Collections;
using System;
using System.IO;
using System.Net.Sockets;

public class s_TCP : 
MonoBehaviour {
    bool socketReady = false;

    TcpClient mySocket;
    NetworkStream theStream;
    StreamWriter theWriter;
    StreamReader theReader;
    String Host = "localhost";
    Int32 Port = 13000; 

    // Use this for initialization
    void Start() {

    }

    // Update is called once per frame
    void Update() {

    }

    public void setupSocket() {
        try {
            mySocket = new TcpClient(Host, Port);
            theStream = mySocket.GetStream();
            theWriter = new StreamWriter(theStream);
            theReader = new StreamReader(theStream);
            socketReady = true;
        }
        catch (Exception e) {
            Debug.Log("Socket error:" + e);
        }
    }

    public void writeSocket(string theLine) {
        if (!socketReady)
            return;
  String tmpString = theLine + "\r\n";
        theWriter.Write(tmpString);
        theWriter.Flush();
    }

    public String readSocket() {
        if (!socketReady)
            return "";
        if (theStream.DataAvailable)
            return theReader.ReadLine();
        return "";
    }

    public void closeSocket() {
        if (!socketReady)
            return;
        theWriter.Close();
        theReader.Close();
        mySocket.Close();
        socketReady = false;
    }
 
    public void maintainConnection(){
 if(!theStream.CanRead) {
  setupSocket();
 }
    }
} // end class s_TCP

====================================================

以下為一個JavaScript的GUI腳本 'GUI_Scripts.js':

private var textFieldString = "Socket Testing String";
private var myTCP; 

function Awake() {
 myTCP = gameObject.AddComponent(s_TCP);
}

function OnGUI () {
 if(myTCP.socketReady==false) {
  if (GUI.Button (Rect (20,10,80,20),"Connect")) {
   myTCP.setupSocket();
  }
 }
 else {
  myTCP.maintainConnection();

  if (GUI.Button (Rect (20,40,80,20), "Level 1")) {
   myTCP.writeSocket(" The is from Level 1 Button");
   textFieldString=myTCP.readSocket();
  }
  if (GUI.Button (Rect (20,70,80,20), "Level 2")) {
   myTCP.writeSocket(" The is from Level 2 Button");
   textFieldString=myTCP.readSocket();
  }
  
  textFieldString = GUI.TextField (Rect (25, 100, 300, 30), textFieldString);
  
  if (GUI.Button (Rect (20,140,80,20),"Disconnect")) {
   myTCP.closeSocket();
   textFieldString = "Socket Disconnected...";
  }
 }
}
版權歸 UnityBuster.blogspot.com 所有。轉載請註明出處!

2010年7月11日 星期日

Unity 3D 多人線上遊戲要如何開始


Unity3D在多人線上遊戲的架構中主要是扮演了前台Client端的角色, 而它的網路功能則提供了開發者的一個簡單選項. 然而, 它對連線數的支持到底是如何呢? 以下提供了一些基本資訊與教程:
Unity's networking functions.
http://unity3d.com/support/documentation/ScriptReference/Network.html
Unity提供多人線上遊戲的開發者兩種選擇:
一. 使用Unity3D內建的網路功能, 你可以從以下兩個主要的範例開始 :
1. Unity的官方網路範例:
http://unity3d.com/support/resources/example-projects/networking-example
2. Leepo的教程: 此教程主要是使用Unity本身為Server, 連線數約為100人.
http://forum.unity3d.com/viewtopic.php?t=30788

二. 使用HTTP/sockets來和市面上第三者開發的後台伺服器軟體(如:SmartFox, NetDog, Photon 等..., 此項之具體作法可在各相關伺服器之網站找到, 不過大多交代不清, 或隱藏在範例中不易發覺, 相信也是眾多開發者頭痛的地方), 或者自行開發後台. MMO是指 "大量多人線上", 上面的選項可以作到多人, 但是無法做到大量如千人以上. HTTP/socket的方式則可以達成這一步.

2010年7月9日 星期五

Unity3D - 遊戲以外的事 (Unity3D: Beyond the Game)


本文轉載自www.everyday3d.com,版權歸原作者所有,UnityBuster.blogspot.com整理翻譯。轉載請註明出處!

我不是一個遊戲開發者。在過去的10年間,我一直是一個Flash的設計者和開發者。我曾經製作過許多項目包括廣告,如動畫(包括橫幅,視頻網站,豐富的媒體接口,網絡應用,三維仿真),以及簡單的遊戲。

然而相較於Flash,我相信Unity3D更像是一個遊戲開發平台,而前面提到所有這些類型的項目同樣都可以用Unity3D來解決。而在某些情況下,Unity3D得出的結果遠超出了我們目前用Flash和ActionScript可以得到的 - 這正是我期待的好機會。 (在某些情況下,最終可能變成災難,就好像明明用HTML就可以完成的網頁,結果卻用Flash來完成。我們將可預期同樣的事情會再度發生,只因為人都會犯錯)。

技術被接受採用的速度其時並沒有我預期的快。我敢肯定,Unity3D最終將成為3D Web(網頁)應用程式的標準,但是我們還沒有到達那裡。到目前為止,Unity 的iPhone遊戲已經非常成功的被開發出來,而它也逐漸成為開發線上遊戲的首選工具。廣告業也將會跟進採用Unity3D。我們可以預期尖端的互動機構和生產企業很快會開始釋放Unity3D製作的產品。我希望這會在這一兩年發生。這是很有機會的,因為許多這樣的專案已經在進行當中。UnityBuster整理翻譯

之所以會出現這種情況是因為Unity3D是多才多藝的。它是被當作一個 “遊戲開發工具” 來銷售,但它有許多功能都超過了這樣的定義。它允許多樣化的內容整合(二維,三維,視頻,聲音),具有強大的動畫工具和強大的腳本API可用來創建任何複雜的邏輯運算。

當我滿載著靈感從阿姆斯特丹FITC回來,我決定更深入地看看Unity3D腳本和至少多於基本功能和多於只建立一個“第三人稱射擊”的情況。作為一個長期的Flash開發人員,對於典型的Actionscript技術也有一些困擾和問題,我決定檢驗是否可以用 Unity3D來解決類似的問題。這裡是幾個首先出現在我心中的基本問題:

1. How to dynamically load an image into Unity3D and do something with it?
2. How to load a video?
3. How to draw lines, points and shapes at runtime?
4. How to generate content with code?

這些問題的順序是從那些最容易回答的問題開始。我有更多的問題排在後面,所以這個貼文可能會有後續的更新。無論如何,在未來的日子(或數週)我會發布它的解決方案。我做了一些嘗試,我有一些我在一路研究的心得代碼以及一些提示來分享。再見!

本文轉載自www.everyday3d.com,版權歸原作者所有,UnityBuster.blogspot.com整理翻譯。轉載請註明出處!

2010年7月2日 星期五

Unity小遊戲


非常不錯的小遊戲! 由SilverTree Media用Unity製作的一個Demo, 不錯玩!
http://www.cordythegame.com/

2010年6月28日 星期一

想用Unity3D來開發MMO嗎?


Unity3D 可以用來開發MMO嗎? 當然是可以的! MMO - 顧名思義就是大量多人連線, 早已跳脫了單機遊戲之外, Unity提供了開發者一個大展身手的舞台,也提供了基本連線功能, 可是, 要如何把成百上千個玩家串在一起, 讓你中有我, 我中有你呢? 對那些已經在這行的老手, 這自不在話下.可是, 對那些非程式設計師或新手而言,要如何開始呢?
既然談到了MMO, 就免不了提到 Client/ Server的架構. Unity提供了client端的絕妙選擇, 但是, server端呢?
除了自己寫server之外又有哪些選擇呢? 幸好, 坊間還是有一些選擇可供新手來過過癮的, 有些是免費, 有些是以連線數來訂價, 有些則另行報價, 茲列於下:

SmartFoxServer
http://www.smartfoxserver.com/

Photon
http://photon.exitgames.com/

NetDog
http://www.pxinteractive.com/

Project Darkstar
http://www.projectdarkstar.com/

RakNet
http://www.jenkinssoftware.com/

Quazal
http://www.quazal.com/

Hero Engine
http://www.heroengine.com/

Icarus Studios
http://www.icarusstudios.com/

Monumental Games
http://www.monumentalgames.com/

MultiVerse
http://multiverse.net/index.html

BigWorld Technology
http://www.bigworldtech.com/index/index.php

Open Simulator
http://opensimulator.org

Badumna Network Suite - 一個P2P MMO多人線上伺服器
http://www.badumna.com/

Lidgren Network
http://code.google.com/p/lidgren-network/

All middeware can be used with Unity as long as it plays well with the Mono interface.

2010年6月25日 星期五

Unity 3D 的一些週邊工具與軟體


以下所列內容為Unity 3D中可以和Unity IDE共同使用以增進開發流程的及軟體工具和程式庫. 有些可以用來快速產生prototype, 有些則提供一些常用功能給開發者以避免重覆花費不必要的時間並讓開發者可以加強在IDE上的力道來增加開發者的生產力.

1. ProtoPack from Frogames
ProtoPack是一些小工具的集合, 它可以讓開發者很快速的上手. 它不但包括了些基礎物件, 也包括了進一步的程式庫. 另外, Frogames 也提供了其它美術物件, 目前有以下的套件:
Forest Pack, Proto Pack, Warriors & Commoners, Dungeon Pack, Dungeon Guardians Pack, RTS Buildings Pack: Orcs, RTS Buildings Pack: Humans, Starship Pack, Houses Models Pack, Houses Models Pack 2

2. iTween from Pixelplacement
iTween 提供了可在Unity環境中產生動畫的程式庫, 它提供了類似於許多Flash Tweening包括了控制位置和週期設定的動畫控制項程式庫.

3. TransformUtilities from Seth Illgard
TransforUtilities 提供使用者複製遊戲物件在Unity IDE環境中的座標, 旋轉矩陣, 縮放矩陣, 及軸線資訊, 也允許使用者將這些資訊附加到其他物件上.

4. dimeRocker Turnkey Social Game Platform for iPhone, Facebook, MySpace
dimeRocker平台提供快速,簡單的方式讓你將你的Unity遊戲轉換到 Facebook, iPhone,MySpace和其他社群系統中。 dimeRocker提供可擴展的功能,讓你可以輕易的完成代管,排行榜,獎杯和獎勵制度,市場,公告,邀請...等幾乎所有的病毒式推廣的遊戲基本需求,好讓你可以集中精力發展你的遊戲,而不用老是為了跟上最新的更改到Facebook或MySpace上平台和API等而花費精力。DimeRocker快速入門文件是一個很好的開始,它會引導您設置您的環境和準備進行病毒式推廣。

5.Unity Character Customization Package With Free Reusable Characters
This free goodie from Unity Technologies allows you to customize the characters for use right there in your game. Here’s a working demo of the Character Customization tool and some asset bundle management instructions. You can download the free Character library from here.

6. Quidam by n-sided
http://www.youtube.com/watch?v=azWVl2ogQmY
Quidam是一個很好的工具可以為你的遊戲輕鬆建立三D角色人物。

7.Digimi from Gizmoz and Daz 3D
Digimi允許使用者逐步的建立自己的遊戲角色和其服裝配件. Here’s a video of the Digimi presentation at the Unity booth from GDC 2010 at their site you can also find a Unity 3D Avatar creation demo with fully integrated character head creation. You can also stop by the DigimiAvatars Youtube channel to see several other demos.

8. Animeeple
With Animeeple you are able to quickly apply BVH animation and motion captures to skeletons. You can also import 3D Animations of your own and apply them to the skeletons within Animeeeple. I’ve got an informative interview with Leslie Ikemoto cofounder of Animate Me which I’m in the process of polishing up that we’ll be sharing with you soon. Meanwhile here is the Animeeple to Unity Documentation. See BVHacker below for more on Editing BVH Files.

http://www.youtube.com/watch?v=Fvy4BSN0ZOw&feature=player_embedded

9. C# Interpreter Console for Unity
當Unity遊戲在執行模式時, 此一外掛可以讓使用者顯示在一個互動式的終端中執行C#程式碼並輔以除錯之功能.

10. Unity3D Dialogue Engine from X9
The Dialogue Engine for Unity3D Simplifies creation of dialogue windows in RPGs.

Inspect every item in your world and speak to any character in the game. For characters you can make their dialogue as complex as you need them to be. Want to make every character remember every sentence they say to your character and make the dialogue change every single time you speak to them? Done.

11. Behave from AngryAnt
The Behave project is a system for designing, integrating and running behaviour logic using Behaviour Trees for simulated characters in unity projects

12. Sketch from Angry Ant
Sketch是一個在Unity編輯器中使用的簡易工具, 它可以用來修改assets中模型的網格.

13. Simple AudioManager from Seth Illgard
“Since it is very natural to have one manager object in your scene acting as a singleton, I’ve written a component that can be attached to such manager. The work of this component is to play almost any sound you want to play in your game.”

14. Detonator Unity Explosion Framework by Ben Throop
Detonator framework is a parametric explosion framework. Kaboom! (Sorry small frontal lobe lapse there) From Mushroom clouds to all kinds of other explosions they are all in your control. Check out this video of the Detonator framework in action.

15. Urban PAD from Gamr7
Urban PAD 允許使用者以調整變數的方法來漸進的構築城市. 它大大的加速了開發的時程.

16. UniTUIO
UniTUIO Multitouch framework for creation of Unity based Multitouch applications here are some video tutorials for UniTUIO I look forward to getting to sit down with Britten" href="http://infiniteunity3d.com/tag/ben-britten/">Ben Britten and Sandor Rozsa soon to discuss related projects such as FishTish which I got to see Ben Britten demonstrate at GDC 2010.

17 Brass Monkey Wifi Objective C Unity Library
Brass Monkey which is soon to be released by InfraRed5 allows for latency-free Wifi control of your Unity game via iPhone and soon several other mobile platforms. I got a chance to video tape the demonstration at GDC 2010 and also got a brief explanation of Brass Monkey . I will be sitting down with Chris Allen CEO of InfraRed5 soon to talk further about this mind-blowing technology and the implications for future games.

18. True Bones
animation in unity 3d game engine" />

True Bones motion files go great with the aforementioned Animeeple animated characters. I hope to get a chance to dig deeper into these personally soon but have heard plenty about them already.

19. BVHacker
BVHacker是一個可以編輯BVH動作檔的免費工具, 編輯後的檔案則可以附加到骨架上來作animation.

20. Unity Locomotion System
Semi-procedural animation package to dramatically improve the realism of animated humans and animals. Here’s a video of the Unity Locomotion package in action and a Unite 08 presentation about using the Locomotion System in your Unity Game.

21.Max Unity3D Interoperability Kit 22. Procedural Head Look Controller
Make characters look towards a specified point in space, smoothly turning towards it with for example the eyes, head, upper body, or whatever is specified.

23 External Lightmapping Tool
Take a look at the example Screencast of the External Lightmapping tool which allows you to create nice looking lighting for your Unity scenes.

24 Unity Terain Toolkit Fractscape from Starscene
可以快速/立即產生地形

25 objReader from Starscene
Starscene的ObjReader可以讓你在Unity遊戲執行時動態的載入3D物件.

26. AutoSave Script
專供 Unity 3d 使用的 自動存檔腳本. 免費的.

27. Unity Script Editor from arsoftware
一個給 Unity 3D 使用, 免費的JavaScript 編輯器. Free...

2010年6月24日 星期四

6月版的Unity通訊


Unity Technique CEO David Helgason 寫給開發者的信:

Unity 3 Beta測試版已經開始寄送給預下訂單的客戶
親愛的Unity開發者,
歡迎您到6月版的Unity通訊!我們已經有了一些令人振奮的消息想要與大家分享:
Unity 3 Beta測試版的預訂客戶!今天,我們發出下載說明給前100名的下單客戶,並且會在未來數星期發送給其他的預訂客戶。
現在是你最後的機會,預先訂購Unity3並享受我們的促銷價。請檢視我們的新功能,在今年7月正式啟動新價格前,現在就採取行動好享受折扣。

2010年6月23日 星期三

Unity3D學習網站


Gamedev.net
http://www.gamedev.net/reference/

電腦遊戲製作開發設計論壇
http://www.gamelife.idv.tw/

3D Buzz: directx, unity...
http://www.3dbuzz.com/

Unity Project: Smokey Monkeys
http://www.smokymonkeys.com/

Unity Tutorial Site:
http://www.unity3d8.com/

Unity / SQL
http://blog.csdn.net/nette/archive/2009/07/30/4394849.aspx