Unity 2019.3 から Unity Standard Assets 2018.4 版 を Import した際に出るエラーの対処方法

Standard Assets のバージョンが 2017.3 から 2018.4に上がってました.

f:id:xrdnk:20200411114444p:plain

最近消えていた

実はこのStandard Assets,3月末から1週間くらいUnity Assets Store から消えてました.
最近復活したばかりです.

今日Standard AssetsのUtilityで色々遊んでみようと思ったら,2018.4に上がっていた次第.

2019.3 から用いるとエラーが出る

Unity 2019.3(私の環境ではUnity2019.3.9f1ですが)の場合,早速Importするとこんなエラーが出ます.
Unity2019.3から古いGUIシステムが使えなくなったことによって出るエラーです.

Assets\Standard Assets\Utility\SimpleActivatorMenu.cs(11,16): error CS0619: 'GUIText' is obsolete: 'GUIText has been removed. Use UI.Text instead.'

f:id:xrdnk:20200411115221p:plain

エラー対処法

英語を読めば,どうすればいいかわかりますね.
GUITextはもう使えないから,代わりにUI.Textを使ってね.と書かれています.

なので,SimpleActivatorMenu.csのスクリプトを書き換えましょう.

変更前

using System;
using UnityEngine;

#pragma warning disable 618
namespace UnityStandardAssets.Utility
{
    public class SimpleActivatorMenu : MonoBehaviour
    {
        // An incredibly simple menu which, when given references
        // to gameobjects in the scene
        public GUIText camSwitchButton;
        public GameObject[] objects;


        private int m_CurrentActiveObject;


        private void OnEnable()
        {
            // active object starts from first in array
            m_CurrentActiveObject = 0;
            camSwitchButton.text = objects[m_CurrentActiveObject].name;
        }


        public void NextCamera()
        {
            int nextactiveobject = m_CurrentActiveObject + 1 >= objects.Length ? 0 : m_CurrentActiveObject + 1;

            for (int i = 0; i < objects.Length; i++)
            {
                objects[i].SetActive(i == nextactiveobject);
            }

            m_CurrentActiveObject = nextactiveobject;
            camSwitchButton.text = objects[m_CurrentActiveObject].name;
        }
    }
}

変更後

using System;
using UnityEngine;
using UnityEngine.UI; // UIを使うのでusing UnityEngine.UI; を記述する

#pragma warning disable 618
namespace UnityStandardAssets.Utility
{
    public class SimpleActivatorMenu : MonoBehaviour
    {
        // An incredibly simple menu which, when given references
        // to gameobjects in the scene
        public Text camSwitchButton;  // NOTE : GUIText → Text に書き換えた 
        public GameObject[] objects;


        private int m_CurrentActiveObject;


        private void OnEnable()
        {
            // active object starts from first in array
            m_CurrentActiveObject = 0;
            camSwitchButton.text = objects[m_CurrentActiveObject].name;
        }


        public void NextCamera()
        {
            int nextactiveobject = m_CurrentActiveObject + 1 >= objects.Length ? 0 : m_CurrentActiveObject + 1;

            for (int i = 0; i < objects.Length; i++)
            {
                objects[i].SetActive(i == nextactiveobject);
            }

            m_CurrentActiveObject = nextactiveobject;
            camSwitchButton.text = objects[m_CurrentActiveObject].name;
        }
    }
}

以上でエラーが出なくなると思います.

Standard Assets 2017.3版 でも同様のエラーが出ていた

connect.unity.com

2017.3版 でも同様のエラーが出ていました.その時も同じ感じに書き換えてました.