unity3d 转2d_2d转3d unity - CSDN
  • Unity3D教程:将3D坐标2D坐标的方法。3D坐标在Unity中称作World Space,2D坐标称作Screen Space, 是以pixel为基准,以iPad 1024 x 768(4:3)的解析度为例子: 左上角是 (0,0) 右下角是(1024,768) Unity...

    Unity3D教程:将3D坐标转成2D坐标的方法。3D坐标在Unity中称作World Space,2D坐标称作Screen Space, 是以pixel为基准,以iPad 1024 x 768(4:3)的解析度为例子:

    左上角是 (0,0)

    右下角是(1024,768)

    Unity3D教程:将3D坐标转成2D坐标的方法

    Unity3D教程:将3D坐标转成2D坐标的方法

    功能制作:点击画面中的3D方块 然後在该方块的中心位置产生相对应的GUI

    主要是应用此功能: camera.WorldToScreenPoint ();

    将以下的JavaScript加在Camera物件下。

     

    Unity3D教程:将3D坐标转成2D坐标的方法

    Unity3D教程:将3D坐标转成2D坐标的方法

    1.Raycast点击设定:让你可以用滑鼠(PC)/手指(iPad, mobile devices)做点击测试。

    2.用“tower”标签名称来区隔不同的3D物件。

    3.用此功能取得所点击的3D物件的x,y,z坐标(world space) 然后再透过camera.WorldScreenPoint()转换成screen space的2D坐标。

    4.然后我们利用所获得的2D坐标 将UI产生在设备萤幕的相对应位置上 *注意:y的坐标是要用设备萤幕的Height减去所获得的物件y坐标。

    结果示范:

    Unity3D教程:将3D坐标转成2D坐标的方法

    Unity3D教程:将3D坐标转成2D坐标的方法

    点中间的方块 UI就产生在中间 点左上的方块 UI就产生在左上

    应用:Tower Defense游戏中 点击画面中的物件 >然後卖出或升级

    展开全文
  • Unity 3d转2d转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场景");
        }


    }



    展开全文
  • Unity中,2D3D只是一种视角上的转换,所有的物体都是有3D坐标信息的,在Vector3转为Vector2,并且视图方式由透视变为正交的时候,Z轴信息就没有意义了,也就从3D变为了2D2D模式:层级视图中只有一个正交摄像机...

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

    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中的光源类型。

    展开全文
  • 第2~4章是3个不同特色的3D游戏实例,让读者对Unity游戏开发有一个较全面的认识。第5章是一个2D游戏实例,多方面地介绍了Unity在2D游戏方面的应用。第6章和第7章,重点介绍了Unity在网络方面的应用。第8~10章介绍了...
  • 涉及到:Mathf.Atan2(反正是计算角度的),rotation,Quaternion.Slerp 思路:下面的图片是x轴对称的,所以这个旋转也是以图片箭头开始旋转的。(为什么?... 步骤:1,private Vector3 moveDire
    目标:鼠标点击后,图片朝向鼠标点击的地方
    涉及到:Mathf.Atan2(反正是计算角度的),rotation,Quaternion.Slerp
    思路:下面的图片是x轴对称的,所以这个旋转也是以图片箭头开始旋转的。(为什么?可能跟Atan2有关),根据鼠标点击的位置与图片的位置计算旋转角度,在Quaternion.Slerp进行旋转.


    步骤:1,private Vector3moveDirection;//向量,
                                    public float turnSpeed;//旋转速度
    2:void Update()下面
              moveDirection=newPos-transform.position;
             moveDirection.z=0;//这个2d下,可能写不写无所谓
             moveDirection.Normalize();
    3:float target = Mathf.Atan2(moveDirection.y,moveDirection.x)*Mathf.Rad2Deg;
    4:transform.rotation=Quaternion.Slerp(transform.rotation,Quaternion.Euler(0,0,target),turnSpeed*Time.deltaTime);
    结束:3,4都是update下面,这样接上
    【功能实现】之一的教程,可以鼠标点击物体移动又能头部朝着点的方向前进了


    展开全文
  • 如何旋转2D贴图? 查阅了很多资料,都是关于四元数,欧拉角的问题。有点杀鸡焉用牛刀的意味,于是自己摸索着利用已有的接口用一种简单的方法实现。(注意,我的需求存在于2D场景内) 用到的接口 Vector3.Angle

    引言

    近日在开发项目中,遇到一个这样的需求:将炮弹旋转至开火方到受击方所成的角度上,简言之就是将一枚炮弹旋转到开或者到敌人的方向上。

    如何旋转2D贴图?

    查阅了很多资料,都是关于四元数,欧拉角的问题。有点杀鸡焉用牛刀的意味,于是自己摸索着利用已有的接口用一种简单的方法实现。(注意,我的需求存在于2D场景内)

    用到的接口

    Vector3.Angle

    public static float Angle(Vector3 fromVector3 to);

    Parameters

    fromThe angle extends round from this vector.
    toThe angle extends round to this vector.

    Description

    Returns the angle in degrees between from and to.

    The angle returned is always the non reflex angle between the two vectors - ie the smaller of the two possible angles between them and never greater than 180 degrees.

    using UnityEngine;
    
    public class AngleExample : MonoBehaviour
    {
    	public Transform     target;
    
    	// prints "close" if the z-axis of this transform looks
    	// almost towards the target
    
    	void Update ()
    	{
    		Vector3 targetDir = target.position - transform.position;
    		float angle = Vector3.Angle( targetDir, transform.forward );
    
    		if( angle < 5.0f )
    			print( "close" );
    	}
    }

    Vector3.Angle()代表的实际含义其实是,原点到from点与原点到to点的夹角,即OA与OB的夹角。俗话说不会美术的策划不是好程序:


    然而当我们需要AB与水平坐标的夹角该怎么办呢?这时候就需要引入传说中的单位向量了。

    解决方案

    using UnityEngine;
    using System.Collections;
    
    public class ArrowTest : MonoBehaviour {
    
        public UISprite arrow;
    	// Use this for initialization
    	void Start () {
            TestForRotation(); 
    	
    	}
    	
    	// Update is called once per frame
    	void Update () {
    	
    	}
    
        void TestForRotation()
        {
            GameObject pointA = GameObject.Find("PointA");
            GameObject pointB = GameObject.Find("PointB");
            Vector3 vecA = pointA.GetComponent<Transform>().localPosition;
            Vector3 vecB = pointB.GetComponent<Transform>().localPosition;
            Vector3 direction = vecB - vecA;                                    ///< 终点减去起点
            float angle = Vector3.Angle(direction, Vector3.right);              ///< 计算旋转角度
            arrow.GetComponent<Transform>().Rotate(0, 0, angle);
        }
    }
    运行结果:

    箭头指向AB方向,垂直结果:



    任意“角度”运行结果:



    为什么“角度”要加引号?我们来看如果需要旋转到BA所成的夹角会出现什么情况:


    显然,箭头的指向于BA所成的角度并不一致。

    这是由于Vector3.Angle()的定义中有这样一句话:The angle returned is always the non reflex angle between the two vectors - ie the smaller of the two possible angles between them and never greater than 180 degrees.

    返回的角度总是两个角度中较小的一个,且不会超过180°,因此当所需旋转的角度大于90°时,需要进行适当的变换。如何界定是否超过90°呢?这时候Vector3.Dot,向量点乘就派上用场了,当旋转角度与Vector3.up相反时,需要对角度进行适当的变换。

    修正后的代码如下:

    using UnityEngine;
    using System.Collections;
    
    public class ArrowTest : MonoBehaviour {
    
        public UISprite arrow;
    	// Use this for initialization
    	void Start () {
            TestForRotation(); 
    	
    	}
    	
    	// Update is called once per frame
    	void Update () {
    	
    	}
    
        void TestForRotation()
        {
            GameObject pointA = GameObject.Find("PointA");
            GameObject pointB = GameObject.Find("PointB");
            Vector3 vecA = pointA.GetComponent<Transform>().localPosition;
            Vector3 vecB = pointB.GetComponent<Transform>().localPosition;
            //Vector3 direction = vecB - vecA;                                    ///< 终点减去起点(AB方向与X轴的夹角)
            Vector3 direction = vecA - vecB;                                  ///< (BA方向与X轴的夹角)
            float angle = Vector3.Angle(direction, Vector3.right);              ///< 计算旋转角度
            direction = Vector3.Normalize(direction);                           ///< 向量规范化
            float dot = Vector3.Dot(direction, Vector3.up);                  ///< 判断是否Vector3.right在同一方向
            if (dot < 0)
                angle = 360 - angle;
            Debug.LogWarning("vecA:" + vecA.ToString() + ", vecB:" + vecB.ToString() + ", angle: " + angle.ToString());
            arrow.GetComponent<Transform>().Rotate(0, 0, angle);
        }
    }
    
    箭头转向BA向量的结果如图:


    7.11补充:

    1)更新一种计算角度的方法,通过Atan()接口

    2)通过欧拉角来旋转对象

    3) 通过四元数的插值函数来平滑过渡旋转过程

    using UnityEngine;
    using System.Collections;
    
    public class ArrowTest : MonoBehaviour
    {
    
        public UISprite arrow;
    
        private Vector3 targetVec;
        private float targetAngle, AtanTarget;
        // Use this for initialization
        void Start()
        {
            TestForRotation();
    
        }
    
        // Update is called once per frame
        void Update()
        {
            ///< 补充点3: 通过插值使箭头平滑的转向指定的方向,在游戏中常用于人物转头,转移视角等操作,当然是在3D空间中,这里就抛块砖了。0.1f只是我偷懒写的一个单位值,正式的项目中一般会deltaTime * speed来控制转向的速度。
            arrow.GetComponent<Transform>().rotation = Quaternion.Slerp(arrow.GetComponent<Transform>().rotation, Quaternion.Euler(0, 0, AtanTarget), 0.1f);
        }
    
        void TestForRotation()
        {
            GameObject pointA = GameObject.Find("PointA");
            GameObject pointB = GameObject.Find("PointB");
            Vector3 vecA = pointA.GetComponent<Transform>().localPosition;
            Vector3 vecB = pointB.GetComponent<Transform>().localPosition;
            //Vector3 direction = vecB - vecA;                                    ///< 终点减去起点(AB方向与X轴的夹角)
            Vector3 direction = vecA - vecB;                                  ///< (BA方向与X轴的夹角)
            float angle = Vector3.Angle(direction, Vector3.right);              ///< 计算旋转角度
            direction = Vector3.Normalize(direction);                           ///< 向量规范化
            float dot = Vector3.Dot(direction, Vector3.up);                  ///< 判断是否Vector3.right在同一方向
            if (dot < 0)
                angle = 360 - angle;
            
            targetAngle = angle;
            targetVec = new Vector3(0, 0, angle);
    
            ///< 补充点1: 通过Atan2与方向向量的两条边可以计算出转向的角度,通过计算结果可以看到targetAngle与-AtanTarget相加正好是360°,即二者都指向同一方向。具体使用场景需要根据具体需求分析。
            AtanTarget = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
            Debug.LogWarning("vecA:" + vecA.ToString() + ", vecB:" + vecB.ToString() + ", targetAngle: " + targetAngle.ToString() + ", AtanTarget: " + AtanTarget.ToString());
            //arrow.GetComponent<Transform>().Rotate(0, 0, angle);
    
            ///< 补充点2: 使用欧拉角来控制物体的旋转
            //arrow.GetComponent<Transform>().eulerAngles = new Vector3(0, 0, angle);
        }
    }
    


    展开全文
  • 在最开始使用Unity时(版本5.2.1),因为要跟着各种教程去动手,所以新建工程特别多...现在使用Unity也有一小段时间了,在这里整理一下2D模式和3D模式中的区别,希望能对碰到同样情况的同学有所帮助。首先,Unity中不存
  • 在Unity4.3版本以后,Unity3D推出了基于Box2D2D组件,使得Unity3D成为一个可以支持2D游戏开发的游戏引擎。在Unity3D推出这一功能之前,大家对使用Unity3D开发2D游戏已经进行了大量的研究。所以,Unity3D推出2D组件...
  • Unity3D制作2D精灵动画

    2015-09-17 14:00:20
    图片导入unity3d,修改sprite model,点击 sprite editor。 如果,图片中的各个元素距离比较开,可以用Slice自动划分。如果不行的话,手动划分下,然后点击Apply确定。这样就吧一副大图片上的各个元素分开了。 ...
  • 应用于3D场景中有很多3DUI界面,功能如下所示。【效果&gt;&gt;&gt;&gt;从哪里来到哪里去&lt;&lt;&lt;&lt;】 点击3DUI界面转换为2DUI界面,并放大移动到屏幕中心显示 点击已点击...
  • 在新建工程时,经常会选择默认的3D工程,但是如果想做2D游戏又不小心选了3D工程,可以通过如下方式更改: Edit > Project Settings > Editor > DefaultBehaviorMode 改成2D ...
  • 用键盘控制模型绕自身Y轴旋转过程中模型变换方向,哪位大神知道是怎么回事,应该这样处理?![图片说明](https://img-ask.csdn.net/upload/201512/28/1451311515_888999.png)![图片说明]...
  • ...Unity3d2d手机游戏开发配书资源文件.rar 1.36G 书上的链接坏掉了,我在论坛上面买了一份,放这分享给买了书找不到资源的同学. 转载于:https://www.cnblogs.com/cheetahw/p/4170653.html...
  • UNITY3D和 COCOS2D-X都是跨平台的游戏开发引擎,COCOS2D是专门做IPHONE游戏的2D游戏引擎。 这些引擎到底是什么时候出现的,还真是不怎么了解,但是不管他们是什么时候出现的,由哪些人弄出来的,这两个引擎都挺...
  • unity的底层是用C++开发的,但是使用unity只是允许用脚本进行具体游戏开发,就回避了底层的复杂性,降低了开发的难度。unity里的c#是运行再Mono平台,微软的c#是运行再.Net平台上,语言本身而言二者差不多相同。...
  • 2D贴图绘制方式有两种,第一种由 GUI 绘制,第二种是将贴图以材质的形式绘制在游戏对象中。 GUI绘制 在屏幕中绘制一张静态贴图,需要使用 GUI.DrawTexture() 方法,该方法原型如下: GUI.DrawTexture(位置, 图片...
  • // 根据3d的主角坐标,获得主角血条的坐标 (通过视窗坐标转换) Vector3 pos = cam.WorldToViewportPoint(Boy.position); // 将主角的3d坐标转换成对象屏幕的视窗坐标 UI.transform.position = UIcam....
  • Unity TextureTexture2D

    2019-09-12 17:56:07
    图片的动态转换 分为两种模式: 编辑器时,可以直接as后,然后保存; 运行时,需要拿RenderTexture来进行一次像素的转化 (编辑器模式下 ) /// 编辑器模式下Texture转换成... Texture2D texture2d = texture as...
  • 在上一篇文章中,我们以经典的打砖块游戏为例,讲解了一个Unity3D游戏的完整实现过程。今天呢,我们来做一个在游戏中十分重要的组成元素:血条。血条是什么呢?血条是生命值的一种体现,就像《仙剑奇侠传三》电视剧...
  • 刚开始学习Unity 3D,新手遇到的坑都是泪对自由的抗争。进入主题~ 第一种方式: 1、使用Camera(假设叫A)照射3D模型(假设叫B)。(这里需要保证两者所在layer是一致的) 2、在Assets资源下面右击“Create”,...
1 2 3 4 5 ... 20
收藏数 22,531
精华内容 9,012
关键字:

unity3d 转2d