Unity3D學習筆記(四) 腳本內訪問其他對象,組件或腳本成員方法總結


(2012-07-08 13:40:50)

部分函數盡量不可在update使用,否則極其消耗資源
1.在一個腳本內訪問其他對象:
  想得到對象:可以用下述函數得到對象,或者直接定義一個變量讓外部手動傳入(可以的話盡量如此)。
①通過名字訪問對象(消耗資源較多),注意對象名字分為帶層次和不帶層次。以A為例,"A"為可帶父級,"/A"為不可含父級,"C/B/A"為C可帶父級,"/C/B/A"為C不可帶父級(未驗證):GameObject.Find("對象名字");
②通過標簽訪問對象,在訪問數量多個,卻單一類別的對象時(如敵人)很有用,但注意事先給對象打上標簽:
  GameObject.FindWithTag ("標簽名");      //通過標簽訪問單個對象,返回GameObject或null
③GameObject.FindGameObjectsWithTag("標簽名"); //通過標簽訪問多個對象,返回GameObject[]或null


  得到的對象一般新建GO類對象來接收。如果是對象組,則可以:
  GameObject[] go = GameObject.FindGameObjectsWithTag("標簽名");
 
2.在一個腳本內訪問其他組件:
  腳本等組件都是類,對應的實例一般是依托於游戲對象的。因此訪問特定的組件實例必須先得到其依附的游戲對象,可以通過上述說的函數或者在腳本中定義外部變量兩種方式得到某個游戲對象(外部變量傳入對象方式時,傳入類型設置為GameObject,才好找組件)。得到了對象后,很多組件就可以直接訪問,比如Transform。
  //在已經獲取游戲對象BB實例情況下,A腳本訪問BB對象上的腳本B的成員函數bb與變量bbb
  B b=(B)BB.Getcomponent("B腳本的名字");
  b.bb();或b.bbb;
 
注意!!!為了防錯,所有找GO對象,傳入G0對象的代碼都要做防空報錯處理。
 
3.在一個腳本內訪問其所附加物體及其子物體上附加的所有MonoBehaviour子類腳本(包括自身在內)的同名函數:
   使用消息廣播函數:void BroadcastMessage (methodName : String, parameter : object = null,
options : SendMessageOptions = SendMessageOptions.RequireReceiver)
   例如:BroadcastMessage("ApplyDamage", 5.0F);
         //收到消息的0參數ApplyDamage函數會自動忽略參數5.0F
         //SendMessageOptions.RequireReceiver方式會在沒有任何組件接收消息時打印出錯誤
 
4.在一個腳本內訪問其所附加物體的子物體信息:(層次關系控制)
    GO的層次關系通過Transform組件的層次關系來體現,訪問GO的子物體也常通過Transform組件來完成。
①this.transform.childCount //得到GO的Transform組件的子Transform的個數,也即子物體個數。
②transform.GetChild(從0開始的index); //得到該GO的第index+1個子物體的Transform組件。
③依據②中得到的子物體Transform組件可以進一步獲取子物體游戲對象的信息:
transform.GetChild(index).gameObject;        //得到子物體GameObject類
transform.GetChild(index).gameObject.name;   //得到子物體名字
transform.GetChild(i).gameObject.SetActiveRecursively(true);//控制子物體是否顯示達到切換武器等功能
   碰撞后常要用Destroy(this.gameObject)消除火箭彈等,但這個函數會消除目標物體及其所有子物體,我們能需要保持煙尾等子物體效果不消除時,可以先用this.transform.DetachChildren();解除所有子物體與目標物體的父子關系(也是通過Transform組件控制父子關系)。
   某些情況下需要解除特定子物體父子關系,可以通過訪問子物體的this.transform.parent=null來實現(先用GetChild(i)遍歷子物體,由名字得到目標子物體)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM