unity_unity3d - CSDN
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游戏开发的入门课程,课程分为上、下两个部分。上篇主要讲述游戏的基本概念、Unity的开发环境、游戏资源的创建和使用等基础内容。
  • Unity3D基础知识、游戏算法一网打尽。
  • 本课程主要介绍Unity3d的UI系统(UGUI),先对UGUI做一个总体概述,之后对每个UI控件逐一进行详细讲述,内容包括控件的作用、设置方法、使用场景及属性细节,帮助大家熟练使用UGUI设计游戏的交互界面。
  • 学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806 ...
  • 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)有不懂的查文档!!!

    展开全文
  • 在一些Unity脚本的开始经常可以看到 #pragma strict,#pragma downcast、#pragma implicit指令, 而有的Unity脚本则没有这些指令,那这些指令有什么作用呢? #pragma strict,此指令的含义是强制输入,也就是我们

    转自: http://www.narkii.com/club/thread-260346-1.html



    在一些Unity脚本的开始经常可以看到 #pragma strict,#pragma downcast、#pragma implicit指令,

    而有的Unity脚本则没有这些指令,那这些指令有什么作用呢?
    #pragma strict,此指令的含义是强制输入,也就是我们在声明变量时,需要精确的声明变量是什么类

    型,而不是让编译器来自己推测变量的类型,因此,也不能随便的使用一个随机的名称并让编译器来为

    你实例化此变量。例如,在使用此指令后,我们随意声明一个变量:
              private var bobby;//是不可以的,
    而需要这样:
              private var bobby : GameObject;//这个可以
      通过使用#pragma strict,可以强制我们养成良好的编程习惯,但这在Unity中也不是必须要这样做。
       而#pragma downcast和#pragma implicit指令,则是可以与#pragma strict指令搭配使用,从而做到

    “严中有松”,真是有点意思。先看#pragma implicit指令,它的意思是在使用#pragma strict指令,

    搭配此指令又可以含蓄的声明变量,例如:
        #pragma strict

        foo = 5; // 不可以

        #pragma strict

        var foo = 5; //可以

         #pragma strict
         #pragma implicit

         foo = 5; // 通过使用#pragma implicit,此句是可以的。

          而#pragma downcast语句则允许在使用#pragma strict指令时,使变量可以从super(父类型)到

    sub(子)类型的转换,例如:
         #pragma strict

         var go : GameObject;

        var clone : GameObject = Instantiate(go); //此语句是不可以的,因为Instantiate后返回
    //的物体类型是Object,而不是GameObject


         #pragma strict

         #pragma downcast

         var go : GameObject;

        var clone : GameObject = Instantiate(go); //此语句是可以的,使用了#pragma downcast
       
       下面的语句也是可以的:
      #pragma strict

      var go : GameObject;

      var clone : GameObject = Instantiate(go) as GameObject; //此语句也是可以的,因为使//用了

    类型转换as。

    展开全文
  • multi_compile 作用 根据编译选项产生shader变体 避免分支语句导致的性能下降 主要用于在代码中选择shader变体 ...Unity在打包时会把所有multi_compile产生的shader变体都打进包中 示例shader Shade...

    https://blog.csdn.net/ak47007tiger/article/details/100007655

    multi_compile

    • 作用
      • 根据编译选项产生shader变体
      • 避免分支语句导致的性能下降
      • 主要用于在代码中选择shader变体
    • Unity在打包时会把所有multi_compile产生的shader变体都打进包中

     

    示例shader

    Shader "DC/Shader/ShaderLab/MultiCompile"
    {
        Properties
        {
            _MainTex ("Texture", 2D) = "white" {}
            [KeywordEnum(R,G,B)] _CL("ColorSelect", Float) = 0
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
            LOD 100
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                
                #pragma multi_compile _CL_R _CL_G _CL_B
                //使用 __ 减少一个编译选项,编译选项最多256个
                #pragma multi_compile __ DB_ON
    
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    float4 vertex : SV_POSITION;
                };
    
                sampler2D _MainTex;
                float4 _MainTex_ST;
    
                v2f vert (appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    UNITY_TRANSFER_FOG(o,o.vertex);
                    return o;
                }
    
                fixed4 frag (v2f i) : SV_Target
                {
                    #if DB_ON
                        return fixed4(1,1,0,1);
                    #elif _CL_R
                        return fixed4(1,0,0,1);
                    #elif _CL_G
                        return fixed4(0,1,0,1);
                    #elif _CL_B
                        return fixed4(0,0,1,1);
                    #else
                        fixed4 col = tex2D(_MainTex, i.uv);
                        return col;
                    #endif
                }
                ENDCG
            }
        }
    }
    

      示例脚本

    using UnityEngine;
    
    namespace DC
    {
      public class MultiCompile : MonoBehaviour
      {
        public Material mat;
    
        public void OnEnable()
        {
          mat.EnableKeyword("DB_ON");
    //      Shader.EnableKeyword("ON");
        }
    
        public void OnDisable()
        {
          mat.DisableKeyword("DB_ON");
    //      Shader.DisableKeyword("DB_ON");
        }
      }
    }
    

      

     

    展开全文
  • shader_feature 作用 ...unity打包时如果发现没有材质引用shader_feature产生的变体,不会打包该变体 效果图 示例shader Shader "DC/Shader/ShaderLab/MaterialToggle" { Properties { ...

    shader_feature

    • 作用
      • 根据编译选项产生shader变体
      • 避免分支语句导致的性能下降
      • 主要用于材质选项上
    • unity打包时如果发现没有材质引用shader_feature产生的变体,不会打包该变体

    效果图

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

    示例shader

    Shader "DC/Shader/ShaderLab/MaterialToggle"
    {
        Properties
        {
            [Toggle] _T1("T1", Float)=0
            [Toggle(T2)] _T2("T2", Float)=0
            _MainTex ("Texture", 2D) = "white" {}
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
            LOD 100
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                #pragma shader_feature _T1_ON
                #pragma shader_feature T2
    
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    float4 vertex : SV_POSITION;
                };
    
                sampler2D _MainTex;
                float4 _MainTex_ST;
    
                v2f vert (appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    UNITY_TRANSFER_FOG(o,o.vertex);
                    return o;
                }
    
                fixed4 frag (v2f i) : SV_Target
                {
                    #ifdef _T1_ON
                        fixed b = 0;
                        #ifdef T2
                            b = 0.5;
                        #endif
                        return fixed4(0.5,b,0,1);
                    #else
                        fixed4 col = tex2D(_MainTex, i.uv);
                        return col;
                    #endif
                }
                ENDCG
            }
        }
    }
    
    

    示例脚本

    using UnityEngine;
    
    public class ShaderFeatureControl : MonoBehaviour
    {
      public Material _materialToggle;
    
      void OnEnable()
      {
        _materialToggle.EnableKeyword("T2");
      }
    
      void OnDisable()
      {
        _materialToggle.DisableKeyword("T2");
      }
    }
    
    展开全文
  • 本章主要是 Unity3D 的基础快速入门篇,通过本章的学习,能让初学者们快速的掌握和 应用 Unity3D 软件。 本章导读 本章无论对于 Unity3D 初学者、或是以前从事建模工作的设计师、又或者是从事过 3D 编程的人群,...
  • 如果您想让自己的Unity3D游戏在发布到苹果的App Store或者谷歌的Google Play商代后具备获利赚钱的功能,首先就可以考虑在自己的游Unity戏工程中添加Unity系列的广告,然后诱使玩家并在合适的时机播放,玩家在观看...
  • 最近在开发秘密行动(stealth) 里边的警报系统效果挺有趣的 这篇博客实现一下警报的效果 大致就是让一个灯光闪烁 首先創建一個Light 我們的思路是动态新修改Light中的Intensity来实现修改灯光的闪烁 ...
  • 大富翁游戏源码

    2020-07-30 23:33:32
    大富翁游戏源码 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间删除,谢谢您。]
  • 在一个游戏项目 逻辑等大致框架搭建完成之后 如果是一个偏于观赏性的游戏的话 后期的处理可以说非常重要的 之前我写过一篇关于用UGUI控制游戏内画质的博客肯恩过对于优化后期画质等方面对大家有用 ...
  • Unity安装官方中文版教程 本文提供全流程,中文翻译。 助力快速完成 Unity 中文汉化的安装 为新手节省宝贵的时间,避免采坑! 安装过程非常简单,这里 Chinar 只说最简单的安装方式 下载官方语言文件 zh-cn.po ...
  • 去官网下了个Unity2019.1.02f,然后打开的时候又要我下一个Unity Hub2.0.0,很迷,不知道这个是干嘛的,了解了一下才知道,原来这个就是个管理Unity版本的软件,也就是我们可以在自己电脑上安装多个Unity版本,然后...
  • Unity Version: 2018.1.2f1 边缘发光材质效果 创建工程 打开Unity并创建一个新工程 安装依赖项 Window -> Package Manager打开包管理器,安装二个依赖包: 1. Lightweight Render Pipeline 2. Shader ...
  • 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去。我们在编辑器里看到的Asset中的文件结构只是工作于编辑器环境下的,在游戏中unity会重新组织...
  • Unity3d的安装

    2019-06-19 09:46:45
    Unity3d的安装 ** 1.在线安装 a.获取在线安装程序 第一步:进入官网:https://unity.com/cn 第二步:在主页的底部点击下载 第三步:来到UnityStore,拖到该页面的最底部,点击资源下面的Unity旧版本 第四步:来到Unity...
  • 每周更新unity3d视频教程,从入门到就业,官方unity3d培训,上千门实时更新课程,供学员在线观看学习,unity3d游戏开发,可以让学员随时随地学习! 免费网上学习unity3d自学教程,国内名师机构专业授课,O基础快速学习,1小时...
  • 特点:1、针对Unity52、如何使用Unity3D编辑器只是简略带过3、重点讲如何在Unity3D中编写质量更高的代码4、以游戏实例引导你开发游戏5、各种图片、音频资源格式的特点和针对平台的一些优化与选择书的目录可以在...
1 2 3 4 5 ... 20
收藏数 257,571
精华内容 103,028
关键字:

unity