• Unity 学习笔记2


    一:创建粒子效果:
    在Hierarchy面板中,Create->Particle System
    在Assets文件夹内右键->Import Package->Particle导入粒子效果包
    在Hierarchy面板中选中Particle System后,可在Inspectors面板中修改粒子系统的相关参数,来达到不同的粒子效果:

    Max Particle:最大生成粒子数量
    Prewarm(预热):勾选后,在载入场景之前粒子系统就可以预先生成
    Start Lifetime:表示每个粒子可持续的时间,单位:秒
    Start Speed:表示粒子运动的速度
    Start Size:粒子的大小

    1.Emission:
    Rate:粒子密度
    2.shape(形状):
    在这里可以调节粒子系统的形状,大小,这里的形状大小指的是整个粒子系统在场景中所覆盖的面积。还可以勾选Random Direction项让粒子的生成方向成随机形式。
    3.Size over Lifetime:
    调整粒子在生成到消失时间段内大小的变化。
    4.Renderer(渲染器):
    调节粒子的材质,可直接用之前导入的粒子效果包来设置。

    二:脚本:
    1.Start()函数只在游戏开始时执行一次
    Update()函数在每一帧执行一次
    2.随机出生点函数
    在Hierarchy面板新建一个GameObject,将它放到场景中,一个GameObject代表一个出生点,选中新建的GameObject,在Inspector面板中点击Tag项,tag是一个标签性的属性,默认的没有出生点,所以点击Add tag,在Element0选项后命名即可新建一个tag了。在语言编辑器中可以通过tag名来控制出生点。
    实现方法是:随机生成一个数字,通过这个数字来在定义好出生点tag的地方选出出生点,其实就是那些空的GameObject,然后将这个出生点的坐标赋值给我们的Player就可以了。

    unity生命周期:

    渲染

    • OnPreCull: 在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
    • OnBecameVisible/OnBecameInvisible: 在对象对于相机可见/不可见时调用此函数。
    • OnWillRenderObject: 如果对象可见,则为每个相机调用一次此函数。
    • OnPreRender: 在相机开始渲染场景之前调用此函数。
    • OnRenderObject: 在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
    • OnPostRender: 在相机完成场景渲染后调用此函数。
    • OnRenderImage(仅限专业版): 在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
    • OnGUI: 在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
    • OnDrawGizmos 用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。

    参考资料:

    1.Execution Order of Event Functions http://docs.unity3d.com/Manual/ExecutionOrder.html
    2.游戏蛮牛Unity 用户文档1.0 http://www.unitymanual.com/m/Manual/index.htm

    三:创建HUD显示界面(显示角色反馈信息):
    1.创建一个空的GameObject来装载HUD素材和脚本;
    2.导入素材(tga,jpg等),选中素材,在Inspector面板的Texturetype选项选GUI,点击Apply确认更改;
    3.选中新建GameObject,Add Component->GUITexture,这一步将GameObject中导入的素材锁定在主相机上;
    4.在GUITexture选项的Texture中,可以看到刚刚设定为GUI的素材了,选中一个后就可以在主相机上看到导入的素材了。在Transform选项中,可以调整素材在画面中的位置,在pixel Inset选项中,可以调整素材的大小(??);
    5.写更换素材的脚本:
    Public Texture2D[] HUD_texture; //在这里创建了一个数组用来存放我们要导入的素材,数组的大小可以在Inspector面板进行设置,设置完size后,可以分别为数组的每一个成员导入素材,真是太方便了。
    Public GUITexture HUDTexture;//创建一个GUITexture的变量,他可以给GUI的Texture赋值,赋值对象可以在Inspector面板进行设置,我们设置为刚刚建好的Add了GUI的GameObject就可以了。
    剩下的只用按一定规则给GUITexture.texture赋值为HUD_texture中的一个就可以了。

    这样可以实现血条,物品等信息,碉堡了。

    四:创建物品拾取系统:
    1.导入可拾取物体
    2.写脚本:
    Viod OnTriggerEnter(Collider player)//unity3d自带的的函数,两个有碰撞器的物
    体相撞时才触发
    {
    Play.gameObject.SendMessage("XXXXXX");//XXXXX代表你想触发的函数,比
    如上面写的HUD更换素材函数等等。
    Destroy(this.gameOject);//删除物体
    }
    3.注意,要给物体加碰撞器,并且选上trigger项。

    注:Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。

    其实就是接受物理作用的组件

    碰撞体(Collider)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下:
    碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
    其实就是计算碰撞后的物理量。如下函数:

    碰撞信息检测:
    1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo )当进入碰撞器
    2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
    3.MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 当逗留碰撞器
    isTrigger:是个布尔选项。选择以后即成为触发器(但实际是个虚物体),只有在特定的触发条件下才能触发,如下几个函数:
    触发信息检测:
    1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器
    2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
    3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器

    碰撞事件产生条件:得出的结论似乎是如果碰撞双方只有一个有刚体,那么那个刚体一定要处于激活状态下才会有碰撞事件发生。两个对象要么都收到碰撞事件,要么都收到触发事件,不会出现一个收到触发事件,一个收到碰撞事件的情况

    触发事件产生条件:

    1、必须都要有碰撞器组件(Collider),其实上面的碰撞事件同样也需要这个前提条件。

    2、必须有一个物体带刚体组件,并且处于运动状体中(包括主动运动去撞击别人和在运动过程中被别人撞击)。

    3、两个碰撞器中至少有一个开启了IsTrigger。

  • 相关阅读:
    HTTP状态码
    NSData NSDate NSString NSArray NSDictionary 相互转换
    NSDictionary to jsonString || 对象转json格式
    git 上传本地文件到github
    NSAssert用法
    深入理解GCD(一)
    ug-Assertion failure in [MyClass layoutSublayersOfLayer:]
    构建之法阅读笔记01
    学习进度
    四则运算程序
  • 原文地址:https://www.cnblogs.com/liyichong/p/4756558.html
Copyright © 2020-2023  润新知