2d 3d unity3d_unity3d2d - CSDN
  • Live2DUnity中的使用

    2019-04-23 12:00:12
    Live2D-Unity Live2D是日本Cybernoids公司开发的绘图渲染技术,在2D中能实现类似2.5D效果的人物动画,在电子游戏中可能会用得到。 前一阵子公司游戏客户端想要导入Live2D模型,将游戏里剧情人物替换,让剧情看...

    Live2D模型在Unity中的使用

    Live2D是日本Cybernoids公司开发的绘图渲染技术,在2D中能实现类似2.5D效果的人物动画,在电子游戏中可能会用得到。
    
    前一阵子公司游戏客户端想要导入Live2D模型,将游戏里剧情人物替换,让剧情看起来更加的好看,中间走了很多坑,下面我就记录下Live2D导入Unity的过程。

    先放官方链接:Live2D官网
    在官网里下载Live2D Unity SDK然后导入Unity,然后Live2D官网有几个Demo可以直接下载使用。
    直接上图嘻嘻嘻
    看完Demo之后可能会一脸蒙蔽,什么鬼东西,动来动去的怎么动的。
    作为程序员的我们可能不需要了解动画人物制作的详细过程,但是使用过UI动画编辑器之类的应该知道类似的原理,人物的动作其实就类似网格图,然后通过这些点来拉动人物的动作;动画大概就是设置一些关键点之类的差不多都那样;live2D有自己的物理系统,大概是设置一些重量,偏移值之类的。
    当美术做完Live2D模型之后,这个文件夹包括了moc3模型信息动作json文件physics文件等等;然后我们为每一个模型创建一个文件夹,把每个模型相关的motion文件放在一起,然后直接导入Unity工程目录下;unity因为提前导入了sdk,它会自动识别模型文件信息,然后自动把文件编译成unity可用的Prefab和AnimationClip。
    接下来工作就简单啦,创建Animator Controller来控制这些AnimationClip,这部分内容就自己去学习吧~
    这里有几点:
    1.最好将嘴部动画和肢体动作分开管理,animation controller增加parramator即可,然后设置

    blendingMode = AnimatorLayerBlendingMode.Override;
    

    直接看Animator长这样
    代码写好的animator,通过unity直接查看就长这样,通过AnyState?各个状态就能使用unity的动作融合啦
    2.为了动作融合,Aninator只能通过对应的transaction Index来切换状态。我是把Transation和动作名之间的关系写了个对应关系脚本存储为程序可读的数组,那样就能通过动作名直接获取链接名啦~~

    //Animator可以直接创建Controller在指定路径
    CreateAnimatorControllerAtPath
    
    3.为了更好的控制模型,在创建Prefab的时候就要添加几个Component用来控制模型的位置,动画,渲染等
    4.有时候会遇到Live2D在Scene界面有轮廓,但是没有贴图的情况,
    我直接上代码啦:
    
    	local shaderName = "Live2D Cubism/Unlit"
    	local shader = CS.UnityEngine.Shader.Find(shaderName)
    
    	local trans = self.obj.transform:Find("Drawables")
    	local renders = CS.LuaMgr.getCubismRendersInChildren(trans)
    	for i=0, renders.Length - 1 do
    		renders[i].Material.shader = shader
    	end
    

    这段是Lua代码,大概就是找到Unlit这个shader然后把它指定下就好啦,不知道新版sdk还有没有这个问题。

    再说一点Live2D比较坑的几个问题:
    1.物理效果非常容易跟项目代码进行冲突,这个自己阅读SDK找问题吧~
    2.Live2D脚本自带的控制Alpha的Component跟Unity的Animator不能兼容,两者只能同时有一个运行……是我傻逼了么,没想到别的解决方案。
    3.如果遇到经常创建销毁模型的情况,最好是创建资源池进行管理,
    并且频繁移除的时候,不要频繁的setActive,这样会导致各种未知情况的发生 。

    最后说一点动画播放结束之后的回掉函数和几个动作自动进行联合播放的问题,一般情况下可以在动画后面添加关键帧或者监听动画机的状态,最简单的方法就是计算动画的长度,然后使用计时器……

    public static float GetClipLength(Animator animator, string clip)
        {
            if (null == animator || string.IsNullOrEmpty(clip) || null == animator.runtimeAnimatorController)
                return 0;
            RuntimeAnimatorController ac = animator.runtimeAnimatorController;
            AnimationClip[] tAnimationClips = ac.animationClips;
            if (null == tAnimationClips || tAnimationClips.Length <= 0) return 0;
            AnimationClip tAnimationClip;
            for (int tCounter = 0, tLen = tAnimationClips.Length; tCounter < tLen; tCounter++)
            {
                tAnimationClip = ac.animationClips[tCounter];
                if (null != tAnimationClip && tAnimationClip.name == clip)
                    return tAnimationClip.length;
            }
            return 0F;
        }
    
    

    上边这个直接给了计算的代码~~

    别忘了最后释放内存……

    展开全文
  • 在最开始使用Unity时(版本5.2.1),因为要跟着各种教程去动手,所以新建工程特别多...现在使用Unity也有一小段时间了,在这里整理一下2D模式和3D模式中的区别,希望能对碰到同样情况的同学有所帮助。首先,Unity中不存

    在最开始使用Unity时(版本5.2.1),因为要跟着各种教程去动手,所以新建工程特别多。而在当时的版本中貌似一直有一个Bug,就是新建工程选项中的2D和3D根本就不好使!貌似建出来的场景感觉上完全是随机的!当时还完全什么都不懂的我当然只能够删除工程再重新建立。。。

    现在使用Unity也有一小段时间了,在这里整理一下2D模式和3D模式中的区别,希望能对碰到同样情况的同学有所帮助。

    首先,Unity中不存在2D和3D工程的区别

    为什么这么说呢?在Unity中,2D和3D只是一种视角上的转换,所有的物体都是有3D坐标信息的,在Vector3转为Vector2,并且视图方式由透视变为正交的时候,Z轴信息就没有意义了,也就从3D变为了2D。

    新建时的2D和3D选项,只是Unity提供的两种类型的默认场景,只要你愿意,可以随时随地自由切换!

    2D模式:

    • 层级视图中只有一个正交摄像机(Projection选择的是Orthographic)。
    • 场景视图选择的是2D模式。
    • Window->Lighting->Scene中的Skybox是none。AmbientSource是灰色。下面的GI选项没有选中。

    3D模式:

    • 层级视图中有一个透视摄像机(Projection选择的是Perspective),并且还有一个线性光源模拟太阳光
    • 场景视图中没有选择2D模式。
    • Window->Lighting->Scene中的Skybox是Default。AmbientSource是Skybox。下面的GI选项都是选中的。

    上面的区别可能不是太完全,不过只要你对这些参数进行一下修改,你就大概能知道Unity中2D模式和3D模式的区别了。

    在真正做项目时,2D和3D并不是工程的类型,只是场景的显示方式而已。如果要详细去了解Unity中的3D和2D,可以多了解一下 天空盒正交摄像机、透视摄像机 以及 Unity中的光源类型

    展开全文
  • Unity 3d2d再转3d

    2017-12-20 17:59:29
    我是用daydream平台测试的,目前别的平台还没有测试 大概思路是playerSettings 中设置勾选Virtual Reality Supported 后选着对应的平台这里选的是Daydream  然后在转换平台时用下面的方法加载到对应的平台, ...

    我是用daydream平台测试的,目前别的平台还没有测试

    大概思路是playerSettings 中设置勾选Virtual Reality Supported 后选着对应的平台这里选的是Daydream 

    然后在转换平台时用下面的方法加载到对应的平台,

    UnityEngine.XR.XRSettings.LoadDeviceByName("None")

    UnityEngine.XR.XRSettings.LoadDeviceByName("daydream");

    并设置UnityEngine.XR.XRSettings.enabled = true;就可以切换到vr模式了


    在同一个场景中增加两个MainCamera,


    下面把脚本附上

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.XR;


    public class Manger3dTo2d : MonoBehaviour
    {
        private bool is3d = true;


        public GameObject canvas;


        public GameObject mainCamare;


        public GameObject camare;


        //public GameObject evenSystem;


        public TextMesh tm;


        //public GameObject hand;
    // Use this for initialization
    void Start ()
    {
        tm.text = XRSettings.loadedDeviceName;
        Debug.Log(XRSettings.loadedDeviceName + "333");
        is3d = true;
    canvas.SetActive(false);
        camare.SetActive(false);
    }

    // Update is called once per frame
    void Update () {
            if ((GvrControllerInput.AppButtonUp || Input.GetKeyUp(KeyCode.A)) && is3d)
        {
            canvas.SetActive(true);
            is3d = false;
                
            //UnityEngine.XR.XRSettings.enabled = false;
            XRSettings.LoadDeviceByName("None");
                Debug.Log(XRSettings.loadedDeviceName);
            tm.text = XRSettings.loadedDeviceName;
            //evenSystem.GetComponent<GvrPointerInputModule>().enabled = false;
            //evenSystem.GetComponent<StandaloneInputModule>().enabled = true;
                mainCamare.SetActive(false);
                camare.SetActive(true);
                //hand.SetActive(false);
        }
            if (GvrControllerInput.ClickButtonDown || Input.GetKeyUp(KeyCode.B))
            {
                To3d();
            }
    }


        public void To3d()
        {        
            StartCoroutine(VrOn());    
        }


        IEnumerator VrOn()
        {
            XRSettings.LoadDeviceByName("daydream");
            Debug.Log(XRSettings.loadedDeviceName + "1111");
    #if UNITY_EDITOR


    #endif
    #if UNITY_ANDROID
            yield return new WaitUntil(() => XRSettings.loadedDeviceName == "daydream");//到这一步pc不能测试了
    #endif
            Debug.Log(XRSettings.loadedDeviceName + "222");
            yield return null;
            XRSettings.enabled = true;
            Debug.Log(XRSettings.loadedDeviceName);
            tm.text = XRSettings.loadedDeviceName;
            canvas.SetActive(false);
            is3d = true;
            mainCamare.SetActive(true);
            camare.SetActive(false);
            //hand.SetActive(true);
            //evenSystem.GetComponent<GvrPointerInputModule>().enabled = true;
            //evenSystem.GetComponent<StandaloneInputModule>().enabled = false;
        }


        public void ButtonClick()
        {
            Debug.Log("这是2d场景");
        }


    }



    展开全文
  • 在开发游戏时,之前创建的2D3D模式并不是我们想要的,此时可以选择“Edit > Project Settings > Editor > Mode”,将“Mode”改成所需的3D2D,再重启下。 ...

    在开发游戏时,之前创建的2D或3D模式并不是我们想要的,此时可以选择“Edit > Project Settings > Editor > Mode”,将“Mode”改成所需的3D或2D,再重启下。

           

    展开全文
  • 简单列了一下他们之间的区别,希望对你们有用
  • Unity中,2D3D只是一种视角上的转换,所有的物体都是有3D坐标信息的,在Vector3转为Vector2,并且视图方式由透视变为正交的时候,Z轴信息就没有意义了,也就从3D变为了2D2D模式:层级视图中只有一个正交摄像机...
  • https://docs.unity3d.com/Manual/2DAnd3DModeSettings.html 2D and 3D Mode Settings When creating a new project, you can specify whether to start the Unity Editor in 2D mode or 3D mode. How
  • 在Unity4.3版本以后,Unity3D推出了基于Box2D2D组件,使得Unity3D成为一个可以支持2D游戏开发的游戏引擎。在Unity3D推出这一功能之前,大家对使用Unity3D开发2D游戏已经进行了大量的研究。所以,Unity3D推出2D组件...
  • Unity3D教程:将3D坐标转成2D坐标的方法。3D坐标在Unity中称作World Space,2D坐标称作Screen Space, 是以pixel为基准,以iPad 1024 x 768(4:3)的解析度为例子: 左上角是 (0,0) 右下角是(1024,768) Unity...
  • UNITY3D和 COCOS2D-X都是跨平台的游戏开发引擎,COCOS2D是专门做IPHONE游戏的2D游戏引擎。 这些引擎到底是什么时候出现的,还真是不怎么了解,但是不管他们是什么时候出现的,由哪些人弄出来的,这两个引擎都挺...
  • Unity3D中可以使用脚本创建texture2D贴图,并对像素进行操作。 构造函数: Texture2D(int width, int height); Texture2D(int width, int height, TextureFormat format, bool mipmap); Texture2D(int...
  • Unity 3D - Mask和RectMask2D区别 : 主要区别: 区别1: Mask主要处理不规则图形遮罩效果 RectMask2D只能做矩形遮罩. 区别2: Mask需要一个Image来当作遮罩区域,子节点在Image[渲染区域]才会显示 RectMask2D以...
  • 1.2D Physics游戏对象和3D Physics游戏对象可共存在一个场景,但是它们不能相互反应(interact with each other)。 2.2D Physics只在x和y轴上有反应,z轴怎样改变都是0.   3. 要设置Physic2D的各项参数见下:...
  • Unity 2D 终结手册 (1) - 2D 项目_Unity3d 开发技术:这篇系列文章主要介绍 Unity 2D 开发技术。包括 2D/3D 项目的区别、如何设置 2D/3D 模式、2D 开发中使用到的组件等。
  • 刚开始学习Unity 3D,新手遇到的坑都是泪对自由的抗争。进入主题~ 第一种方式: 1、使用Camera(假设叫A)照射3D模型(假设叫B)。(这里需要保证两者所在layer是一致的) 2、在Assets资源下面右击“Create”,...
  • Unity is equally suited to creating both 2D and 3D games. But what’s the difference? When you create a new project in Unity, you have the choice to start in 2D or 3D ...
  • unity3D游戏特效、插件、特效资源包大合集,2D,3D,绝对实用。多种粒子特效的合集包括3D和2D绝对实用,满足各种需求。
  • // 根据3d的主角坐标,获得主角血条的坐标 (通过视窗坐标转换) Vector3 pos = cam.WorldToViewportPoint(Boy.position); // 将主角的3d坐标转换成对象屏幕的视窗坐标 UI.transform.position = UIcam....
  • 在上一篇文章中,我们以经典的打砖块游戏为例,讲解了一个Unity3D游戏的完整实现过程。今天呢,我们来做一个在游戏中十分重要的组成元素:血条。血条是什么呢?血条是生命值的一种体现,就像《仙剑奇侠传三》电视剧...
1 2 3 4 5 ... 20
收藏数 22,515
精华内容 9,006
关键字:

2d 3d unity3d