公告版位
需要找什麼嗎? 左邊分類或許可以幫助你...

目前分類:[遊戲設計] Unity (100)

瀏覽方式: 標題列表 簡短摘要


Unity 聖典: http://game.ceeger.com/ (含中文 API、用戶手冊)

Unity 聖典論壇 :http://game.ceeger.com/forum/

 u3DPro 論壇: http://www.u3dpro.com/

Unity 3D 教程手冊 ( 遊戲蠻牛 ): http://www.unitymanual.com/

我愛Unity - EasyUnity: http://easyunity.blogspot.tw/

黃彥霖 發表在 痞客邦 留言(9) 人氣()

簡介:

基本上就是把 很多物體結合成一個物體 的作法,這種做法有很多優點,例如:
1. 提高效能
2. 統一材質 (只要建立一個材質,就能控制、分配給所有物體)
3. 動畫控制方便 (像是你要在 Unity 做人物換衣服、換物件 卻還要有 人物走路動畫 + 人物攻擊動畫 ...等等 ,
    將不同衣服、武器、褲子、人物骨架...等等結合成一個物體,再由同一組骨架控制動畫。
    這就能夠實現不同組合角色,卻可以做一樣的動畫、動作)

入門教學步驟:

黃彥霖 發表在 痞客邦 留言(2) 人氣()

專案檔&腳本下載,Youtube 點選顯示更多即可看到下載網址。

 

 

 

 

 

 

 

 

黃彥霖 發表在 痞客邦 留言(0) 人氣()

using UnityEngine;
using System.Collections;
using System.IO.Ports;
using System.Threading;

public class RS232 : MonoBehaviour
{
    My m;

    void Start ()
    {
        // 建立一條執行緒讀取RS232,不這麼做 Unity 會死當

黃彥霖 發表在 痞客邦 留言(2) 人氣()

請先將 Newtonsoft.Json.dll 檔案放到 Unity 專案底下,即可開始使用。

using UnityEngine;
using System.Collections;
using Newtonsoft.Json;

public class Book
{
        public int ID { get; set; }
        public string Name { get; set; }
        public string Author { get; set; }
}

黃彥霖 發表在 痞客邦 留言(6) 人氣()

using UnityEngine;
using System.Collections;
using System.Threading;
 
public class Test : MonoBehaviour
{
        My m;
 
        void Start ()
        {
                m = new My ();
                Thread t = new Thread (m.RunMe);
                t.Start ();
        }
 
        void OnApplicationQuit ()
        {
                m.Stop ();
        }
}
 
class My
{
        int i = 0;
        bool isRun = true;
 
        public void RunMe ()
        {
                while (isRun) { 
                        MonoBehaviour.print ("Run : " + i++);
                        Thread.Sleep (1000);
                }
        }
 
        public void Stop ()
        {
                isRun = false;
        }
}

黃彥霖 發表在 痞客邦 留言(0) 人氣()

http://www.youtube.com/watch?v=6f4CTry6F-4


黃彥霖 發表在 痞客邦 留言(0) 人氣()

這是入門版,進階版可以參考這裡 http://lolikitty.pixnet.net/blog/post/205684867

import java.io.*;

import java.net.*; 

public class MyServer {
 
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(1024);
            Socket s = ss.accept();

黃彥霖 發表在 痞客邦 留言(2) 人氣()

還有另外一種方法是在UNITY建立多執行續,詳見: http://lolikitty.pixnet.net/blog/post/34507808

void Awake ()
{
    Time.fixedDeltaTime = 1.0F;
}
 
int i = 0;
 

黃彥霖 發表在 痞客邦 留言(0) 人氣()

void Update () {
 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
 
    if(Physics.Raycast(ray,out hit)){
      info = "Shoot!!";
      print ("Point: "+hit.point.x+","+hit.point.y+","+hit.point.z);
 
   }else{

黃彥霖 發表在 痞客邦 留言(1) 人氣()

要注意的是,原本 void Start() 要改成 IEnumerator Start () ,否則會發生錯誤。

還有 FixedUpdate () 方法也可達到相同效果,詳見:http://lolikitty.pixnet.net/blog/post/60501373


IEnumerator Start ()
{

黃彥霖 發表在 痞客邦 留言(1) 人氣()

[ TCP ] C# Socket  to  Java Socket

//-------------------------------------------------JAVA-SERVER

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class JavaServer {

黃彥霖 發表在 痞客邦 留言(3) 人氣()

Unity3D是一個讓你輕鬆創作的多平台的遊戲開發工具,是一個全面整合的專業遊戲引擎。最重要的是,這個開發工具可以為網頁遊戲做出真正的3D 效果。 265G曾經報導過一些Unity3D製作的網頁遊戲,比如《黑潮船長》、《蒸汽之城》。近日,從駿夢處獲悉,他們邀請Unity3D開發商做客中國,並商討進一步的合作。對此,我們特別訪問了Unity總經理Brett Seyler。
265G:首先,您可以介紹下你自己和你的背景情況麼? Unity科技是一家從事什麼的公司?
中國的玩家,大家好!我叫Brett Seyler,現擔任美國UNITY公司戰略VP的職務,此前2年在INSTANTACTIO.公司擔任總經理,總負責TORGUE引擎業務,並且同時負責全球業務的開拓。
在UNITY,我們嘗試讓一些遊戲開發者能夠在我們科技和服務的幫助下更加輕鬆的進行開發。我們的核心事業就是做一個真正出色的,能夠延展到任何一個遊戲開發商所關注的領域的3D遊戲引擎和工具組。
265G:在中國,仍然有很多開發商不知道UNITY。你可以告訴我們UNITY創建的原因和UNITY關注什麼?
UNITY一直關注如何為玩家提供更好的用戶體驗,並且幫助那些非C++天才的開發商去做一款漂亮的遊戲。有了UNITY,所有東西都被設計的更親近,簡單,迅捷和完美。如果得到了授權,UNITY的對於多元平台的部署更加是一個非常簡單,便捷的工具。UNITY能夠使所有內部主要的瀏覽器和操作系統運行的UNITY網頁瀏覽。
除此之外,我們同樣關注所有形式的移動設備。我們創造出可以在所有IOS和ANDROID系統平台上開發手機遊戲的機會(不包括WEB和控制平台)。我們感覺我們可以使開發遊戲變成一個對於創意性專家來說更有意義的事情,那是因為他們也同樣可以賺更多的錢。
265G:可以列舉一些UNITY開發的知名項目麼?
UNITY開發的最成功作品都在蘋果的軟件商店裡,目前有超過1000個遊戲是用UNTIY平台開發而成。如果你瀏覽最受歡迎遊戲排行,你會發現UNITY遊戲往往佔很大比例,在列表中佔10%-20%,其中包括《植物大戰殭屍手機版》等等。對研發者來說這些遊戲都十分暢銷,每個遊戲總價值都在一百萬美元,有一些甚至幾百萬。
除了蘋果應用商店以外,UNITY開發者的最好的作品還包括美國動畫頻道的Fusionfall。它令人難以置信,有接近一千萬小朋友在使用他們開發的網頁遊戲。最近,EA的遊戲Tiger Woods Online. 它也非常棒,對網頁遊戲玩家來說,這是目前操控感最好的網頁遊戲了。另外,我聽說中國也有很多也有公司在使用我們的UNITY引擎開發網頁遊戲。

黃彥霖 發表在 痞客邦 留言(0) 人氣()

為什麼經常會遇到,在編輯器裡運行腳本沒問題,等打包出來卻不能使用呢?
原因是unity3d默認僅會引用幾個常用的dll,所以寫一般的代碼不會出什麼問題!但其它的呢?最典型的是System.Data.dll,它主要是跟數據庫操作有關的,如果你代碼有引用到它就必須到..\Unity\Editor\Data\Frameworks\Mono.framework中把它拷到Assets目錄下(mono是開源的,你想看它的源代碼用.NET Reflector吧!),不然可能在編輯器中運行沒問題打包後就會出錯了。
另外囉嗦下,如果你是用VS寫代碼的話,添加引用最好到.\Unity\Editor\Data\Frameworks\Mono.framework裡面去引用,此時編輯器如果有出錯的話應該是unity3d默認沒引用到它,那必需到..\Frameworks\Mono.framework把相應的dll複製到Assets目錄下,這樣才能保證最終打包的結果跟編輯器運行的結果是相符的。


可能有人說,我都按上面的做了,打包出來還是有錯呀!比如,NotSupportedException: CodePage 936 notsupported。這其實是國際化的問題了,一般弄數據庫的時候或是編碼轉換時會出現這問題!例如調用這個方法System.Text.Encoding.GetEncoding("gb2312")編輯器中運行不會有問題,打包後就會出現這問題。那麼請注意在..\Frameworks\Mono.framework下你可以看到這麼幾個文件


它們命名可是有講究的哦!為什麼把I18N作為“國際化”的簡稱:其來源是英文單詞internationalization的首末字符i和n之間的字符數為18。 I18N.dll這是基礎,看中間部分West、MidEast、CJK……不用說大家也知道什麼意思吧!一般中文我們用I18N.CJK.dll(中日韓)、I18N.West.dll外加I18N.dll就夠了,打包前把它拷到Assets目錄下的任一文件夾下就行了。

黃彥霖 發表在 痞客邦 留言(1) 人氣()

「 群體一次發送訊息 」:RPC 的使用

 

讀這篇文章前,最好是先讀過  Unity 區域連線:http://lolikitty.pixnet.net/blog/post/23148489

 

參數可以是 String,boolean,int,float,NetworkPlayer,NetworkViewID,Vector3,Quaternion。

 發送訊息   networkView.RPC(<方法名稱>,<要傳給誰?>,<傳遞的參數>,<傳遞的參數,可以一直延伸下去>...);

在 客戶端 / 伺服端 方法名稱前面加入 @RPC 就是RPC函數,可以被 networkView.RPC() 傳遞參數進來。

另外,被@RPC標註的函式,小括號()可以『寫』或『不用寫』傳入的參數


// 只要使用到RPC,或者同步化,都要在腳本最後一行加入這一段程式碼

黃彥霖 發表在 痞客邦 留言(1) 人氣()

function Update () {

    transform.Translate(new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0) * Time.deltaTime * 10);


    if(Input.GetAxis("Vertical") == 1){

        // 左邊手把 上鍵
    }
    if(Input.GetAxis("Horizontal") == 1){

        // 左邊手把 右鍵
    }
    if(Input.GetAxis("Vertical") == -1){

黃彥霖 發表在 痞客邦 留言(2) 人氣()

 

 伺服器   MasterServer.RegisterHost("遊戲類型","遊戲名稱","遊戲註解"); 
 客戶端  MasterServer.RequestHostList("遊戲類型");

 

 清除列表  MasterServer.ClearHostList(); 

 

 請求主機列表  function Awake() {MasterServer.RequestHostList("LarusTest");}
 取得列表  var d : HostData[] = MasterServer.PollHostList();

 

//-------------------------------------------------------------------------------伺服器腳本


function Start(){
    Network.InitializeServer(32,1024,! Network.HavePublicAddress());
    MasterServer.RegisterHost("AAA","BBB","CCC");
    print("OK");

黃彥霖 發表在 痞客邦 留言(1) 人氣()

測試目前網路狀態程式碼 :

Network.TestConnection(  ) 

或者是...輸出...!!

print( Network.TestConnection() );

 

輸出
解釋
 Error  未知錯誤...
 Undetermined   還在執行,還沒有結果...
 PublicIPIsConnectable  偵測到公共 IP,連接埠可以網際網路存取... 
 PublicIPPortBlocked   偵測到公共 IP,連接埠不可以網際網路存取...
 PublicIPNoServerStarted   偵測到公共 IP,但伺服器沒有建立新遊戲,沒有連接埠可以存取...
 LimitedNATPunchthroughPortRestricted  有連接埠限制的 NAT 類型,可以NAT穿透給每個使用者,但不可以雙向
 LimitedNATPunchthroughSymmetric  雙向 NAT 類型,不可以 NAT穿透給其他雙向NAT 或有連接埠限制NAT 
 NATpunchthroughFullCone  充分錐體型可以 NAT 穿透...
 NATpunchroughAddressRestrictedCone  位址限制充分錐體型可以 NAT 穿透...

 

★ 什麼是 Public IP? 什麼是 Private IP?

Public IP:正式名稱:公共IP            ,其他名稱:真實 IP、合法 IP、或 實體 IP

Private IP:正式名稱:私人IP          ,其他名稱:假 IP、非法 IP、虛擬 IP

☆ Static IP:正式名稱:固定IP

黃彥霖 發表在 痞客邦 留言(0) 人氣()

1  

function OnGUI () {
    GUILayout.Window(0,Rect(200,200,400,300),myGUI,"夏娜裝備"); // myGUI 不可以寫成 myGUI ()
}

function myGUI(){
    GUILayout.Label("武器欄");
    if(GUILayout.Button("拿出武器")){
        print("很抱歉,沒有武器可用");
    }

}

黃彥霖 發表在 痞客邦 留言(4) 人氣()

顏色意義:關鍵字數字字串註解重點              Unity-API : 在這裡

語法類:

 基本輸出   print("萌");
 設定GUI-Text   guiText.text = "萌";
 移動GUI-Text  guiText.pixelOffset.x = 5
 鍵盤輸入控制  if(Input.GetKey("space")){ // 鍵盤按下後,要執行的程式碼,字串必須為小寫 } 
 鍵盤按下輸入控制  if(Input.GetKeyDown("space")){// 鍵盤按下後,要執行的程式碼,字串必須為小寫}
 計時器(秒)

 var t : float = Time.time;

 GUI按鈕控制  if(GUI.Button(Rect(x,y,w,h),"ABC")){ // 按鈕按下後,要執行的程式碼 }
 取亂數  var f : floatRandom.Range(1,7);  // 產生1~6,無7 
 設定GUI-Label  GUI.Label(Rect(x,y,w,h),"ABC");
 播放動畫  animation.Play("動畫名稱");  // 動畫名稱要從外部控制面板命名
 播放混合動畫  animation.CrossFade("動畫名稱");  // 動畫名稱要從外部控制面板命名
 取得物件速度  var s : float = rigidbody.velocity.magnitude;
 物件加速 (場景座標)  rigidbody.AddForce(transform.forward * 5);
 物件加速 (物體座標)  rigidbody.AddRelativeForce(transform.forward * 5);
 捨小數  var i : int= Mathf.Floor(3.333);   // i = 3
 取 0~1  var i : int = Mathf.Clamp01(0.9)  // i = 0, 如果大於1 輸出1,如果小於1 輸出0
 停止遊戲物件  gameObject.active = false;
   
 加入 Texture  var tt = Texture;  //  Texture 要從外部控制面板拉入
 GUI.DrawTexture(Rect(x,y,w,h),tt);
 改變GUI風格  var gs = GUIStyle;  //  GUIStyle 要從外部控制面板設定
 GUI.Label(Rect(x,y,w,h),"ABC",gs);  // 例子,其他GUI意同
 碰撞後呼叫函式  // ★外部控制面板 Collider 中的 Is Trigger 要打勾
 function OnTriggerEnter( c : Collider ){ // 碰撞後要執行的程式碼 }
 // c 為外部碰撞的遊戲物件(GameObject)
 碰撞後取得標籤名
                   tag名
 // ★ tag 要在外部控制面板 加入並設定 tag 名稱,最後將 tag 套用於物件上,
 //     tag 名稱開頭一定要大寫,如:Player、Aaa、Bbb、Ccc、Ddd

黃彥霖 發表在 痞客邦 留言(11) 人氣()