您的位置:首页 > 移动开发 > Unity3D

Unity3d5.1简单配置及粒子效果的删除

2015-08-11 14:45 681 查看
因为工作需要,跑过来学习unity3d了,其实c++ 转c#还是较为简单的,基本上的语法差不多,只是一些格式写法的差别。同时看了下《太空射击》的视频教程作为入门,从仅有的经历来看,真是被unity的可视化界面和代码的封装性震惊了,全程代码量少的可怜,从获取键盘鼠标输入,到物理引擎各种方法和回调,全部都有封装好了的函数给你使用,只需要拖拖拉拉就把对象赋值和绑定,碰撞检测更是方便,逻辑上也没有cocos2dx的那么强烈的架构化,这点确实比cocos2dx要省去不少时间,甚至策划也能更方便的修改和操作。当然,对于屏幕适配和移植方面的暂时没有看。

一、unity5.1的简单配置

从安装和配置上来看,就能感觉到unity3d较cocos2dx的便捷,cocos2dx光一个环境配置就给多少人带来难题:jdk,python2.7,vs,光建项目就得花去很大心思,之后安卓的sdk,ant,ndk等等一些列跨度太过庞大,当年2.1自学的时候,捣鼓打包apk好几天对着都搞不定,3.0出了之后就好弄多了,可惜版本更新太快,2.1-2.2-3.0,马上又要出4的样子了。

配置过程如下:

1、安装unity5.1,到处都有,安装也没啥步骤,直接下一步。

2、安装项目导入vs的插件:https://visualstudiogallery.msdn.microsoft.com/20b80b8c-659b-45ef-96c1-437828fe7cf2

3、专业版破解:Unity 4.x Pro Patch,地址:http://download.csdn.net/detail/qq_16682993/8740523

4、安装vs2013:这个也不需要重复,其实也可以用自带的,但是不那么智能罢了。

5、下载锚点对齐脚本插件(随意):http://download.csdn.net/detail/zy19940906/8990405

over!(附注使用方法:把脚本直接拖进目录下,ctr+[ :锚点跟随到节点放大缩小和对齐 和 ctr +]:节点跟随到锚点放大缩小和对齐)。

二、粒子效果的智能删除

在看太空射击视频,发现里边的粒子效果都没人理会并且陨石也一直存在,运行时在对象层里能看到一排的粒子对象,并且越积越多,可能是习惯使然,总觉得不舒服,不删掉在大点儿的话也会造成内存问题,所以想了些小办法来解决粒子删除问题。

一开始的时候想粒子系统里边应该会有自带的参数,应该有播放后自动释放的参数,然而并未找到,所以只能用代码了:

方法一、

给粒子模型绑定一个脚本,名字随意,代码较简单,运行后添加destory函数,附带一个时间参数,即隔多少秒后删除该粒子。

代码如下:

using UnityEngine; using System.Collections;

public class removeSe : MonoBehaviour  {

// Use this for initialization
void Start () {
Destroy(gameObject,2);//两秒后删除粒子系统
}
void Update () { }
}


方法二、

通过粒子系统的Alive属性判断 ,这里引用博客:/article/7893251.html的一段粒子系统底层代码。

public bool IsAlive()   {
bool withChildren = true;
return this.IsAlive(withChildren);   }   [csharp] view plaincopy public bool IsAlive(bool withChildren)
{
if (withChildren)
{
ParticleSystem[] particleSystems = ParticleSystem.GetParticleSystems(this);
ParticleSystem[] array = particleSystems;
for (int i = 0; i < array.Length; i++)
{
ParticleSystem particleSystem = array[i];
if (particleSystem.Internal_IsAlive())
{
return true;
}
}
return false;
}
}


通过例子系统alive函数的实现可以知道,unity里边可以很容易的获取出该粒子的alive属性,所以我们可以通过该属性来判断何时该消除粒子:

using UnityEngine; using System.Collections;

public class removeSe : MonoBehaviour {

// Use this for initialization
void Start () {
// Destroy(gameObject,2);
}
// Update is called once per frame
void Update ()
{
if( GetComponent<ParticleSystem>().IsAlive() == false)
{
Destroy(gameObject);
}
}
}


这样就不用担心自己的内存问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: