2014-02-19 2 views
0

누구든지 내 검색 시스템을 개선 할 수있는 방법에 대한 아이디어를 줄 수 있습니까?키워드로 검색

지금은 검색 상자에 입력하고 싶은 단어를 찾고 싶은 개체의 이름과 비교하고 있습니다. 그러나이 방법은 똑같은 단어이어야합니다.

나는 어떻게 든 각 개체에 대한 키워드 목록을 갖고 싶습니다. 그리고 검색에서 해당 키워드를 누르면 내가 찾고자하는 개체가 팝업됩니다.

키워드를 배열에 저장하려고 생각했지만 어떻게 배열에 단어를 추가 할 수 있습니까? 또한 열거 형의 모든 키워드를 사용하는 것에 대한 생각이 있었습니까? 그렇다면 어떻게?

+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

관련 문제