【Unity エラー】Android APKビルドできない時
CommandInvokationFailure: Failed to build apk. See the Console for details.
debug certificate expired on
【Unity ライブラリ】Easy Save 2 : DateTime型のデータを保存
EasySave2でDateTime型は保存できないので、string型で保存する。
public string _sCurTimeIsLeft{ get{ if (ES2.Exists ("curTimeIsLeft" + _id)) { return ES2.Load<string> ("curTimeIsLeft" + _id); } else { return null; } } set{ ES2.Save (value, "curTimeIsLeft" + _id); } } public string _sTimeIsClicked{ get{ if (ES2.Exists ("timeIsClicked" + _id)) { return ES2.Load<string> ("timeIsClicked" + _id); } else { return null; } } set{ ES2.Save (value, "timeIsClicked" + _id); } }
呼び出す側で、intやDateTime型に変換してあげる。
void Update () { if(SkillSource._item[_id]._bOnUseSkill){ if( _curTimeIsLeft > 0){ _curTimeIsLeft = Convert.ToInt64(SkillSource._item[_id]._sCurTimeIsLeft); TimeSpan pastTime = DateTime.Now - Convert.ToDateTime(SkillSource._item[_id]._sTimeIsClicked); _curTimeIsLeft = _timeCoolDown - pastTime.Seconds; SkillSource._item[_id]._sCurTimeIsLeft = Convert.ToString(_curTimeIsLeft); UpdateContent(); }else{ SkillSource._item[_id]._bOnUseSkill = false; _curTimeIsLeft = _timeCoolDown; _bIcon.enabled = true; } } } public void SetContent(int id) { List<SkillContents> _item = SkillSource._item; _id = id; _type = _item[_id]._type; _curLevel = _item[_id]._curLevel; _levelRequirement = _item[_id]._stageRequirement; _iSkill.SetSprite ( _item[_id]._spriteName); Utility.ChangeTextMesh(_tName , _item[_id]._name); Utility.ChangeTextMesh(_tDescription, _item[_id]._description); UpdateContent(_id); }
UI エフェクトコンポーネント "outline"
UI エフェクトコンポーネント「outline」を使って、UI をアウトラインする。
【Unity エラー】Inspecterでnullスクリプトがないか確認する
NullReferenceException: Object reference not set to an instance of an object
<原因>
Inspecterで、null(指定していない)スクリプトをコンポーネントに持つオブジェクトが存在する。
NullReferenceException: Object reference not set to an instance of an object UnityEngine.UI.Graphic.OnRebuildRequested () (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Graphic.cs:454) UnityEngine.UI.GraphicRebuildTracker.OnRebuildRequested () (at /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/GraphicRebuildTracker.cs:33) UnityEngine.CanvasRenderer.RequestRefresh ()
アニメーションのプレイ "Animator.Play("stateName", layer, startFrame);"
using UnityEngine; using System.Collections; using System.Collections.Generic; public class AchievementNotif : MonoBehaviour { public AchievementContentNotif _achievementContentNotif; public Animator _animNotif; #region Event void OnEnable(){ EventAchievementManager.onAchievementE += ShowNotif; } void OnDisable(){ EventAchievementManager.onAchievementE -= ShowNotif; } #endregion void ShowNotif (int i) { List<AchievementContents> _myCollection = AchievementSource._instance._myCollection; _achievementContentNotif.SetContent(_myCollection[i]._name, _myCollection[i]._type, _myCollection[i]._goal); _animNotif.Play("PopNotif" , -1 , 0f); } }
【C#】Delegate使用 Event 使用例 第三弾
EventManagerでイベントの起点を束ねる。
1. 全てのイベントを管理するEventManager
2. Eventの起点
3. どんなEventを呼ぶかを記述
1. 全てのイベントを管理するEventManager
EventManager.cs
using UnityEngine; using System.Collections; public class EventManager { public delegate void GameChangeScene(GameController.GAME_SCENE scene); public static event GameChangeScene onGameChangeSceneEvent; public static void GameChangeSceneMethod(GameController.GAME_SCENE scene) { if (onGameChangeSceneEvent != null) onGameChangeSceneEvent(scene); } }
2. Eventの起点
ボスが殺された時にshareUIを呼ぶ。
EnemyManager.cs
void HandleonBossKilledEvent (){ EventManager.GameChangeSceneMethod (GameController.GAME_SCENE.GAME_SCENE_SHARE); _wave =0; _maxWave = 10; GameController._stage++; GameDataManager.SaveStage(GameController._stage); EventManager.ChangeStageMethod(); DisableBossMode (); SpawnEnemies (); }
3. どんなEventを呼ぶかを記述
ShareUIを表示する
UIShare.cs
void OnEnable(){ EventManager.onGameChangeSceneEvent += HandleonGameChangeSceneEvent; } void OnDisable(){ EventManager.onGameChangeSceneEvent -= HandleonGameChangeSceneEvent; } void HandleonGameChangeSceneEvent (GameController.GAME_SCENE scene) { switch (scene) { case GameController.GAME_SCENE.GAME_SCENE_SHARE: _container.SetActive(true); _anim.Play ("PaperNewsFlashEntrance", -1, 0f); AudioManager.Instance.PlaySound("sfxNewsFlash"); break; default: _container.SetActive(false); break; } }
【Unity】enum列挙型に関して
1. "string型(文字列型)"から"enum列挙型"ヘのキャスト
private List<AchievementContents> LoadAbilityTableFromJSON(string json){ JsonData jresult = JsonMapper.ToObject (json); List<AchievementContents> data = new List<AchievementContents> (); for(int i=0;i<jresult.Count;i++){ data.Add(new AchievementContents(){ _id = (int)jresult[i]["Id"], _name = (string)jresult[i]["Name"], _type = (AchievementManager.ACHIEVEMEN_TYPE)Enum.Parse(typeof(AchievementManager.ACHIEVEMEN_TYPE), (string)jresult[i]["Type"]), _goal = (string)jresult[i]["Goal"], _rewardType = (string)jresult[i]["Reward Type"], _reward = (string)jresult[i]["Reward"], }); } return data; }
数値や文字列を列挙体に変換する: .NET Tips: C#, VB.NET
2. "int型"から"enum列挙型"ヘのキャスト
using UnityEngine; using System.Collections; public class AngelManager : MonoBehaviour { public GameObject _gVideoAdsNotif; public enum ANGEL_BONUS_TYPE { ANGEL_BONUS_VIDEOADS = 0, ANGEL_BONUS_COIN = 1, ANGEL_BONUS_SKILL_BAYANGAN = 2, } void OnEnable() { EventManager.onCoinBonusClickEvent += HandleonAngelClickEvent; } void OnDisable() { EventManager.onCoinBonusClickEvent -= HandleonAngelClickEvent; } private void HandleonAngelClickEvent() { int type = Random.Range(0, System.Enum.GetNames(typeof(ANGEL_BONUS_TYPE)).Length); switch((ANGEL_BONUS_TYPE)type){ case ANGEL_BONUS_TYPE.ANGEL_BONUS_VIDEOADS: break; case ANGEL_BONUS_TYPE.ANGEL_BONUS_COIN: break; case ANGEL_BONUS_TYPE.ANGEL_BONUS_SKILL_BAYANGAN: break; } } }
3. "enum列挙型"の数を数える
var AchievementTypeArray = System.Enum.GetNames(typeof(AchievementManager.ACHIEVEMEN_TYPE)).Length;
My C# script give me an error? - Unity Answers
列挙型と数値or文字列との相互変換や項目数の取得など【C#】 - (:3[kanのメモ帳]
enumの項目数を取得する - Qiita