(Unity)CharacterControllerを付けたオブジェクトがうまくワープ移動しない場合の対処法

(方針)

  • OnTriggerEnterの当たり判定自体はとれている。
  • しかし、ワープ(座標変更=移動)がうまく動作しない(動作することもあれば、しないこともある。不安定)
  • CharacterControllerを一時的にオフにすることでこの問題を解消する。

(スクリプト)

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

public class WarpPoint : MonoBehaviour
{
    public Vector3 pos;

    // ★ポイント
    private GameObject target;

    private void OnTriggerEnter(Collider other)
    {
        // ★ポイント
        // キャラクターコントローラをいったんオフにする。
        target = other.gameObject;
        target.GetComponent<CharacterController>().enabled = false;

        // ワープ発動
        other.gameObject.transform.position = new Vector3(pos.x, pos.y, pos.z);

        // ★ポイント
        // 0.5秒後にキャラクターコントローラをオンにする。
        Invoke("ResetC", 0.5f);

    }

    // ★ポイント
    void ResetC()
    {
        target.GetComponent<CharacterController>().enabled = true;
    }
}

(確認)

  •  ワープスクリプトのついたオブジェクトに触れた瞬間に、毎回ワープすれば成功