精华内容
下载资源
问答
  • Unity中实现2D人物移动动画切换HCI 人机交互01在Unity Hub中新建一个2D项目,命名为Hero,点击创建。02在Asset Store中下载一些免费的素材,场景和人物。打开Asset Store的快捷键为Ctrl+9,搜索 Hero Knigt-Pixel ...

    在Unity中实现

    2D人物移动动画切换

    473acb60d751c5118c3acd4c4d1c3c5c.gif

    HCI  人机交互

    70379e9382442279ec7c7dd06157e1e3.gif43fc62985e7e75a4320e71836781c25a.gif

    01

    272adbd2eb4f359d381ff9bc7316f892.png

    在Unity Hub中新建一个2D项目,命名为Hero,点击创建。

    1922cf520a2406901d0ffee01f3b5b31.png43fc62985e7e75a4320e71836781c25a.gif

    02

    272adbd2eb4f359d381ff9bc7316f892.png

    在Asset Store中下载一些免费的素材,场景和人物。打开Asset Store的快捷键为Ctrl+9,搜索 Hero Knigt-Pixel Art,点击Download下载素材,下载后点击Import导入。

    cf3839a19cdd7ed173a9f31f82cafd01.png43fc62985e7e75a4320e71836781c25a.gif

    03

    272adbd2eb4f359d381ff9bc7316f892.png

    这样我们的准备工作就完成了,可以在Project面板中看到我们的素材。

    5a1b91e779b757427140bdcf08300cf1.png43fc62985e7e75a4320e71836781c25a.gif

    04

    272adbd2eb4f359d381ff9bc7316f892.png

    找到精灵文件夹Sprites,拖动第一张小人图片到场景中,命名为Player。

    4ce3d61409eac83c777414e879d3d5e8.png43fc62985e7e75a4320e71836781c25a.gif

    05

    272adbd2eb4f359d381ff9bc7316f892.png

    把素材中的前八张图片同时选中,拖动到Player上,这时会出现弹窗,我们命名为idle,然后点击保存即可,完成我们的第一逐帧动画。然后接下来操作就和前面的类似了,同时选中第9至13张图片同时拖动到Player上,命名为Run,点击保存,完成奔跑效果的动画制作。

    4717d3f62af3eaf9ba4377953e969c8f.png43fc62985e7e75a4320e71836781c25a.gif

    06

    272adbd2eb4f359d381ff9bc7316f892.png

    在Project面板中点击制作的Run,跳出Animation面板,点击上方的播放按钮,就可以看到奔跑的动画了。

    0e0a3579c4aa020e6547d1619e9ea3b2.pngcb93fa4eeb37eed555900bca1b7aee1a.png43fc62985e7e75a4320e71836781c25a.gif

    07

    272adbd2eb4f359d381ff9bc7316f892.png

    将地面素材从素材文件夹中拖取地面到Hierarchy面板,将其改名为Ground。

    87756c6e0c12f4c0267ff5dfb1181b77.png43fc62985e7e75a4320e71836781c25a.gif

    08

    272adbd2eb4f359d381ff9bc7316f892.png

    在Protect面板Assets创建C#脚本命名为PlayerController。

    767b153366db04f59866e04238d488bd.png43fc62985e7e75a4320e71836781c25a.gif

    09

    272adbd2eb4f359d381ff9bc7316f892.png

    点击Hierarchy面板中Player,在Inspector面板中点击Add Component,添加Rigidbody 2D。

    52ac699274b6f8daa934420788b51c56.pngf34d3f958d3d776de7163012c077b323.png43fc62985e7e75a4320e71836781c25a.gif

    10

    272adbd2eb4f359d381ff9bc7316f892.png

    将Collision Detection改为Continuous(碰撞检测改为连续检测),Sleeping Mode改为Never Sleep(睡眠模式改为从不睡眠),勾选Freeze Rotation的Z轴(2D游戏Z轴不需旋转)。

    6bd7997c581474c543c0e8400d912db9.png43fc62985e7e75a4320e71836781c25a.gif

    11

    272adbd2eb4f359d381ff9bc7316f892.png

    点击Add Component,添加Capsule Collider 2D,点击Edit Collider按钮将胶囊碰撞体调整至和身体一样大小。

    9c7361cc87345d377b1f419bb6bf8b8b.pngd56169ada80b33a2695d3f5173a94b53.png43fc62985e7e75a4320e71836781c25a.gif

    12

    272adbd2eb4f359d381ff9bc7316f892.png

    同理,再次点击Add Component,再次添加Box Collider 2D,同样点击Edit Collider,将碰撞检测框调整到脚部,来识别地面。

    11a2964f7e8224d0acabaa75fbfc32ac.png43fc62985e7e75a4320e71836781c25a.gif

    13

    272adbd2eb4f359d381ff9bc7316f892.png

    为地面添加Box Collider 2D,此时点击运行,人物就可以落在地面上。

    bd0c35c06561f823518519e233b9074a.png43fc62985e7e75a4320e71836781c25a.gif

    14

    272adbd2eb4f359d381ff9bc7316f892.png

    双击打开PlayerController,输入代码。定义一些基本量,用Update方法每帧调用。

    a801e2e23f1f2d50390bd024aad7170d.png

    定义一个bool变量来存储Player在X轴的速度,if判断使Player朝向正确的方向奔跑。

    7d85cf00655a4eb0d4b00cff8212372f.png43fc62985e7e75a4320e71836781c25a.gif

    15

    272adbd2eb4f359d381ff9bc7316f892.png

    将脚本拖入Inspector面板,Run Speed更改为5。

    9c9d916b024a6a9ae6db09eff6581924.png43fc62985e7e75a4320e71836781c25a.gif

    16

    272adbd2eb4f359d381ff9bc7316f892.png

    在Window窗口找到Animation,再选择Animator。

    b8c906b5174fb56c530277cd08534251.png43fc62985e7e75a4320e71836781c25a.gif

    17

    272adbd2eb4f359d381ff9bc7316f892.png

    右键单击Make Transition,然后将idle和run连接起来。

    499456ab394e4e56c3b99ad3f70ad218.png81a94780e696c8522df6f166746b95c7.png43fc62985e7e75a4320e71836781c25a.gif

    18

    272adbd2eb4f359d381ff9bc7316f892.png

    点击idle与run的连线,添加bool,命名为Run。

    2490eba05e9e7a452062c5ef7db6b17e.png77191999eab87d8b828c9272a5b0dc05.png43fc62985e7e75a4320e71836781c25a.gif

    19

    272adbd2eb4f359d381ff9bc7316f892.png

    在Inspector面板中添加条件run-ture。取消勾选Has Exit Time,将Transition Duration改为0。

    ad87c71f136d2f7756e0d6ad7f85008a.png83394c72c74776955a1f4770aff24d72.png43fc62985e7e75a4320e71836781c25a.gif

    20

    272adbd2eb4f359d381ff9bc7316f892.png

    同理,反向连接idle,但将条件设置为run-flase。

    b9b4be92b814bcbc851f45720229a058.png43fc62985e7e75a4320e71836781c25a.gif

    21

    272adbd2eb4f359d381ff9bc7316f892.png

    点击运行,通过A和D控制人物左右移动。

    fd2a6ad2980a13854a675e65240303c8.gif

    HCI

    ce48b0f4968f0c629dab7185538bf5ad.png

    扫码关注我们

    文案|技术部 苏孝南

    封面|设计部 张晓玮

    排版 | 宣传部 杨洪秀

    展开全文
  • 场景切换(A to B) 场景切换的时候,会销毁当前场景的资源,并加载目标场景的资源。当目标场景资源量较大的时候,加载的进度会非常缓慢。 而此时原场景已经销毁,所以加载的过程会持续黑屏。为了提升用户体验,...

    关注专栏,持续更新哦

    教程总目录


    单例模式

    一种和static方法较为类似的东西。

    下面两种写法的作用类似:

    public class Config
    {
        public static int a;
        public static void F(){};
    }
    
    // 调用
    Config.a;
    Config.F();
    
    public class Config
    {
        private Config() { }
        public static readonly Config instance = new Config();
        public int a;
        public void F(){};
    }
    
    // 调用
    Config.instance.a;
    Config.instance.F();
    

    单例模式相当于全局性只有一个实例,通过这个实例来调用成员。


    场景切换(A to B)

    场景切换的时候,会销毁当前场景的资源,并加载目标场景的资源。当目标场景资源量较大的时候,加载的进度会非常缓慢。

    而此时原场景已经销毁,所以加载的过程会持续黑屏。为了提升用户体验,我们加入Loading界面。

    • 首先,Loading场景和当前场景是两个场景,所以我们需要用一个全局变量来存储要加载的场面名称。可以用PlayerPrefs或者单例模式或者静态类来存储,都可以。
    • 再次强调所有可能加载的场景都需要在生成设置里面,加入Build场景。
    • 由于Loading场景一般资源比较少,所以直接在A场景通过SceneManager.LoadScene("Loading")加载Loading场景

    Loading场景

    • 先通过全局变量获取到要跳转的场景
    • 异步Load需要协程,所以StartCoroutine(StartLoadingScene)
    • 在StartLoadingScene内加载场景
    AsyncOperation op = SceneManager.LoadSceneAsync(Config.instance.sceneToLoad);
    
    • 此时,为了让Loading界面不单调,一般可以加个进度条。加载的进度在op.progress,从0到1,当等于1时表明加载结束

    进度条步骤

    • 我们在Loading里面加个Slider
      在这里插入图片描述
    • 在Start内获取Slider并每一帧修改其value属性。
    • 我这里是进度条从100到0,你们自己看着改下就行。
    	public float processValue;
    	GameObject slider;
        void Start()
        {
            slider = transform.Find("Slider").gameObject;
            StartCoroutine(StartLoadingScene());
        }
    
        void Update()
        {
            Debug.Log(processValue);
            slider.GetComponent<Slider>().value = 1 - processValue;
        }
    
    • StartLoadingScene内部时时修改processValue
    • 下面的版本是加了动画优化的(op.progress跳跃幅度大,可能直接从0.1变到0.9),代码意思大致是每一帧所改变的显示进度最多为0.03(3%),当然这个速度还是很快的,一秒这么多帧。
    	IEnumerator StartLoadingScene()
        {
            float maxSpeed = 0.03f;
            AsyncOperation op = SceneManager.LoadSceneAsync(Config.instance.sceneToLoad);
    
            // 禁止载入后自己切换
            op.allowSceneActivation = false;
            // isDone后再加载最后的10%
            while (op.progress < 0.9f)
            {
                // 连续加载
                while (processValue < op.progress)
                {
                    processValue += maxSpeed;
                    yield return new WaitForEndOfFrame();
                }
            }
            while (processValue < 1)
            {
                processValue += maxSpeed;
                yield return new WaitForEndOfFrame();
            }
            op.allowSceneActivation = true;
        }
    

    完整代码

    public class LoadingController : MonoBehaviour
    {
        public float processValue;
        GameObject slider;
        void Start()
        {
            slider = transform.Find("Slider").gameObject;
            StartCoroutine(StartLoadingScene());
        }
    
        void Update()
        {
            Debug.Log(processValue);
            slider.GetComponent<Slider>().value = 1 - processValue;
        }
        IEnumerator StartLoadingScene()
        {
            float maxSpeed = 0.03f;
            AsyncOperation op = SceneManager.LoadSceneAsync(Config.instance.sceneToLoad);
    
            // 禁止载入后自己切换
            op.allowSceneActivation = false;
            // isDone后再加载最后的10%
            while (op.progress < 0.9f)
            {
                // 连续加载
                while (processValue < op.progress)
                {
                    processValue += maxSpeed;
                    yield return new WaitForEndOfFrame();
                }
            }
            while (processValue < 1)
            {
                processValue += maxSpeed;
                yield return new WaitForEndOfFrame();
            }
            op.allowSceneActivation = true;
        }
    }
    
    展开全文
  • Unity 2D下Cinemachine相机切换: 通过启用关闭CinemachineVirtualCamera组件进行切换 描述: 在Main Camera中有个CinemachineBrain组件,当场景中无VirtualCamera时就为None,当有VirtualCamera且启用时就为对应...

    Unity 2D下Cinemachine相机切换:

    通过启用关闭CinemachineVirtualCamera组件进行切换


    描述:

    在Main Camera中有个CinemachineBrain组件,当场景中无VirtualCamera时就为None,当有VirtualCamera且启用时就为对应的VirtualCamera。如下两图,第一张为未开始前,在CM vcam1和CM vcam2中的CinemachineVirtualCamera未启用,在CinemachineBrain中即为None;当开始游戏时项目默认是CM vcam1,第二张下的Live Camera为CM vcam2是此时角色已经离开第一个Trigger进入第二个Trigger,使CM vcam1关闭并启用CM vcam2,Live Blend就是两个相机转换的过程,可以通过Default Blend进行更改。

    在这里插入图片描述
    在这里插入图片描述


    代码:

    我是将相机放在场景Trigger中,设成预制体,因为在Cinemachine Confiner中要用到Trigger,而获取CinemachineVirtualCamera也要用到OnTrigger

    代码获取Trigger组件对应物体下的CinemachineVirtualCamera,用OnTrigger进行启用关闭即可。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Cinemachine;
    
    public class CamChange : MonoBehaviour
    {
        private CinemachineVirtualCamera CinVC;
        private void Awake() {
            CinVC = GetComponentInChildren<CinemachineVirtualCamera>();
        }
        private void OnTriggerEnter2D(Collider2D other) {
            if(other.CompareTag("Player")){
                CinVC.enabled = true;
            }
        }
        private void OnTriggerExit2D(Collider2D other) {
            if(other.CompareTag("Player")){
                CinVC.enabled = false;
            }
        }
    }
    
    
    展开全文
  • unity 场景 切换 笔记

    2017-03-17 17:06:20
    参考: ... 异步加载 有进度 private float fps = 10.0f; ...private float time;...//一组动画的贴图,在编辑器中赋值。...public Texture2D[] animations; private int nowFram; //异步对象 AsyncOpe
    参考: http://www.xuanyusong.com/archives/1427  


    异步加载 有进度
    private float fps = 10.0f;
    private float time;
    //一组动画的贴图,在编辑器中赋值。
    public Texture2D[] animations;
    private int nowFram;
    //异步对象
    AsyncOperation async;
    //读取场景的进度,它的取值范围在0 - 1 之间。
    int progress = 0;
    void Start()
    {
    //在这里开启协程
    StartCoroutine(loadScene());
    }
    IEnumerator loadScene()
    {
    //异步读取场景。
    //Globe.loadName 就是A场景中需要读取的C场景名称。
    async = Application.LoadLevelAsync(Globe.loadName);
    //读取完毕后返回, 系统会自动进入C场景
    yield return async;
    }
    void OnGUI()
    {
    //因为在异步读取场景,
    //所以这里我们可以刷新UI
    DrawAnimation(animations);
    }
    void Update()
    {
    //在这里计算读取的进度,
    //progress 的取值范围在0.1 - 1之间, 但是它不会等于1
    //也就是说progress可能是0.9的时候就直接进入新场景了
    //所以在写进度条的时候需要注意一下。
    //为了计算百分比 所以直接乘以100即可
    progress =  (int)(async.progress *100);
    //有了读取进度的数值
    Debug.Log("xuanyusong" +progress);
    }
    //这是一个简单绘制2D动画的方法
    void   DrawAnimation(Texture2D[] tex)
    {
    time += Time.deltaTime;
    if(time >= 1.0 / fps){
    nowFram++;
    time = 0;
    if(nowFram >= tex.Length)
    {
    nowFram = 0;
    }
    }
    GUI.DrawTexture(new Rect( 100,100,40,60) ,tex[nowFram] );
    //在这里显示读取的进度。
    GUI.Label(new Rect( 100,180,300,60), "lOADING!!!!!" + progress);
    }


    2.在加载大型场景的时候,如果将其中的一部分 Gameobject  不显示 即将其之前的√ 去掉 场景加载时就不会进行渲染
    之后在脚本中的Awake中进行加载 找到对应的GameObject 的异步显示  可使用协程来实现 这样就可以每帧进行加载
    不会在一瞬间占用大量的内存
    3。也可以使用Instantiate 进行动态创建添加
    展开全文
  • 如何触发切换场景。 在地图上划定一个区域, 在上面放上脚本,写上检测碰撞的tag,和目标场景的名称,还有转换的时间 [RequireComponent (typeof (Collider2D))] public class Scene_Change : MonoBehaviour { //...
  • unity2d 游戏开发资源

    2018-10-04 09:05:19
    15 工具栏 16 层次窗口 17 项目窗口 17 游戏场景窗口 18 游戏窗口 18 属性编辑器 18 自定义版面设置 19 2.3 Unity 项目管理介绍 20 项目(project) 20 场景(scene) 21 第3章 2D 图片对象 3.1 什么是 Sprite 对象 ...
  • 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的。仅为学习Unity之用。图片大部分是自己画的,少数是...
  • 使用unity引擎,基于c#语言开发的一个2d的animation,其中包括角色的移动和大小等设置,字幕的格式设置,以及...下图为场景切换,使用SceneManager中的LoadScene等功能。 视频成果链接:https://b23.tv/m9XjcA ...
  • ... 一、场景分辨率 游戏场景分辨率设置 16:9常用分辨率有:1920*1080, 1280*720, 960*540, 720*405, 640*360, 320*180 ...有了场景之后,一般就可以开始先做UI了,新建 2D UI Root,调整分辨率自适应方法如下 ...
  • unity如何做UI菜单与场景切换

    千次阅读 2020-08-26 21:47:10
    我是在Unity Store直接下载的UI资源,如果想把自己的图片作为背景可以如下先把图片粘到Assets里面,然后更改Texture Type为Sprite(2D and UI)即可 3.创建两个空物体作为两个菜单的父物体,其下为对应菜单的内容。...
  • 实现角色动画和移动,场景管理和场景切换,按钮事件,以及对象碰撞等内容,适合刚刚学习unity3D的人
  • cocos2dx场景切换动画

    千次阅读 2014-03-08 18:26:23
    首页资讯论坛江湖排行榜专题Unity3D求职招聘中国开发者大会CDC 首页 > 新闻资讯 > 非...cocos2d-x 场景动画切换过渡大全 作者: Aoi 发表时间: 2013-09-25 10:50 | 696次阅读 | 参与评论(5) 分享:
  • fox adventure是一款2d风格并且非常简单的小游戏,游戏一共有3个场景,2个关卡。游戏基本功能较为完善(通关、暂停、死亡机制、移动、跳跃、、下蹲以及相应的人物动画切换等),除此之外我还利用C#实现了移动平台、...
  • 有这么个场景,用UnityWebRequest或www或besthttp方式从网络下载图片资源,然后转成texture2dunity程序中显示。但频繁切换或关闭打开后,会发现内存占用越来越大,最后就白屏无响应了。 为什么明明destroy了ui 的...
  • MangoFog2D是用于Unity Engine的基于开源2D / 3D网格的雾化系统。 它基于TasharenFogOfWar,但它使用具有多个新功能的完整的基于Mesh的渲染系统。 原始的模糊算法和LOS算法全都归功于TasharenFogOfWar。 将相同的...
  • Unity场景中通常用来渲染的相机使用的是透视相机,但是偶尔也需要使用正交相机来展示某些效果,如二维场景、城市天际线等,可以通过代码动态设置相机的呈现效果。 正交视图不会根据物体距离相机的距离进行缩放...
  • Animation是每一个动画,动画本身不能独立在场景中播放 Animator是动画控制器,一个动画控制器里可以包含多个动画,根据条件选择播放哪一个动画 精灵Sprite上挂载Animator动画控制器来播放动画 crtl+6打开...
  • Unity3D之快捷键大全

    2019-08-19 22:49:09
    Unity3D引擎之编辑模式快捷键 个人总结的一些快捷键,不是...数字键2:切换场景2D模式或3D模式 Ctrl+1:场景视图 Ctrl+2:游戏视图 Ctrl+3:监视视图 Ctrl+4:层次视图 Ctrl+5:项目视图 Ctrl+6:动画编辑视图 Ct...
  • **Unity序列帧动画疑难解答 熟悉界面: ...**预览窗口:**预览窗口,包含场景预览,游戏播放(实际输出预览),切换2d和3d等(2d文件一定要在2d窗口预览制作!!!) **层级栏:**可以检查每个物件之间的...
  • Unity3D使用技巧

    2018-05-28 17:13:49
    3.分别按键盘键Q、W、E、R、T可以依次切换界面上的小工具,除此之外,按数字键2或3还可以切换场景2D模式或3D模式。4.好不容易才调好的坐标,结果发现是在运行模式下,如果退出运行模式就还原了怎么办?可以在检视...
  • 1、下载最新版GoogleVR For Unity后,导入新建的Unity工程。 2、根据上篇文章中所讲的操作步骤对PlayerSetting进行设置(第6步往后) 3、对Assets/GoogleVR/Demos/Scenes/HelloVR场景进行打包发布 4、动态开启/关闭VR...
  • 对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

unity2d场景切换