2015-02-06 11:03:18 yuxikuo_1 阅读数 2960
  • Unity3D棋盘游戏实战入门——2D智力拼图

    本课程使用Unity3d开发软件和C#编程语言,从零开始逐步完成一个2D拼图游戏项目。在本课程中,你可以了解并学习到游戏工程的创建和文件结构的维护、Unity3D的射线检测机制、插值插件Itween的使用、游戏数据的离线保存,并初步了解Unity3D的粒子系统和动画系统。

    811 人正在学习 去看看 伍晓波

1、ActionScript:存放flash的ActionScript脚本,当游戏被导出为Flash格式的时候,这的脚本会自动替换为指定的c#脚本

2、Editor:存放编辑器脚本

3、Gizmos:通常存放TIF格式的图片,在OnDrawGizmos函数内使用Gizmos.DrawIcon将其画为图标在场景中显示

4、Plugins/Android:存放Android插件,包括.jar和XML文件

5、Plugins/iOS:存放iOS插件,包括.a和.m,.mm文件等

6、Resource:存放使用Resource.Load()动态读取的资源,他可以是图片、模型等不同类型的资源

7、Standard Assets:标准Unity资源包

8、StreamingAssets:独立存放到文件系统中得媒体文件,如视频

9、WebPlayerTemplates:存放网页游戏模板,其中的每个模板均以一个自定义名称的子目录形式存放

2016-11-28 14:37:40 u013628121 阅读数 8177
  • Unity3D棋盘游戏实战入门——2D智力拼图

    本课程使用Unity3d开发软件和C#编程语言,从零开始逐步完成一个2D拼图游戏项目。在本课程中,你可以了解并学习到游戏工程的创建和文件结构的维护、Unity3D的射线检测机制、插值插件Itween的使用、游戏数据的离线保存,并初步了解Unity3D的粒子系统和动画系统。

    811 人正在学习 去看看 伍晓波

unity3d 规范默认 目录结构


Assets

    * 3rd-Party (第三方插件),C#写的第三方插件

    * Animations (动画相关的部分)

    * Audio (音效相关的部分)

        * Music (音乐相关的部分)

        * SFX (特效音乐相关的部分)

    * Materials (材质相关的部分)

    * Models (模型相关的部分)

    * Plugins (u3d默认目录 ) (插件)不是C#语言写一些插件和库,比如java\js\C++,u3d默认目录,u3d是C#编译器,其他语言只有这个目录才能识别

    * Prefabs (预制件)

    * Resources (u3d默认目录 ) 资源,需要动态加载的资源放在这里,打包时在这个文件夹里的所有文件(不管有没有使用)都会全部打包,

所以不需要的文件不要放里面.并且打包时会压缩文件减小体积

    * Textures (纹理相关的部分)

    * Images (美术原始图片)

    * Sandbox (沙盒)

    * Scenes (场景)

    * Levels (关卡)

    * Other (其他)

    * Scripts (脚本)

    * Editor (u3d默认目录) 编辑器相关的内容,不参与打包

    * Shaders (着色器)

    * Common ()放原始资料,比如图集打包资料

    * Fonts (字体)

    * StreamingAssets (u3d默认目录 )StreamingBander放的目录,压缩文件,流失读取文件,生成app,

    * WebplayerTemplates(u3d默认目录 ) 忽略脚本目录

    * StreamingAssets (u3d默认目录),这个文件夹下的资源也会全都打包在.apk或者.ipa 它和Resources的区别是,

                    Resources会压缩文件,但是它不会压缩原封不动的打包进去。

                    并且它是一个只读的文件夹,就是程序运行时只能读 不能写。

                    它在各个平台下的路径是不同的,不过你可以用Application.streamingAssetsPath 它会根据当前的平台选择对应的路径。

                    有些游戏为了让所有的资源全部使用assetbundle,会把一些初始的assetbundle放在StreamingAssets目录下,

                    运行程序的时候在把这些assetbundle拷贝在Application.persistentDataPath目录下,

                    如果这些assetbundle有更新的话,那么下载到新的assetbundle在把Application.persistentDataPath目录下原有的覆盖掉。

                    因为Application.persistentDataPath目录是应用程序的沙盒目录,所以打包之前是没有这个目录的,

                    直到应用程序在手机上安装完毕才有这个目录。StreamingAssets目录下的资源都是不压缩的,所以它比较大会占空间,

                    比如你的应用装在手机上会占用100M的容量,那么你又在StreamingAssets放了一个100M的assetbundle,那么此时在装在手机上就会在200M的容量。

    * Gizmos (u3d默认目录)它可以在Scene视图里给某个坐标绘制一个icon。它的好处是可以传一个Vecotor3 作为图片显示的位置。

                参数2就是图片的名子,当然这个图片必须放在Gizmos文件夹下面。

                void OnDrawGizmos(){ Gizmos.DrawIcon(transform.position,"0.png",true);}

                如果只想挂在某个游戏对象身上,那么在Inspecotr里面就可以直接设置。。

                这里还是要说说OnDrawGizmos()方法,只要脚本继承了MonoBehaviour后,并且在编辑模式下就会每一帧都执行它。

                发布的游戏肯定就不会执行了,它只能用于在scene视图中绘制一些小物件。比如要做摄像机轨迹,

                那么肯定是要在Scene视图中做一个预览的线,那么用Gizmos.DrawLine 和Gizmos.DrawFrustum就再好不过了。

2014-07-29 19:39:49 HeBiReChenAi 阅读数 3176
  • Unity3D棋盘游戏实战入门——2D智力拼图

    本课程使用Unity3d开发软件和C#编程语言,从零开始逐步完成一个2D拼图游戏项目。在本课程中,你可以了解并学习到游戏工程的创建和文件结构的维护、Unity3D的射线检测机制、插值插件Itween的使用、游戏数据的离线保存,并初步了解Unity3D的粒子系统和动画系统。

    811 人正在学习 去看看 伍晓波
声音渐变,主要是一个声音结构体,一个迭代器,然后去使用它,很方便。
using UnityEngine;
using System.Collections;

//声音结构点//
public struct AudioNode
{
     public AudioSource audioSource;          //声音池//
     public int volumeAdd;                    //声音变化,+1则递增,-1则递减//
     public float durationTime;               //渐变时间//
    
     //初始化构造函数//
     public AudioNode(GameObject obj,AudioClip m_clip,float m_initVolume,int m_volumeAdd,float m_durationTime)
     {
          this.audioSource =obj.AddComponent<AudioSource>();
          this.audioSource.playOnAwake = false;
          this.audioSource.volume = m_initVolume;
          this.audioSource.clip = m_clip;
          this.volumeAdd = m_volumeAdd;
          this.durationTime = m_durationTime;
     }
}

public class SoundControl : MonoBehaviour
{
    
     public AudioClip clip;
     void Start ()
     {
          AudioNode audioNode=new AudioNode(gameObject,clip,0,1,4);
          StartCoroutine("AudioSourceVolume",audioNode);
     }
     #endregion
    
     //声音渐变迭代器//
     IEnumerator AudioSourceVolume(AudioNode audioNode)
     {
          float initVolume = audioNode.audioSource.volume;
          float preTime = 1.0f/audioNode.durationTime;
          if (!audioNode.audioSource.isPlaying) audioNode.audioSource.Play();
          while(true)
          {
               initVolume += audioNode.volumeAdd * Time.deltaTime *preTime;
               if (initVolume >1 || initVolume <0)
               {
                    initVolume = Mathf.Clamp01(initVolume);
                    audioNode.audioSource.volume = initVolume;
                    if (initVolume ==0) audioNode.audioSource.Stop();
                    break;
               }else
               {
                    audioNode.audioSource.volume = initVolume;
               }
               yield return 1;
          }
     }
}

只要结构体设为共有,调用的脚本中协商迭代器就可以调用了。。。。
2019-02-26 18:50:28 ww1351646544 阅读数 275
  • Unity3D棋盘游戏实战入门——2D智力拼图

    本课程使用Unity3d开发软件和C#编程语言,从零开始逐步完成一个2D拼图游戏项目。在本课程中,你可以了解并学习到游戏工程的创建和文件结构的维护、Unity3D的射线检测机制、插值插件Itween的使用、游戏数据的离线保存,并初步了解Unity3D的粒子系统和动画系统。

    811 人正在学习 去看看 伍晓波

Array 数组

1.存储在连续内存上
2.元素都是同类或衍生类
3.可以通过索引下标访问
4.不能改变数组长度,只能覆盖

ArrayList 数组列表

1.无需指定长度
2.元素非泛型,均为object,需要装箱拆箱操作
3.可以通过下标来访问

List 列表

1.无需要指定长度
2.元素是泛型,无需拆箱装箱
3.可能过下标来访问

LinkedList 链表

1.循序取决于头文件指向
2.是一个双向链表
3.可以插入到最前,最后,某个元素之前或之后
4.可以更好的管理元素之间的前后关系
5.元素是泛型,无需拆箱装箱

Queue 队列

1.只能在前端删除,在后端插入
2.是一个先进先出线性表
3.元素是泛型,无需拆箱装箱
4.可以有重复值

Stack 堆栈

1.只允许在表的一端进行增删
2.是一个后进行出的线性表
3.元素是泛型,无需拆箱装箱

Hash Table哈希表

1.是一个松散结构
2.只记录压缩后的索引
3.由于索引被压缩可能会出现哈希冲突
4.非泛型表,需要拆箱装箱
5.可变长度

Dictionary 字典

1.必须先指定索引和类型
2.元素是泛型,无需拆箱装箱
3.可变长度
4.键值存在栈中,索引内容在堆中

2017-08-14 23:58:20 qq_26440221 阅读数 2039
  • Unity3D棋盘游戏实战入门——2D智力拼图

    本课程使用Unity3d开发软件和C#编程语言,从零开始逐步完成一个2D拼图游戏项目。在本课程中,你可以了解并学习到游戏工程的创建和文件结构的维护、Unity3D的射线检测机制、插值插件Itween的使用、游戏数据的离线保存,并初步了解Unity3D的粒子系统和动画系统。

    811 人正在学习 去看看 伍晓波

工程结构

工程结构是约束整个unity3d工程的文件存放位置。想想你有一个大型的项目文件柜,而这些文件就好比一堆项目资料,对比一个整理完善、有序存放的文件柜,和一个文件互相交错,存放无序的文件柜,我相信你一定会选择第一个,因为第二个对于你来说就是噩梦般的存在。废话不多说,我先上我得工程目录结构

这里写图片描述

如果你能严格按照这个目录,整个工程就可以从始至终保持这个结构而不凌乱。

Assets    #unity3d 默认主目录。
-----Editor #编辑器类存放文件夹。
-----ExternalLibraries #大型完善的外部库文件存放目录,如NGUI等拥有完善的目录结构和大量代码的插件,就存放在此目录。有些人喜欢把NGUI目录直接存放在plugins目录下其实是不太好的,因为plugins文件夹也是要参与编译的。
-----GameAssets #游戏美术资源存放地,因为美术童鞋都是单独工程进行编辑,然后导出unitypackage文件,这个文件最大的坏处就是在导入时可能会污染目录结构,导致每次导入文件,均要手动调整目录,而单独命名一个GameAssets目录,再把这个目录复制到美术童鞋的工程里面,让美术童鞋编辑玩资源后,只把需要导出的资源放入这个目录存放妥当,再导出unitypackage文件。
------------|Materials  #材质球。
------------|Models   #模型,如果动画系统采用animation,把动画文件和原始模型存放在同一目录下,如果采用animtor,因为动画重用的关系,动画文件需单独存放。
------------|Animations #用新的Mecanim时,存放动画文件。
------------|Prefabs  #预制体,所有不需要Resource.Load加载的预制体,均存放在此。
------------|Sounds  #声音文件
------------|Textures  #贴图文件
------------|UI     #一些UI文件,如Atlas等。
------Plugins  #dll和一些纯代码插件。
------Resources  #所有需要通过Resource.Load加载的资源都存放于此
------Scenes    #scenes文件存放目录
------Scripts    #代码目录
------StreamingAssets

Unity中的脚本都是继承自MonoBehaviour。

一、基础函数:

创建脚本就默认的update、start方法:(这些官方的文档都是有的)

Start:Update函数第一次运行前调用,一般用于游戏对象的初始化。比如GetComPonent之类。
Update:每帧调用;一般用于更新场景和状态,物理相关不建议在此处处理。
Awake:脚本实例对象被创建时调用,也可以用于游戏对象的初始化,但是Awake是在所有脚本的Start之前执行。
FixedUpdate:固定间隔执行,一般用于物理状态更新。
LateUpdate:每帧执行,在Update之后。一般和摄像机有关的状态放在这里处理。

现在我来简单测试下:我在场景中添加了两个Cube,分别添加了Script1,Script2,下面是执行log,可以看到Awake是在所有脚本之前调用的。

这里写图片描述

二、事件响应函数:

MonoBehaviour中的事件响应函数都是已On开头的,比如:鼠标事件,脚本激活、销毁,碰撞等。
OnApplicationFocus:当玩家获得或失去焦点时发送给所有游戏物体。可以作为协同程序,在函数中使用yield语句即可
OnApplicationPause:当玩家暂停时发送到所有的游戏物体。可以作为协同程序,在函数中使用yield语句即可。
OnApplicationQuit:在应用退出之前发送给所有的游戏物体。当用户停止运行模式时在编辑器中调用。当web被关闭时在网络播放器中被调用。
OnBecameInvisible:当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。
OnBecameVisible:当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。
OnCollisionEnter:当此collider/rigidbody与另一个rigidbody/collider接触时调用。
OnCollisionExit:当此collider/rigidbody停止触发另一个rigidbody/collider时。
OnCollisionStay:当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
OnConnectedToServer:当你成功连接到服务器时,在客户端调用。
OnDisconnectedFromServer:失去连接或从服务器端断开时在客户端调用。
OnFailedToConnectToMasterServer:当连接主服务器出现问题时在客户端或服务器端调用。
OnControllerColliderHit:在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。
OnDestroy:脚本销毁时调用。
OnDisable:对象禁用或者取消激活时调用。
OnEnable:对象变为可用或激活状态时此函数被调用。
OnDrawGizmosSelected:如果想在物体被选中时绘制gizmos,执行这个函数。
OnGUI:渲染和处理GUI事件时调用。
OnJointBreak:当附在同一对象上的关节被断开时调用。
OnLevelWasLoaded:一个新关卡被载入时此函数被调用。
OnMouseDown、OnMouseDrag、OnMouseEnter、OnMouseExit、OnMouseOver、OnMouseUp:鼠标事件。
OnMouseUpAsButton:只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。
OnTriggerEnter:当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。
OnTriggerExit:当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。
OnTriggerStay:当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

三、默认组件

组件对应的变量名是组件名的小写。
Transform:对象的位置,角度,缩放。变量名:transform
Rigidbody:刚体属性。
Render:渲染物体模型。
Light:灯光属性。
Camera:相机属性。
Collider:碰撞体属性。
Animation:动画属性。
Audio:声音属性。

四、组件获取函数

获取组件的方法由于比较耗时,所以如果你在update修改transform的话,一般可以先在Start中获取这个组件的引用,然后在update中使用引用去修改。
比如获取上面例子cube1的script1脚本:
[c-sharp]Script1 spt1 = GetComponent( );[/c-sharp]
下面是获取组件的函数:
GetComponent:获取组件。
GetComponents:获取组件列表。
GetComponentInChildren:返回Type类型组件,在GameObject或它的任何子物体使用深度优先搜索,仅返回激活的组件。
GetComponentsInChildren:在GameObject或任何它的子物体,返回全部Type类型组件。

五、获取场景中的游戏对象

同样和获取组件一样,该方法比较费时,一般在Start中获取引用。
[c-sharp]
GameObject cube1 = GameObject.Find(“Cube1”);
GameObject cube1 = GameObject.FindWithTag(“tag_cube1”);
[/c-sharp]
除了上面的方法,也可以使用public对象,直接使用面板拖拽赋值。

没有更多推荐了,返回首页