Unity Learning Record:トリガーを使用して、オブジェクトに近いキャラクター間の相互作用の方法を作成します

Tiggerトリガーを使用して、接近後にインタラクティブアイコンを表示します

この記事はUnity2019.3.2f1バージョンに基づいています

最近は一人称ゲームを作りたいと思っています。キャラクターとオブジェクトの相互作用は多くのゲームで使われています。キャラクターが一定の距離に近づくと、オブジェクトの上部にプロンプ​​トアイコンが表示され、プロンプトに従ってキーを押します。オブジェクトの相互作用。したがって、この記事では、あなた自身の学習の旅を記録してください。

ステップ1:オブジェクトを相互作用させる

関数であるため、物理オブジェクトは通常のキューブで試されます。
まず、Box Colliderを使用してキューブと空のオブジェクトTiggerを作成し、空のオブジェクトをキューブにドラッグして、空のオブジェクトをキューブの子に属します。空のオブジェクトのisTiggerを確認することを忘れないでください。
cubeandTigger

ステップ2:リマインダーアイコンを作成する

平面を作成してライブにし、ファイルバー-> [作成]-> [マテリアル]を右クリックして新しいシェーダーを作成し、選択した画像をハングアップしてから、サイズを変更して、トリガーを使用して空のオブジェクトにハングアップします。私はEとPの文字を思いついた。結局、古いロールのような多くのことをしたとき、私はこのように慣れた。ここでは、将来の使用に便利なようにプレハブにしました。
アイコン

ステップ3:コード

トリガーに関するコードは簡単に記述でき、特別なメソッドがあります。ここで大物のコードを借ります。空のTiggerオブジェクトに掛けます。

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

public class TiggerTest : MonoBehaviour
{
    public GameObject prompt;

    public void Show(GameObject prompt){
        //用来将某个物体激活或是禁用(这里是prompt,也就是那个图标
        //禁用时这个物体和其子物体都会禁用,包括上面的脚本,在这里很方便
        prompt.SetActive(true);
    }
    public void Hide(GameObject prompt){
        prompt.SetActive(false);
    }
    void OnTriggerEnter(Collider other)//接触时触发,无需调用
    {
        Debug.Log(Time.time + ":进入该触发器的对象是:" + other.gameObject.name);
        Show(prompt);
    }
    void OnTriggerStay(Collider other)    //每帧调用一次OnTriggerStay()函数
    {
        Debug.Log(Time.time + "留在触发器的对象是:" + other.gameObject.name);
    }
    void OnTriggerExit(Collider other)
    {
        Debug.Log(Time.time + "离开触发器的对象是:" + other.gameObject.name);
        Hide(prompt);
    }
    
    // Start is called before the first frame update
    void Start()
    {
        Hide(prompt);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

ご覧のとおり、このスクリプトは、オブジェクトがトリガーに入ると、アイコンが表示されたり消えたりすることを認識しています。
しかし、デバッグ時に別の問題が発生しました。アイコンは結局のところ単なる平面であり、キャラクターが3Dで移動すると、2Dペーパーアイコンは非常に見栄えが悪くなります。
ほとんど見えない
そのため、アイコンをカメラに向けたままにするスクリプトを作成しています。

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

public class FaceToCamera : MonoBehaviour
{
    
    
    // Start is called before the first frame update
    void Start()
    {
    
    
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        //当前对象始终面向摄像机。
        this.transform.LookAt(Camera.main.transform.position);
        this.transform.Rotate(90,0,0);
    }
}

次に、オブジェクトプレーンアイコンにスクリプトを掛けます。
最後に、照明上の理由により、アイコンを回転させたときにバックライトが表示される場合は、アイコンで使用されるシェーダーのプロパティを変更し、シェーダーを[消灯/テクスチャ]として選択する必要があります。これで完了です。
テクスチャ

結果

それが成功したかどうかをテストするために、Fungusプラグインと簡単な対話を行い、電話を切りました。
アップロードサイズの制限も大きすぎて、5M未満です

拡張版

以上でオブジェクトに近づいても操作できるという問題は解決しますが、テーブルの上に持って行ったり、キーカップなどの小さなオブジェクトをチェックしたりするなど、小さなオブジェクトを操作したい場合は、実現が難しいので、新しいことを考えなければなりません。このメソッドはTiggerをトリガーします。
この方法は実際には非常に単純で、マッシュレンダラーコンポーネントなしでキューブをカメラに配置するだけです。
接する
位置を適切に調整
ここに写真の説明を挿入すれば完了です!
このとき、カメラが動くとキューブも動き、トリガーをタッチするとスクリプトがトリガーされ、オブジェクトとの相互作用機能を実現します。

おすすめ

転載: blog.csdn.net/weixin_46149121/article/details/106061176
おすすめ