2024-05-07|閱讀時間 ‧ 約 25 分鐘

2024 虛擬實境 x 人因設計 08unity碰撞器Collider&Trigger-2(應用)

    raw-image

    來比較這4個方塊附屬的屬性有什麼不同


    來做個簡單的小練習ㄅ

    先來個Collider

    建一個等等跟椅子互動的物件(Sphere),並給他一個材質區分顏色


    建一個腳本附在物件(Sphere)上,命名腳本*SphereCollider*

    在裡面新建一個方法

    private void OnCollisionEnter (Collision Sphere)

    {

    if (Sphere != null)

    {

    Destroy(gameObject);

    }

    }


    private void OnCollisionEnter(Collision Sphere)

      • 一個私有(private)的方法,當物體發生碰撞時會被使用。
      • Collision Sphere 是表示碰撞資訊的物件,其中包含了有關碰撞事件的詳細資訊,比如碰撞的對象、碰撞點等等。

    if (Sphere != null)

      • 一個條件判斷,確保碰撞的對象不為空(null)。
      • 如果 Sphere 不是空,代表碰撞的對象是有效的球體(Sphere)。

    Destroy(gameObject)

      • 如果碰撞的對象是有效的球體(Sphere),則使用 Destroy 函數來刪除當前的物件(gameObject)。
      • gameObject 代表當前腳本所附加的物件,也就是發生碰撞的物件本身。

    功能是在物體發生碰撞時,檢查碰撞的對象是否是一個有效的球體(Sphere),如果是的話,就銷毀(Destroy)當前物件(gameObject)。

    BEFORE V.S. AFTER

    這是被碰到的物件後會消除的情況


    那來看另外一個情況,碰到的物件後會消除主角本身。

    再建一個腳本附在物件(Sphere)上,命名腳本*SphereCollider01*

    private void OnCollisionEnter (Collision SSphere)

    {

    if (SSphere != null)

    {

    Destroy(SSphere.gameObject);

    }

    }


    Destroy(SSphere.gameObject)

      • 如果碰撞的對象存在,則使用 Destroy 函數來銷毀碰撞對象的遊戲物件(gameObject)。 #跟SSphere 物件所關聯的遊戲物件
      • SSphere.gameObject 代表碰撞的對象的遊戲物件。

    功能是在物體發生碰撞時,檢查碰撞的對象是否是一個有效的球體(Sphere),如果是的話,就銷毀(Destroy)撞到他的物件(gameObject)。

    BEFORE V.S. AFTER

    家有發現現在我們球球浮在空中嘛!?

    可以試看看把球加入Rigidbody屬性看看,會發生什麼事
    〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️

    任何物件的碰撞都會刪除物件,包括掉落到地面。😭😭😭🥺🥺

    改一下物件屬性跟程式碼

    物件屬性:
    更改這邊Tag

    程式碼:

    private void OnCollisionEnter (Collision Sphere)

    {

    if (SSphere != null)

    if (Sphere.gameObject.tag == "Player")

    {

    Destroy(gameObject);

    }

    }

    可以使用標籤判斷是否為"Player"碰撞

    Tag(標籤)是 Unity 中用來識別物件類型的標記,可以幫助在程式碼中準確地辨識和處理不同類型的遊戲物件。

    ~~~~~這樣就不用怕掉到地板後 消失不見了~~~~


    剛剛碰到深藍球球(*SphereCollider01*),玩家直接消失不見。這樣遊戲玩不下去ㄌ啦

    小改一下

    if (SSphere.gameObject.tag == "Player")

    {

    Destroy(SSphere.gameObject)

    SSphere.gameObject.transform.position = new Vector3((float)-2.70630479, (float)1.68752456, (float)1.24000001);

    SSphere.gameObject.transform.rotation = Quaternion.identity;

    }

    //這個是碰到物件後,會回到起點。

    複製物體位置 的路徑

    不想一直進來一直改position那我們就設個變數吧

    ***所以說變數真的很重要吧***


    public Transform point;

    SSphere.gameObject.transform.position = point.position;

    加入一個新的空物件,可命名New position 把這個空物件再拖進剛剛的point 就完成了
    你就會發現,你可以做一些效果出來了,比如說傳送門、回到原點、瞬移等等

    完成了Collider的小應用ㄌ,恭喜大家🤩🤩🤩

    下篇換Triggerㄉ應用~~

    分享至
    成為作者繼續創作的動力吧!
    是一門由國立高雄科技大學工業設計研究所設立的選修課程,新設立的課, 課程是新的 * 領域是新的 * 什麼都是新的。 所以_ _ _ _ __ __ 好好期待一下吧 !! .. ## 互動人因設計 ## 高科工設所
    從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

    發表回應

    成為會員 後即可發表留言
    © 2024 vocus All rights reserved.