2014-02-19 3 views
0

Может ли кто-нибудь дать мне представление о том, как я могу улучшить свою поисковую систему?Поиск по ключевым словам

Прямо сейчас я просто сравниваю слово «i» в своем поле поиска с именем объекта, который я хочу найти. Но таким образом это должно быть то же самое слово.

Я бы хотел как-то иметь список ключевых слов для каждого объекта, и если бы я ударил это ключевое слово в поиске, то он всплыл с объектом, который я хотел найти.

Я думал о хранении моих ключевых слов в массиве, но как бы добавить слово в массив? У меня также была мысль о том, что все мои ключевые слова перечислены, возможно ли это? если да, то как?

+2

Это совершенно непонятно мне, что вы просите. Unity3D для игр, но у меня такое чувство, что ваша система _search_ не входит в игру. Также покажите код. – Virtlink

+0

Извините. Это не совсем игра, но она создана внутри Unity3D. Я создаю программу, в которой у меня есть некоторые объекты, хранящиеся в списке. И чтобы получить их, у меня есть текстовое поле gui, используемое для поиска моего списка для объекта, который я хочу. Теперь, что я хочу, для этого объекта есть определенные ключевые слова, привязанные к нему, так что вместо того, чтобы вводить все слово, например, для eksample «Pythagoras», мне нужно было бы набирать «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; 
} 

Формула:

#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

Смежные вопросы