Unity觸發(fā)交互的幾種方式

自己剛剛接觸Unity,覺得很有意思,了解了幾種觸發(fā)方式,記錄一下方便以后查閱

1.光線投射

簡單來說就是用眼神殺死你

public static bool Raycast(Vector3 origin, Vector3 direction,out RaycastHit hitInfo, float maxDistance, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

origin 是光源點(diǎn)
direction 是發(fā)出的方向
maxDistance 是光線的距離
hitInfo 如果返回值是true,它會回調(diào)出被碰撞物體的信息
layerMask 是選定當(dāng)前層內(nèi)碰撞器,忽略其他層
queryTriggerInteraction 指定查詢指令是否撞擊觸發(fā)器
返回值判斷光線是否與其他物體交互

void Update () {
        RaycastHit hit;
        if(Physics.Raycast(transform.position,transform.forward,out hit,3.0f)){
        //  hit.collider.gameObject 獲取到碰撞的物體進(jìn)行操作    
        }
    }

2.角色控制器

void OnControllerColliderHit(ControllerColliderHit hit){} 只有添加角色控制器組件才會觸發(fā)這個方法, hit為碰撞的對象,例子如下

void OnControllerColliderHit(ControllerColliderHit hit){
        
        if (hit.gameObject.tag == "playerDoor"   ) { //碰撞物體的標(biāo)簽
            AudioSource source = hit.gameObject.GetComponent<AudioSource> ();
            if(!source.isPlaying){
                source.PlayOneShot (door_open_sound); //只執(zhí)行一次的音頻
            }
            hit.gameObject.transform.parent.GetComponent<Animator> ().Play ("dooropen");
            hit.gameObject.transform.Rotate(0,90,0);
            InvokeRepeating ("close", 3.0f, 3.0f); //計時器
        }   
}

3.OnTriggerEnter

膠囊碰撞器.png

只要兩者有一個勾選Is Trigger 選項, 在碰撞范圍內(nèi)并且有一個有剛體組件就會觸發(fā) OnTriggerEnter方法,
可以調(diào)節(jié)觸發(fā)范圍的大小,來達(dá)到你想要的碰撞范圍

void OnTriggerEnter(Collider col){
        if (col.gameObject.tag == "Player") {
            col.gameObject.SendMessage ("cellPickup");//觸發(fā)col.gameObject的方法
            Destroy (gameObject);//銷毀
        }
    }

4.OnCollisionEnter

只有都沒有勾選Is Trigger 選項,并且發(fā)起的碰撞的一方要有剛體,就會觸發(fā)此方法

void OnCollisionEnter(Collision collision){
//      print (GetComponent<wupin>().count);
        print ("剛體碰撞");

}

如果想實現(xiàn)兩個剛體物理的實際碰撞效果時候用OnCollisionEnter,Unity引擎會自動處理剛體碰撞的效果。
如果想在兩個物體碰撞后自己處理碰撞事件用OnTriggerEnter。

以上是自己學(xué)習(xí)了解到的 ,如有不對請大神們指出來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 111. [動畫系統(tǒng)]如何將其他類型的動畫轉(zhuǎn)換成關(guān)鍵幀動畫? 動畫->點(diǎn)緩存->關(guān)鍵幀 112. [動畫]Unit...
    胤醚貔貅閱讀 13,524評論 3 88
  • 無論是碰撞檢測還是觸發(fā)檢測,他們都基于Collider組件。兩個游戲?qū)ο蟀l(fā)生碰撞時,碰撞器可以產(chǎn)生系統(tǒng)默認(rèn)的碰撞產(chǎn)...
    S_H_C閱讀 3,136評論 0 3
  • 1. 準(zhǔn)備場景 下載并導(dǎo)入官方Space Shooter教程的范例素材包,我們僅使用其中的模型、材質(zhì)、貼圖、Pre...
    shimmery閱讀 6,692評論 0 16
  • (一)VRTK_ SimplePointer(直線簡單激光指針) (二)VRTK_ControllerEvents...
    _涼笙閱讀 4,860評論 2 7
  • 這篇文章默認(rèn)大家已經(jīng)對Unity3D和PlayMaker有一定的了解,所以沒有把所有操作步驟都寫的非常詳細(xì),不太看...
    shimmery閱讀 6,620評論 6 15

友情鏈接更多精彩內(nèi)容