end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

unityの OnTriggerEnter()による当たり判定

unityには、先程の OnCollisionEnter()とは 別のOnTriggerEnter()があるらしい。

先程の OnCollisionEnter() では、Rigidbodyどうしの衝突を判定できましたが OnTriggerEnter()では、衝突することなく、通過?を判定できるみたい。

以下では、3D Sphereをカーソルキーで動かし、 他の 3D Sphere と衝突?した場合、他の 3D Sphere の色を変更します。

Step 1 - 手玉となる 赤色 3D Sphere 追加

先程のentryと全く同様、「Add Component」から「Rigidbody」を追加します。

Step 2 - 的玉となる 白色 3D Sphere 追加

的玉と判定する為「Others」というタグを設定ますが、「Rigidbody」は追加しません。

代わりに、Sphere Colliderの「Is Trigger」を ONにします。

Step 3 - c# script作成

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {
    bool f = true;
    Vector3 cv = new Vector3(0f, 1f, -5f);
    Rigidbody rb = null;

    void Start(){
        rb = GetComponent<Rigidbody>();
    }

    void Update(){
        var sv = transform.position;
        sv.y = 1f;
        Camera.main.transform.position = sv + cv;

        var x = Input.GetAxis("Horizontal");
        var y = Input.GetAxis("Vertical");
        var v = new Vector3(x, 0, y);

        rb.AddForce(v);
    }

    void OnTriggerEnter(Collider collider){
        if (collider.gameObject.tag == "Other"){
       //色を変更します
            var r = collider.gameObject.GetComponent<Renderer>();
            r.material.color = new Color(0f, 0f, 0f, 0.25f);
            r.material.SetFloat("_Metallic", 0f);
        }
    }
}