2014-02-19 296 views
0

任何人都可以告訴我如何改進我的搜索系統嗎?搜索關鍵字

現在我只是將我在搜索框中鍵入的單詞與我想查找的對象的名稱進行比較。但這種方式必須是完全相同的詞。

我想以某種方式爲每個對象有一個關鍵字列表,如果我在搜索中點擊該關鍵字,它會彈出我想找到的對象。

我曾考慮將關鍵字存儲在數組中,但是如何將一個單詞添加到數組中? 我也想過讓所有的關鍵字在一個枚舉中,這是可能的嗎?如果是這樣,怎麼樣?

+2

它完全是我不清楚你在問什麼。 Unity3D適用於遊戲,但我覺得你的搜索系統不在遊戲中。另外,顯示一些代碼。 – Virtlink

+0

對不起。這不完全是一個遊戲,但它是在Unity3D內部創建的。我正在創建一個程序,其中有一些對象存儲在列表中。爲了訪問它們,我有一個gui文本字段,用於在我的列表中搜索我想要的對象。 現在我想要的是,這個對象有一些關鍵字附加到它,所以,而不是鍵入整個單詞,如eksample「畢達哥拉斯」,我只需要鍵入「pyt」或「pyta」 –

+0

可以你包含一些最小的腳本例子。如果你的意思是你想要它在編輯器中,我想你想讓自定義編輯器 – deinonychusaur

回答

1

我設法讓它按我想要的方式工作。這可能不是最好的解決方案,但它適用於我現在的需求。

這仍然是一個正在進行的工作,許多事情仍然需要改變,但現在,搜索功能的工作,與關鍵字支持。

感謝你們誰是迅速作出反應:)

對於任何人都希望做同樣的事情,這裏的一些代碼:

FormulaClass:

#pragma strict 
import System.Collections.Generic; 

public class Formula 
{ 
    var name : String; 
    var formula : Texture2D; 
    var example : Texture2D; 
    //This is where i put all the words i can search for, 
    //to find this particular object. 
    var keywords : List.<String> = new List.<String>(); 
} 

FormulaContainer:

#pragma strict 
import System.Collections.Generic; 

var formulas : List.<GameObject> = new List.<GameObject>(); 


private var myTransform : Transform; 


function Start() 
{ 
    myTransform = transform; 

    formulas.Add(Resources.Load("Formulas/Pythagoras", GameObject)); 
    formulas.Add(Resources.Load("Formulas/Test2", GameObject)); 
    formulas.Add(Resources.Load("Formulas/Test3", GameObject)); 
} 

function Search (searchWord : String) : GameObject 
{ 
    var searchResult : GameObject; 
    var formulaScript : FormulaScript; 

    for (var formula : GameObject in formulas) 
    { 
     formulaScript = formula.GetComponent(FormulaScript); 

     for (var keyword : String in formulaScript.formulaClass.keywords) 
     { 
      if (keyword == searchWord) 
      { 
       searchResult = formula; 
      } 
     } 
    } 
    return searchResult; 
} 

FormulaScript:

#pragma strict 

var formulaClass : Formula; 

private var myTransform : Transform; 


function Start() 
{ 
    myTransform = transform; 

    formulaClass.name = myTransform.name; 
    formulaClass.formula = Resources.Load("Images/" + myTransform.name, Texture2D); 
    formulaClass.example = Resources.Load("Images/" + myTransform.name + "Example", Texture2D); 
} 

UI:

#pragma strict 

private var myTransform : Transform; 
private var currentFormula : GameObject; 
private var currentInstanceFormula : GameObject; 
private var size : Vector2; 
private var offset : int = 25; 
private var searchField : String = ""; 
private var container : FormulaContainer; 


function Start() 
{ 
    myTransform = transform; 

    container = myTransform.GetComponent(FormulaContainer); 

    size.x = Screen.width - offset * 2; 
    size.y = Screen.height - offset * 2; 
} 

function OnGUI() 
{ 
    GUI.BeginGroup (new Rect (offset, offset, size.x, size.y)); 

     GUI.Box (new Rect (0, 0, size.x, size.y), ""); 

     searchField = GUI.TextField (Rect (25, 25, 100, 25), searchField); 

     if (GUI.Button (Rect (130, 25, 65, 25), "Search")) 
     { 
      currentFormula = container.Search(searchField); 

      if (currentInstanceFormula) 
      { 
       Destroy(currentInstanceFormula); 
      } 

      if (currentFormula) 
      { 
       Debug.LogWarning ("found " + currentFormula.transform.name + " during the search"); 
       var newInstance : GameObject = Instantiate (currentFormula, myTransform.position, myTransform.rotation); 
       currentInstanceFormula = newInstance; 
       newInstance.transform.name = currentFormula.transform.name; 
      } 
      else 
      { 
       Debug.LogWarning ("Nothing was found during the search"); 
      } 
     } 

     if (currentInstanceFormula) 
     { 
      var formulaScript : FormulaScript; 
      var name : String; 
      var formula : Texture2D; 
      var example : Texture2D; 

      formulaScript = currentInstanceFormula.GetComponent(FormulaScript); 
      name = formulaScript.formulaClass.name; 
      formula = formulaScript.formulaClass.formula; 
      example = formulaScript.formulaClass.example; 

      GUI.Label (new Rect (25, 75, 100, 25), name); 
      GUI.DrawTexture (new Rect (100, 150, 256, 64), formula); 
      GUI.DrawTexture (new Rect (450, 150, 512, 256), example); 
     } 

    GUI.EndGroup(); 
} 
+0

+1分享你的結果。我開始了一個答案,但當我看到JavaScript標記時(我明白它,但只讀:)我放棄了它,但我認爲這非常重要。 – Kay