18年7月实训unity项目中遇到的问题记录
Posted zhaowenjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18年7月实训unity项目中遇到的问题记录相关的知识,希望对你有一定的参考价值。
1.在一个项目中做好的UI做成预置体后在另一个项目中使用时发现无法响应鼠标的输入事件
解决:在使用预置体的项目中添加EventSystem。
2.使用DontDestroyOnLoad()来避免场景切换后GameObject被销毁存在的问题
假如A场景中有一个GameObject名为player,为了不让player在场景切换到B时消失而使用DontDestroyOnLoad(player),这样会导致场景再次切换回A时,A场景中同时出现两个player,并且两个player在场景切换后都不会消失。player的个数随着切换回A的次数的增加而增加。
解决方法一:
新建一个初始化场景,放在所有的场景之前,初始化场景中放置所有场景中都使用的GameOject并将其添加到DontDestroyOnLoad,并且保证不会跳转回初始化场景,避免重复初始化。
解决方法二:
将全场景使用的GameObject做成预置体,在脚本中实例化(而不是直接放在场景中),后添加到DontDestroyOnLoad,并用一个静态布尔变量标识是否已经实例化过,避免重复实例化。
示例代码:
public class Initializer : MonoBehaviour { [SerializeField] private GameObject _playerPrefab; [SerializeField] private GameObject _cameraPrefab; private GameObject _player; private GameObject _camera; private static bool isInstantiated = false; private void Instan() { _player = Instantiate(_playerPrefab); _camera = Instantiate(_cameraPrefab); DontDestroyOnLoad(_player); DontDestroyOnLoad(_camera); DontDestroyOnLoad(this.gameObject); } private void Awake() { if (!isInstantiated) { Instan(); isInstantiated = true; } }
注:DontDestroyOnLoad(Object obj)的作用:obj在所有的场景切换后都不会被销毁。
3.将一个动画类型为Legacy的模型转换为Humanoid类型后动画中人物出现变形,如图:
转换后unity给出的警告为:
本来想在blender中打开模型看看,但每次导入模型blender就“未响应”。。。未解决。
4.用slider模拟血条
删去Slider下Handle Slider Area节点,通过设置Slider的Scale值设置血条大小,设置Slider下Fill Area节点及其子节点Fill上Rect Transform组件的Left和Right值为0。
5.野怪AI
AI思路:野怪有不同的行为,如空闲、追击玩家、发动不同的攻击、受伤和死亡等。前三种为主动行为,后两种为被动行为。为每一个主动行为赋一个权重。野怪的行为模式如下:空闲......玩家进入侦测范围,追击玩家......玩家进入部分攻击方式的有效区域,根据权重随机选择有效的攻击或继续追击......玩家进入所有攻击方式的有效区域,根据权重随机选择攻击方式......
为每个行为分配时间(等于该行为对应的动画的时长),野怪处于一个行为中时,播放对应的动画,改变野怪的transform(如果需要),只有被动行为能打断当前行为。
当行为频繁被打断时容易出现bug,未修复。
6.主角锁定怪物后左右移动有时会从地图中”掉落“,未修复。
7.本应显示数秒后才消失的提示框build后一闪而逝(play时正常),未知原因。
8.挥剑的音效本地播放时无异常,加入游戏中后有”呲呲“噪音,未知原因。
以上是关于18年7月实训unity项目中遇到的问题记录的主要内容,如果未能解决你的问题,请参考以下文章
unity3d新建项目之后界面一片空白,怎么解决问题?(有图)