unity 订阅
Unity是游戏引擎开发商 [1-2]  ,实时3D互动内容创作和运营平台 [3]  。 [2]  包括游戏开发、美术、建筑、汽车设计、影视制作在内的创作者运用Unity实现。 [2]  Unity提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容 [2]  ,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [2]  2019年使用Unity制作的游戏和体验已在全球范围内覆盖将近30亿台设备 [4]  ,月均下载量超过30亿次 [5]  。并且其在2019年的安装量已超过370亿次。 [4]  全平台(包括PC/主机/移动设备)游戏中有一半都是基于Unity创作的。 [5]  Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验 [5]  ,全球超过60%的AR和VR内容都用Unity制作。 [5]  2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。 [6] 展开全文
Unity是游戏引擎开发商 [1-2]  ,实时3D互动内容创作和运营平台 [3]  。 [2]  包括游戏开发、美术、建筑、汽车设计、影视制作在内的创作者运用Unity实现。 [2]  Unity提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容 [2]  ,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [2]  2019年使用Unity制作的游戏和体验已在全球范围内覆盖将近30亿台设备 [4]  ,月均下载量超过30亿次 [5]  。并且其在2019年的安装量已超过370亿次。 [4]  全平台(包括PC/主机/移动设备)游戏中有一半都是基于Unity创作的。 [5]  Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验 [5]  ,全球超过60%的AR和VR内容都用Unity制作。 [5]  2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。 [6]
信息
开发公司
Unity Technologies
类    别
创作引擎、开发工具 [2]
员工数
约3500名 [2]
CEO
John Riccitiello [7]
别    名
U3D、Unity3D
属    性
软件公司 [2]
成立时间
2004年 [4]
支持维度
2D、3D、VR、AR、MR [2]
外文名
Unity
编程语言
C# [2]
Unity基本介绍
Unity3D(7张) Unity [8]  引擎使开发者能够为超过20个平台创作和优化内容 [5]  ,包括iOS、安卓、Windows [2]  、Mac OS、索尼PS4、任天堂Switch [2]  、微软Xbox One、谷歌Stadia、微软Hololens、谷歌AR Core、苹果AR Kit、商汤SenseAR等等 [2]  。公司超过1400人规模的研发团队让Unity的技术跟随合作伙伴迭代 [5]  ,确保在最新的版本和平台上提供优化支持服务。 [5]  Unity还提供运营服务来帮助创作者 [2]  ,包括:Unity Ads广告服务、Unity游戏云一站式联网游戏服务、Vivox游戏语音服务、Multiplay海外服务器托管服务 [2]  、Unity内容分发平台(UDP)、Unity Asset Store资源商店 [2]  、Unity云构建等。 [2]  Unity在中国、比利时、芬兰、加拿大、法国、新加坡、德国等16个国家拥有44个办公室 [5]  ,创作者分布在全球190个国家和地区。 [5] 
收起全文
精华内容
参与话题
问答
  • Unity入门:第一个游戏

    万次阅读 多人点赞 2018-02-02 22:12:12
    Unity官网提供了详尽的文档和丰富的教学视频,昨天跟着视频做了一个简单的3d游戏“roll-a-ball”。游戏涉及了许多Unity的基本知识,用来入门很不错。 这篇博文并不讲述整个游戏的制作流程,如果您感兴趣,可以访问...

    Unity官网提供了详尽的文档和丰富的教学视频,昨天跟着视频做了一个简单的3d游戏“roll-a-ball”。游戏涉及了许多Unity的基本知识,用来入门很不错。

    这篇博文并不讲述整个游戏的制作流程,如果您感兴趣,可以访问这里,如果访问遇到什么困难,在B站有一摸一样的视频

    这是完成以后的样子:


    运行效果:


    作为个人小结,下面写一些做这个游戏的收获:

    1、什么是Unity?

    一款游戏引擎,至于什么是游戏引擎,这里不展开。

    2、下载和安装

    官网:Unity官网

    作为学习用途,下载personal版即可。

    3、熟悉Unity界面

    进入Unity后,将会看到这样的界面:


    上图将界面划分成了5部分,下面分别解释每部分的功能:

    (1)Toolbar

    上面的按钮有不同的功能,比如左侧的第一个按钮可以用来移动场景中的物体,第二个按钮用来进行平移变换,第三个按钮用来进行旋转变换等。

    (2)Hierarchy window

    顾名思义,这个部分显示的是“层次结构”,场景中的对象都会被列到这个窗口中。当我们新建一个Unity项目时,Unity就会自动为我们添加两个东西:Main Camera和Directional Light,一个是相机,一个是光照。Hierarchy window上面有一个create按钮,点击这个按钮,我们可以看到一个包含了空对象、2d,3d对象、UI、光照、相机等在内的菜单,在这里你可以点击你想创建的东西。

    (3)Scene view

    这是游戏的场景,我们可以通过调整右上角的坐标系图案来调整观察场景的位置。

    (4)Inspector window

    当我们选中一个对象,打开Inspector window,这个对象的信息,例如所在的位置,平移了多少等等都会在这个窗口显示,当然也可以用这个窗口来调整场景中的对象,例如为了编辑方便,一开始我们会使用transform中的reset,将对象放置在坐标原点(0,0,0)。Inspector window最下面有一个Add Component按钮,通过这个按钮可以给对象增加其它的component,例如添加一条C#脚本等。

    (5)Project window

    这个窗口显示的是这个游戏使用的资源,通常我们会在这里建立一些文件夹,例如Scenes文件夹专门保存场景,Materials文件夹专门保存材质,Scripts文件夹专门保存脚本等。Project window上有一个不起眼的create按钮,这个按钮很有用,例如我们可以点击create->folder来新建一个文件夹等等。

    事实上,这只是Unity界面一个最基本的布局,你可以自己拖动这些window或者view来将它们放置在自己喜欢的位置,也就是说,操作界面是可以个性化的。其实上面漏掉了一个很重要的view:game view,如下图所示:


    这个view的按钮就在scene view旁边,上图中我已经将它拖动到了scene view下面,这个视图显示的是我们的游戏最终呈现给用户的样子,制作好一个游戏后,可以点击Toolbar中间那个表示Play的按钮进行试玩,游戏的运行情况就显示在这个视图中。

    为了方便编辑,我们常把Scene view和Game view并列在一起,就像上图一样,这样,在用Play试玩调试的时候可以不用频繁切换视图,从而节省了时间。

    4、怎么理解游戏中的几个脚本?

    Unity会自动为每个新建的C#脚本生成void Start()和void Update()两个方法,第一个在第一帧,也就是游戏刚开始时调用,第二个在画面更新时调用(准确地说是在渲染每一帧之前被调用)。

    在这个游戏中我们会用到三个脚本:

    (1)CameraController.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraController : MonoBehaviour {
    	public GameObject player;
    	private Vector3 offset;
    
    	void Start () {
    		offset = transform.position - player.transform.position;
    	}
    	
    	void LateUpdate () {
    		transform.position = player.transform.position + offset;
    	}
    }
    脚本的作用是当Player移动时,让相机也随着移动。

    这里有一个问题:要达到类似的效果,为什么不直接把Main Camera设置成Player的孩子?

    (2)PlayerController.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class PlayerController : MonoBehaviour {
    	public float speed;
    	public Text countText;
    	public Text winText;
    
    	private Rigidbody rb;
    	private int count;
    
    
    	void Start()
    	{
    		rb = GetComponent<Rigidbody>();
    		count = 0;
    		SetCountText();
    		winText.text = "";
    	}
    
    	void FixedUpdate()
    	{
    		float moveHorizontal = Input.GetAxis("Horizontal");
    		float moveVertical = Input.GetAxis("Vertical");
    		Vector3 movement=new Vector3(moveHorizontal,0.0f,moveVertical);
    		rb.AddForce (movement*speed);
    	}
    
    	void OnTriggerEnter(Collider other)
    	{
    		if (other.gameObject.CompareTag ("PickUp")) 
    		{
    			other.gameObject.SetActive (false);
    			count++;
    			SetCountText();
    		}	
    	}
    
    	void SetCountText()
    	{
    		countText.text = "Count:" + count.ToString ();
    		if(count>=12)
    		{
    			winText.text="You Win!";
    		}
    	}
    }

    这个脚本被添加到了叫做Player的小球上,Start函数用来做初始化,其中的getComponent用来获取刚体对象,也就是添加到叫做Player的小球上的那个RigidBody。为什么用FixedUpdate()不用Update()?因为FixedUpdate在做物理计算之前被调用,这个游戏中的碰撞属于physics的范畴,所以用FixedUpdate()。还有一个要注意的函数是OnTriggerEnter(),这个函数在对象碰到collider的时候会被触发,在这个例子中,我们给12个Pickup关联上了一个叫“PickUp”的Tag,当碰撞发生时如果发现Tag是PickUp,就deactivate这个PickUp(每个PickUp的is trigger需要勾选上)。教学视频中提到一个问题:除了要给PickUp的collider勾选is trigger,还要加上rigidbody(is kinematic),这是因为Unity计算所有collider的体积后把它们放在一个cache里,如果collier是静态的(static),这样做可以避免在每帧更新的时候重复计算,但是在我们这个游戏中,因为每次collider都在旋转,所以每次它的体积都会被重复计算,为了节省资源,可以把collider设置成动态的(dynamic=collider+rigidbody)。

    (3)Rotater.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Rotator : MonoBehaviour {
    
    	
    	// Update is called once per frame
    	void Update () {
    		transform.Rotate (new Vector3(15,30,45)*Time.deltaTime);
    	}
    }
    这里要用的是Update而不是FixedUpdate(和物理无关)。

    5、其他

    (1)prefab

    类似模板一样,可以将需要复用某个逻辑的一堆对象放到prefab文件夹中,这就可以对整体进行编辑、修改了。

    (2)快捷键

    例如ctrl+D用来duplicate

    (3)有不懂的查文档!!!

    展开全文
  • Unity3D基本入门及功能介绍

    万次阅读 多人点赞 2017-06-10 22:44:17
    本章主要是 Unity3D 的基础快速入门篇,通过本章的学习,能让初学者们快速的掌握和 应用 Unity3D 软件。 本章导读 本章无论对于 Unity3D 初学者、或是以前从事建模工作的设计师、又或者是从事过 3D 编程的人群,...

    本章主要是 Unity3D 的基础快速入门篇,通过本章的学习,能让初学者们快速的掌握和
    应用 Unity3D 软件。
    本章导读
    本章无论对于 Unity3D 初学者、或是以前从事建模工作的设计师、又或者是从事过 3D
    编程的人群,在转向 Unity3D 的学习的时候,学习本章内容都极有必要的。通过本章节内容
    的学习,你可以迅速的掌握 Unity3D 的软件结构,各个板块具体的功能和作用以及场景制作
    流程等等。本章节可以说是全书的根基,只要你能把本章节的内容掌握熟悉,那在今后的日
    子里面开发任何的游戏可以说是事半功倍。这就像运动员们在小的时候打好了坚实的基础,
    再向今后的专业突破的时候,就感觉游刃有余,几乎不费吹灰之力就拿下任何一个项目。
    对于有一定 Unity3D 基础的人群而言,笔者也强力建议在有充足时间的情况下,耐心的
    阅读下本章节的内容。因为笔者时常在网上发现一些 Unity3D 早期的开发者,往往对一些 U
    nity3D 很基础性的功能莫不着头脑。这不能怨这些开发者的水品不够,而是有许多 Unity3D
    的功能在长期未被使用的情况下,被他们遗忘了,突然有一天需要使用的时候,就抓了狂,
    发了疯。
    另外笔者要在这里提醒一下建模设计师,可能你们在原先的行业里面已经将 3DS MA
    X、Maya 等建模软件摸索得相当熟练了,但游戏场景和影视场景还是存在很大的差异。首
    先最大的差异就在于灯效的实时性,游戏讲究的是动态灯光,追求与游戏者视觉互动;而影
    视灯光则是一种静态的逐帧灯光,所有效果都被渲染成一张张静态的连续图片,它们主要倾
    向与影迷们的观赏互动;前者比较主动,而后者相对来说比较被动。前者在使用灯效处理的
    时候受硬件的局限性大,面对的客户群体需要有所区分;后者在观赏灯效处理的时候,几乎
    不受任何计算机硬件的影响,面对的客户群体也比较广泛。

    1.1 界面入门


    如图 1-1 所示为 Unity3D 最经典 2 by 3 结构界面,上面呈现了 Unity3D 最为常用的几
    个面板,下面为各个面板的详细说明。
      Scene【场景面板】:该面板为 Unity3D 的编辑面板;你可以将你所有的模型、灯光、
    以及其他材质对象拖放到该场景中。构建游戏中所能呈现景象。
      Game【游戏面板】:与场景面板不同,该面板是用来渲染场景面板中景象的。该面
    板不能用作编辑,但却可以呈现完整的动画效果。
      Hierarchy【层次清单栏】:该面板栏主要功能是显示放在场景面板中所有的物体对
    象。
      Project【项目文件栏】:该面板栏主要功能是显示该项目文件中的所有资源列表。
    除了模型、材质、字体等,还包括该项目的各个场景文件。
      Inspector【监视面板】:该面板栏会呈现出任何对象的所固有的属性,包括三维坐
    标、旋转量、缩放大小、脚本的变量和对象等等。
      【场景调整工具】:可改变你在编辑过程中的场景视角、物体世界坐标和本地坐标
    的更换、物体法线中心的位子,以及物体在场景中的坐标位置,缩放大小等等。
      【播放、暂停、逐帧按钮】:用于运行游戏,暂停游戏和逐帧调试程序。
      【层级显示按钮】:勾选或取消该下拉框中对应层的名字,就能决定该层中所有物
    体是否在场景面板中被显示。
      【版面布局按钮】:调整该下拉框中的选项,即可改变编辑面板的布局。
      【菜单栏】:和其他软件一样,包含了软件几乎所有要用到的工具下拉菜单。
    除了 Unity3D 初始化的这些面板而外,你还可以通过“Add Tab”按钮和菜单栏中的“W
    indow”下拉菜单中,增添其他面板和删减现有面板。特别是“Window”下拉菜单中的“Li
    ghtmapping”和“Occllusion Culling”面板对游戏的后期优化尤为管用。除此而外还有用
    于制作动画文件的 Animation【动画面板】,用于观测性能指数的 profiler【分析器面板】,
    用于购买产品和发布产品的 Asset Store【资源商店】,用于控制项目版本的 Asset Server
    【资源服务器】,用于观测和调试错误的 Console【控制台面板】。
    在【菜单栏】中包含有八个菜单选项:分别是 File【文件】、Edit【编辑】、Assets【资
    源】、GameObject【游戏对象】、Component【组件】、Terrain【地形】、Window【窗口】、He
    lp【帮助】。这些是 Unity3D 中最标准的菜单选项卡,其各自又有自己的子菜单,表 1-1 中
    列出了各个菜单栏以及它们所包含的下拉菜单及其译名,仅供读者参考。

    主菜单  包含的子菜单

    File【文件】

    New Scene【新建场景】
    Open Scene【打开场景】
    Save Scene 【保存场景】
    Save Scene as…【场景另存为…】
    New Project… 【新建工程文件】
    Open Project… 【打开工程文件】
    Save Project 【保存工程文件】
    Build Settings… 【创建设置】(这里可以设置你的游戏将要以
    何种方式发布,发布的场景文件又包含那些)
    Build & Run 【创建并运行】(这里以“Build Settings”里设
    置好的方式,发布并运行游戏)
    Exit 【退出】

    Edit【编辑】

    Undo 【撤销上一步操作】
    Redo 【恢复被撤销的操作】
    Cut 【剪切】
    Copy 【拷贝】
    Paste 【粘贴】
    Duplicate 【复制】
    Delete 【删除】
    Frame Selected 【在编辑场景中最大化显示被选中的物体】
    Select All 【全选编辑面板中的所有物体】
    Preferences… 【首选参数设置】
    Play 【播放】(如果游戏已经开始播放,点此按钮代表停止播
    放)
    Pause 【暂停】
    Step 【逐帧播放游戏】
    Load selection 【载入所选】(与“Save selection”【存储所选】
    联合使用,你可以把它理解为一个临时的快捷键,帮你快速的
    找到特定的以被存储的物体对象。)
    Save selection 【存储所选】(与“Load selection”【载入所选】
    联合使用,你可以把它理解为一个临时的快捷键,帮你快速的
    找到特定的以被存储的物体对象。)
    Project Settings 【工程文件设置】(包含了该工程项目的“Inp
    ut”【热键】、“Tags”【标签管理】、“Audio”【音频设置】、“Ti
    me”【时间设置】、“Player”【播放器设置】、“Physics”【默认仿
    真物理设置】、“Quality”【播放质量参数设置】、“NetWork”【网
    络工作参数设置】、“Editor”【编辑器设置】)“Script Execution
    Order”【脚本编译顺序设置】
    Render settings 【渲染设置】(默认渲染参数设置,包括环境光,
    周围的雾化程度,环境颜色等等一系列参数的设定)
    Network emulation 【网络仿真】(由于你制作的游戏将会在不
    同的网络环境中工作,所以需要这个参数来模拟不同的网络工
    作环境)
    Graphics emulation 【图形卡仿真】(由于你制作的游戏将会在
    不同的图形卡环境中工作,所以将需要这个参数来模拟不同硬
    件条件下的游戏显示质量)
    Snap settings 【捕捉设置】(和 3Ds Max 的“栅格和捕捉设置”
    类似。)

    Assets 【资源】

    Create 【创建】(包含有“Folder”【文件夹】、“JavaScript”【Ja
    vaScript 编程脚本】、“C# Script”【C#编程脚本】、“Boo Script”
    【Boo 编程脚本】、“Shader”【着色语言】、“Prefab”【预置物体】、
    “Material”【材质】、“Animation”【动画】、“Cubemap”【立方
    体贴图】、“Lens Flare”【镜头光晕】、“Custom Font”【自定义
    字体】、“Render Texture”【渲染纹理】、“Physic Material”【物
    理材质】、“GUI Skin”【用户图形界面皮肤】)
    Show in Explor 【显示项目资源所在的文件夹】
    Open【打开选中的资源】
    Delete【删除选定资源】
    Import New Asset... 【导入新的资源】
    Import Package...【导入资源包】
    Export Package... 【导出资源包】
    Select Dependencies 【选择相关联的文件】
    Export compressed audio file... 【导出压缩的音频文件】
    Refresh 【刷新】
    Reimport 【重新导入选中的资源】
    Reimport All 【重新导入所有的资源文件】
    Sync MonoDevelop Project 【与 Mono 项目文件同步】

    GameObject【游戏项目】

    Create Empty【创建空的游戏对象】
    Create Other 【创建其他组件】(包含了“Particle System”【粒
    子系统】、“Camera”【摄像机】、“GUI Text”【图形用户界面文
    本】、“GUI Texture”【图形用户界面图片】、“3D Text”【3D 文
    字】、“Directional Light”【平行光】、“Point Light”【点光源】、
    “Spotlight”【聚光灯】、“Cube”【立方体】、“Sphere”【球】、“C
    apsule”【胶囊】、“Cylinder”【圆筒】、“Plane”【平面】、“cloth”
    【布料】、“Audio Reverb Zone”【声音回响区域】、“Ragdoll..”
    【布娃娃系统】、“Tree”【植被树系统】、“Wind Zone”【风的区
    域】)
    Center On Children 【归位到子物体中心点】
    Make Parent 【创建父集】(必须选择两个以上的物体才能使用
    该命令,最先被选中的物体为父级对象,其余的对象都为该对
    象的子集)
    Clear Parent 【取消父集】(取消被选中物体与它上一个父级之
    间的父子级关系)
    Apply Changes To Prefab 【改变影响预制物体】(如果你在场
    景中编辑的物体是从资源面板拖拽出的预制物体,默认的情况
    下,你在场景面板中对物体做出的改变不会影响原先的预制物
    体,除非你点击该按钮)
    Move To View 【移动物体到“Scene”视窗的中心点】
    Align With View 【移动物体到“Scene”视窗的中心点,并且
    与显示口正对齐,物体中心位于显示口的中心点】
    Align View to Selected 【移动“Scene”视窗与物体对齐,并
    且显示口的中心点位于物体的中心】

    Component【组件】

    Mesh 【网格】(“Mesh Filter”【网格填充】、“Text Mesh”【文
    字网格】、“Mesh Renderer”【网格渲染】、“Combine Children”
    【合并子物体】)
    Particles 【粒子系统】(能打造出非常棒的流体效果,是制作烟
    雾、激光、火焰等效果的首选。“Ellipsoid Particle Emitter”【
    椭球粒子发射器 】,“Mesh Particle Emitter”【面片粒子发射器】,
    “Particle Animator” 【粒子动画】, “World Particle Collider” 【世
    界粒子碰撞机】,“Particle Renderer”【粒子渲染器】,“Trail Re
    nderer”【蔓延渲染】)
    Physics 【物理系统】(可使物体带有对应的物理属性)
    Audio 【音频】(可创建声音源和声音的听者)
    Rendering 【渲染】
    Miscellaneous 【杂项】
    Scripts 【脚本】(Unity 内置的一些功能很强大的脚本)
    Image Effects【图形渲染效果】(仅限专业版)
    Character【角色控制器】
    Camera-Control 【摄像机控制】

    Terrain【地形】 

     Create Terrain 【创建地形】
    Import Heightmap - Raw... 【导入高度图】
    Export Heightmap - Raw... 【导出高度图】
    Set Resolution... 【设置分辨率】
    Create Lightmap... 【创建光影图】
    Mass Place Trees... 【批量种植树】
    Flatten Heightmap... 【展平高度图】
    Refresh Tree and Detail Prototypes 【刷新树及细节模型】

    Window【窗口】

    Next Window 【下个窗口】
    Previous Window 【前一个窗口】
    Layouts 【布局】
    Scene 【场景窗口】
    Game 【游戏窗口】
    Inspector 【监视窗口】(这里主要指各个对象的属性)
    Hierarchy 【层次窗口】
    Project 【项目文件窗口】
    Animation 【动画窗口】(用于创建时间动画的面板)
    Profiler 【性能探测窗口】
    Asset Store 【资源商店】
    Asset Server 【源服务器】
    Lightmapping 【灯影视图窗口】
    Occlusion Culling 【遮挡剔除窗口】
    Console 【控制台】

    Help【帮助】

    About Unity... 【关于 Unity】
    Enter serial number... 【输入序列号】
    Unity Manual 【Unity 手册】
    Reference Manual 【参考手册】
    Scripting Manual 【脚本手册】
    What’s New 【最新功能】
    Unity Forum 【Unity 论坛】
    Unity Answers 【Unity 在线答疑】
    Unity Feedback 【Unity 使用信息反馈】
    Welcome Screen 【欢迎窗口】
    Check for Updates 【查看升级】
    Release Notes 【发行说明】
    Report a bug【软件缺陷反馈】

    展开全文
  • C# For Unity系列之入门篇

    万人学习 2017-03-26 14:00:01
    学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806 ...
  • 基于Unity的游戏开发(上)

    万人学习 2015-03-09 19:53:04
    本课程是Unity游戏开发的入门课程,课程分为上、下两个部分。上篇主要讲述游戏的基本概念、Unity的开发环境、游戏资源的创建和使用等基础内容。
  • Unity SDK对接全攻略之Android

    千人学习 2019-01-11 14:04:26
    本课程带大家学习Unity和Android交互相关的知识,如果你是刚接触Android,或刚接到对接SDK的任务,那么这堂课程你一定不要错过,带你从零到对接一款SDK的全流程。课程包括五个大的部分,从环境配置到发布、到发布第...
  • 深入浅出Unity3D——第一篇

    万人学习 2015-02-05 09:58:48
    Unity3D基础知识、游戏算法一网打尽。
  • Unity IOS微信SDK接入

    万次阅读 2015-07-08 09:29:22
    参考:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417694084&token=&lang=zh_CN 1、将“WeiXin”文件夹,放到Xcode根目录; 2、在Info配置文件中添加URL ...

    参考:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417694084&token=&lang=zh_CN

    1、将“WeiXin”文件夹,放到Xcode根目录;

    2、在Info配置文件中添加URL Types; Identifier:weixin;URL Schemes:xxxxxxxxxxxxxxxxxx
    3、添加必要的引用包:SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib
    4、修改UnityAppController.h头文件:添加引用:#import "WeiXin/WXApi.h”;添加Delegate:@interface UnityAppController : NSObject<UIApplicationDelegate,WXApiDelegate>
    5、在UnityAppController.mm文件中添加如下代码片段:
    #pragma mark - WXApiDelegate
    
    #define WeiXinID @"xxxxxxxxxxxxxxxxxx"
    
    #define WeiXinSecret @"5ace7e016a14e913478cdc4219ace9e7"
    
    #define ksendAuthRequestNotification @"ksendAuthRequestNotification"
    
    #define GameObjectName "AndriodClass"
    
    #define MethodName "Weixincallback_LoginSuccess"
    
    #define ShareMethod "Weixincallback_shareSuccess"
    
    extern "C"
    {
        bool isWXAppInstalled()
        {
            return [WXApi isWXAppInstalled];
        }
        bool isWXAppSupportApi()
        {
            return [WXApi isWXAppSupportApi];
        }
        // 给Unity3d调用的方法
        void weixinLoginByIos()
        {
            // 登录
            [[NSNotificationCenter defaultCenter] postNotificationName:ksendAuthRequestNotification object:nil];
        }
        void ShareByIos(const char* title,const char*desc,const char*url)
        {
            NSString *titleStr=[NSString stringWithUTF8String:title];
            NSString *descStr=[NSString stringWithUTF8String:desc];//0416aa28b5d2ed1f3199083b3806c6bl
            NSString *urlStr=[NSString stringWithUTF8String:url];
            NSLog(@"ShareByIos titleStr:%@",titleStr);
                    NSLog(@"ShareByIos descStr:%@",descStr);
                    NSLog(@"ShareByIos urlStr:%@",urlStr);
    //        UIImage *img=[UIImage imageNamed:@"AppIcon72x72"];
    //                        NSLog(@"ShareByIos img:%@",img);
            // 分享
            WXMediaMessage *message = [WXMediaMessage message];
            message.title = titleStr;
            message.description = descStr;
            [message setThumbImage:[UIImage imageNamed:@"AppIcon72x72"]];
            
            WXWebpageObject *ext = [WXWebpageObject object];
            ext.webpageUrl = urlStr;//@"http://tech.qq.com/zt2012/tmtdecode/252.htm";
            
            message.mediaObject = ext;
            message.mediaTagName = @"WECHAT_TAG_SHARE";
            
            SendMessageToWXReq* req = [[[SendMessageToWXReq alloc] init]autorelease];
            req.bText = NO;
            req.message = message;
            req.scene = WXSceneTimeline;
            [WXApi sendReq:req];
        }
    }
    
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
        return [WXApi handleOpenURL:url delegate:self];
    }
    
    - (void)onReq:(BaseReq *)req // 微信向第三方程序发起请求,要求第三方程序响应
    {
        
    }
    
    - (void)onResp:(BaseResp *)resp // 第三方程序向微信发送了sendReq的请求,那么onResp会被回调
    {
        if([resp isKindOfClass:[SendAuthResp class]]) // 登录授权
        {
            SendAuthResp *temp = (SendAuthResp*)resp;
            if(temp.code!=nil)UnitySendMessage(GameObjectName, MethodName, [temp.code cStringUsingEncoding:NSUTF8StringEncoding]);
    
    //        [self getAccessToken:temp.code];
        }
        else if([resp isKindOfClass:[SendMessageToWXResp class]])
        {
            // 分享
            if(resp.errCode==0)
            {
                NSString *code = [NSString stringWithFormat:@"%d",resp.errCode]; // 0是成功 -2是取消
                NSLog(@"SendMessageToWXResp:%@",code);
                UnitySendMessage(GameObjectName, ShareMethod, [code cStringUsingEncoding:NSUTF8StringEncoding]);
            }
        }
    }
    
    #pragma mark - Private
    
    - (void)sendAuthRequest
    
    {
    
        SendAuthReq* req = [[[SendAuthReq alloc] init] autorelease];
    
        req.scope = @"snsapi_userinfo";
    
        req.state = @"only123";
    
        
    
        [WXApi sendAuthReq:req viewController:_rootController delegate:self];
    
    }
    
    
    
    - (void)getAccessToken:(NSString *)code
    
    {
    
        NSString *path = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",WeiXinID,WeiXinSecret,code];
    
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
    
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
    
         ^(NSURLResponse *response,NSData *data,NSError *connectionError)
    
        {
    
             if (connectionError != NULL)
    
             {
    
             }
             else
    
             {
    
                 if (data != NULL)
    
                 {
    
                     NSError *jsonParseError;
    
                     NSDictionary *responseData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonParseError];
    
                                     NSLog(@"#####responseData = %@",responseData);
    
                     if (jsonParseError != NULL)
    
                     {
    
                         //                    NSLog(@"#####responseData = %@",jsonParseError);
    
                     }
    
                     NSString *accessToken = [responseData valueForKey:@"access_token"];
    
                     NSString *openid = [responseData valueForKey:@"openid"];
    
                     [self getUserInfo:accessToken withOpenID:openid];
    
                 }
    
             }
    
         }];
    
    }
    
    - (void)getUserInfo:(NSString *)accessToken withOpenID: (NSString *)openid
    
    {
    
        NSString *path = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",accessToken,openid];
    
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];
    
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
    
         ^(NSURLResponse *response,NSData *data,NSError *connectionError) {
    
             if (connectionError != NULL) {
    
                 
    
             } else {
    
                 if (data != NULL) {
    
                     NSError *jsonError;
    
                     NSString *responseData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
    
                     NSLog(@"#####responseData = %@",responseData);
    
                     NSString *jsonData = [NSString stringWithFormat:@"%@",responseData];
    
                     UnitySendMessage(GameObjectName, MethodName, [jsonData cStringUsingEncoding:NSUTF8StringEncoding]);
    
                     if (jsonError != NULL) {
    
                         //                     NSLog(@"#####responseData = %@",jsonError);
    
                     }
    
                 }
    
             }
    
         }];
    
    }
    #pragma mark -
    

    6、重写handleOpenURL和openURL方法:

    将openURL方法中return YES替换为return [WXApi handleOpenURL:url delegate:self];

    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
        return [WXApi handleOpenURL:url delegate:self];
    }
    7、didFinishLaunchingWithOptions方法中添加:
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendAuthRequest) name:ksendAuthRequestNotification object:nil]; // 微信
    
    //向微信注册
    [WXApi registerApp:WeiXinID];

    展开全文
  • Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK——iOS(一 接入微信SDK)


    下载微信SDK

    下载地址:微信开放平台

    导出Unity Xcode项目

    导出Unity Xcode项目,并打开

    微信SDK导入Xcode项目

    将 SDK 文件中包含的 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个文件添加到你所建的工程中(如下图所示,在 Unity-iPhone 工程的目录下创建 /Platform/WxAPI)。

    这里写图片描述

    配置Xocde相关属性

    1.微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。开发者需要在工程中链接上:

    • SystemConfiguration.framework
    • libz.tbd
    • libsqlite3.0.tbd
    • libc++.tbd
    • Security.framework
    • CoreTelephony.framework
    • CFNetwork.framework。

    这里写图片描述

    2.在你的工程文件中选择 Build Setting ,在”Other Linker Flags”中加入”-Objc -all_load”

    这里写图片描述

    注: 如果导出 Xcode 项目中包含其他静态库(如tolua.a)的话, 会出现其他静态库 需要将 -Objc -all_load修改成
    -Objc -force_load $(SRCROOT)/Platform/WxAPI/WeChatSdk.a

    3.在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id(如下图所示)。

    这里写图片描述

    4.在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin wechat(如下图所示)。

    这里写图片描述

    5.在 Platform 目录下创建 xxx.h 文件,增加 WXApiDelegate 协议

    xxx.h文件

    #import <Foundation/Foundation.h>
    #import "WXApi.h"
    
    @interface WXApiManager : UIResponder<UIApplicationDelegate,WXApiDelegate>
    
    /*WXApiManager 实例化*/
    + (instancetype)sharedManager;
    @end
    

    6.在 Platform 目录下创建 xxx.mm 文件,并实现和微信终端交互的具体请求与回应

    要实现和微信终端交互的具体请求与回应,因此需要实现 WXApiDelegate 协议的两个方法

    -(void) onReq:(BaseReq*)req
    onReq是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面。
    
    -(void) onResp:(BaseResp*)resp
    如果第三方程序向微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到微信终端程序界面。
    

    xxx.mm文件

    #import "WXApiManager.h"
    @implementation WXApiManager
    
    extern "C"
    {
        //检测是否安装客户端
        bool RegisterWx(){
            return [WXApi isWXAppInstalled];
        }
        //获取授权
        void AuthorizeWx(){
            //构造SendAuthReq结构体
            SendAuthReq* req =[[SendAuthReq alloc ] init ];
            req.scope = @"snsapi_userinfo" ;
            req.state = @"wechat_sdk" ;//参数随意
            //第三方向微信终端发送一个SendAuthReq消息结构
            [WXApi sendReq:req];
        }
    }
    
    #pragma mark - LifeCycle
    
    +(instancetype)sharedManager {
        static dispatch_once_t onceToken;
        static WXApiManager *instance;
        dispatch_once(&onceToken, ^{
            instance = [[WXApiManager alloc] init];
        });
        return instance;
    }
    
    #pragma mark - WXApiDelegate
    - (void)onResp:(BaseResp *)resp {
        if ([resp isKindOfClass:[SendAuthResp class]])
        {
            SendAuthResp *temp = (SendAuthResp*)resp;
            if(temp.code!=nil)
                UnitySendMessage("GameManager", "AuthorizeToWx", [temp.code  UTF8String]);
                //将Code信息返回给Unity
        }
    }
    
    - (void)onReq:(BaseReq *)req {
    
    }
    
    @end
    

    7.要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。
    在 Classes 目录下找到 UnityAppController.mm 文件,在 UnityAppController 的 didFinishLaunchingWithOptions 函数中向微信注册id)。

    UnityAppController.mm 文件路径

    向微信注册id

    8.重写 UnityAppController 的 handleOpenURL 和 openURL 方法

    重写 UnityAppController 的 handleOpenURL 和 openURL 方法

    常见的一些报错

    1、编译报错 “does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64”
    低版本的unity(5.3.2以下)是不支持bitcode的,但是高版本的Xcode(7.0以上)默认是支持bitcode,这样他们就有冲突 设置一下bitcode = no 即可

    这里写图片描述
    2.
    报错:

    这里写图片描述

    解决方案:

    这里写图片描述
    3.
    报错:

    这里写图片描述

    解决方案1:在项目中移除Libraries的引用,重新添加并删除libil2cpp文件夹的引用

    这里写图片描述

    解决方案2: 把library那一行的双引号去掉即可… 当然如果放在其他目录的话, 需要自己添加目录路径

    展开全文
  • 使用Unity3D的50个技巧:Unity3D最佳实践

    万次阅读 多人点赞 2014-08-31 21:35:02
    关于使用Unity3D的50条最佳实践。
  • Unity3D入门教程】Unity3D简介、安装和程序发布

    万次阅读 多人点赞 2017-01-06 11:22:19
    Unity3D是一个跨平台的游戏开发引擎,它能够帮助开发者快速构建游戏场景,进行游戏开发与发布。它支持将开发好的作品发布到Windows、Mac OS、Android、iOS、Linux等多种平台。另外,Unity3D官方版本目前可以运行在...
  • 其实我倒不很讨厌现在的游戏,页游有讨厌过,也没玩过,而且过去了,也不是太在意。现在的手游,很火的如阴阳师,王者荣耀这些,和以前的游戏不同那是正常的,毕竟社会是一直变化中,玩家也和以前的玩家不同了,就算...
  • unity入门教学,新手教学,新手到大神的教学。。。
  • unity3d文件反编译工具

    千次下载 热门讨论 2011-06-23 17:33:39
    反编译 unity3d文件 点击'new project'选择要反编译的文件。 先点‘New project’选择unity3d文件,再点'Unpack Web Archrive in a directory'选择导出的文件夹。
  • 每周更新unity3d视频教程,从入门到就业,官方unity3d培训,上千门实时更新课程,供学员在线观看学习,unity3d游戏开发,可以让学员随时随地学习! 免费网上学习unity3d自学教程,国内名师机构专业授课,O基础快速学习,1小时...
  • [Unity3d]unity与html通信

    万次阅读 2013-12-01 00:33:12
    更多教程请访问: http://dingxiaowei.cn/ ...下面简单谈谈通过Unity3D调用HTML网页的脚本函数,以及通过HTML网页调用Unity3D中的脚本函数。 1.1Unity3D浏览器调用HTML网页中的函数 Unity3D浏览...
  • Unity3d】200个插件免费分享(所有资源已上传)

    万次阅读 多人点赞 2012-10-27 00:25:37
    接触U3D有段时间了,积累了点插件、资源、学习网站、论坛等,现在整理下,跟广大同仁们分享下! 所有资源已经上传完毕,约5G。 200个插件免费分享 【下载链接】  ...注:这份资源比较旧了,参考意义其实不大了,...
  • Unity3d与android进行交互,使用Fragment来展示Unity3d的视图,在android视图与Unity3d视图之间相互切换。
  • WinForm内嵌Unity3D

    万次阅读 热门讨论 2015-11-17 17:55:35
    Unity3D可以C#脚本进行开,使用vstu2013.msi插件,可以实现在VS2013中的调试。在开发完成后,由于项目需要,需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、...
  • Unity3d的安装

    万次阅读 2019-06-19 09:46:45
    Unity3d的安装 ** 1.在线安装 a.获取在线安装程序 第一步:进入官网:https://unity.com/cn 第二步:在主页的底部点击下载 第三步:来到UnityStore,拖到该页面的最底部,点击资源下面的Unity旧版本 第四步:来到Unity...
  • Unity3d设置成中文版

    万次阅读 多人点赞 2019-09-25 11:33:57
    效果图: 要求:版本V > 2018.2或以上版本 步骤①: 下载中文语言包:链接:... ... 打开unity安装文件夹(我的是):C:\Program Files\Unity\Editor\Data,如果此文件夹下没有Localization就...
  • 关于Unity和Android的互相调用,网上的教程太多了,大同小异,抄来抄去。这次我就尝试着慢慢来,讲讲我的理解(简单的我会一笔带过,网上可以轻松找到答案,就不赘述了),希望大家看的时候并不是秉承着“拿来主义”...
  • 本文介绍了Unity3D界面及游戏对象基本操作。
  • 2018年什么游戏最火? 不用问,肯定是人人都在撸的“王者荣耀”和吃鸡游戏了。...Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综...
  • Unity3D 2018安装教程

    万次阅读 2019-06-15 21:39:17
    安装步骤: ...Unity2018.3.0相较2017版本的在启动时稳定了很多(2017版本启动经常会卡在loading界面) 如果启动Unity2018.3.0时一直卡在loading界面进不去,可以尝试以下两种解决办法: 1.1:将计算...
  • 这个工具呢,博主在Unity3D游戏开发之反编译AssetBundle提取游戏资源这篇文章中其实已经提到过了,不过因为有些朋友对如何使用这个工具依然存在问题,所以博主决定特地写一篇文章来讲解如何使用disunity来提取Unity...
  • Unity3DUnity3D证书

    千次阅读 2019-02-13 15:08:05
    一、前言 话说,英语有英语等级证书,计算机也有等级证书,会计证,工程师证,那么从事Unity开发的工程师,有没有专属的职业资格证书呢。这个还是有的,分别有以下几...Unity3D美术师 Unity Certified 3D Artist ...
  • [Unity3D]Unity3D 游戏开发之碰撞检测

    万次阅读 2014-04-07 12:43:03
    今天我们来一起来学习Unity3D中一个很重要的概念:碰撞。为什么说碰撞很重要呢?因为在游戏中无时无刻不充满碰撞啊,在飞行类游戏中我们需要判断炮弹是否击中了敌人,在RPG游戏中我们需要判断玩家是否对敌人造成了...
  • Unity3D简介

    千次阅读 2016-09-13 10:13:04
    Unity3D简介
  • Unity3D一个全面整合的专业游戏引擎

    千次阅读 2018-09-07 09:09:40
    Unity3d:https://unity3d.com/cn 参考百度百科:https://baike.baidu.com/item/Unity3D/3064002?fromtitle=Unity&amp;fromid=10793&amp;fr=aladdin Unity3D是由Unity Technologies开发的一个让玩家轻松创建...
  • Unity3D基础3:贴图与材质球

    万次阅读 多人点赞 2019-02-02 00:56:22
    前文:https://blog.csdn.net/Jaihk662/article/details/86746464(Unity3D基础模型) 一、贴图与材质球 材质(Material):物体的质地,物体看起来是什么做的 贴图(Texture):普通的材质图片 + = 贴图 + 着色...

空空如也

1 2 3 4 5 ... 20
收藏数 275,065
精华内容 110,026
关键字:

unity