Unity-シーン遷移先のプレイヤー位置について
解決したいこと
シーン遷移先のプレイヤー位置を、移動可能マップ内の特定の位置に設定する。
◆現状
Unity2Dにて、NPCに触れたらシーン遷移させようとしています。
◆問題点
フェイドアウト後にシーン遷移するのですが、マップの外に出てしまいます。
任意のシーン内の指定の場所に遷移させるには、どのような解決策がありますでしょうか。
また、例えばゲームオブジェクトの隣に移動させる方法があれば、それも採用したいと思っています。
理想は、シーン先のtransform位置をスクリプトで直接指定しない方法であれば嬉しいです。
よろしくお願いいたします!
以下、NPCにアタッチしたTeleportToのスクリプトです。
該当するソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class TeleportTo : MonoBehaviour {
[Tooltip("Enter the scene name")]
public string scene;
[Tooltip("Assign a unique ID to this teleport")]
public string teleportName;
public TeleportFrom entry;
[Tooltip("Enter the duration of transition to the new scene in seconds")]
public float transitionTime = 1f;
private bool openScene;
private bool opengameobjects;
public BoxCollider2D collider;
// Use this for initialization
void Start () {
entry.teleportName = teleportName;
}
// Update is called once per frame
void Update () {
if(openScene)
{
transitionTime -= Time.deltaTime;
if(transitionTime <= 0)
{
openScene = false;
SceneManager.LoadScene(scene);
}
}
}
private void OnTriggerEnter2D(Collider2D other)
{
if(other.tag == "Player")
{
openScene = true;
GameManager.instance.fadingBetweenAreas = true;
GameMenu.instance.gotItemMessage.SetActive(false);
ScreenFade.instance.FadeToBlack();
PlayerController.instance.areaTransitionName = teleportName;
}
}
private void OnDrawGizmos()
{
Gizmos.color = new Color(0, 255, 0, .3f);
Gizmos.matrix = transform.localToWorldMatrix;
Gizmos.DrawCube(new Vector3(collider.offset.x, collider.offset.y, -2), collider.size);
}
}
NPCの子要素に「TeleportFrom」というスクリプトもアタッチされています。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TeleportFrom : MonoBehaviour {
[HideInInspector]
public string teleportName;
// Use this for initialization
void Start () {
if(teleportName == PlayerController.instance.areaTransitionName)
{
PlayerController.instance.transform.position = transform.position;
PlayerController.instance.GetComponent<SpriteRenderer>().sortingLayerName = "Player";
}
ScreenFade.instance.FadeFromBlack();
GameManager.instance.fadingBetweenAreas = false;
}
// Update is called once per frame
void Update () {
}
}
疑問点や仮説
・teleport toは(シーン遷移元&遷移先)で対になっていなければいけないのか?
・シーンではなくゲームオブジェクトの隣に遷移させることはできないのか?
0