Archive for the ‘Unity3D’ Category

Unity3D模型导入与动画播放

星期二, 三月 5th, 2013 670 views

首先是模型的导入,方法比较多,但常规的是将FBX模型文件拖放至Project视图中即可自动载入,这里以某狼人模型为例,导入后效果如图,材质及动画都已绑定好,详细操作方式和注意事项后面文章会叙述。

下面叙述下如何用代码来对模型的动画播放进行控制

动画都是预先由美术设计好的,并且已经到处为资源文件,通过载入Unity中并与模型绑定即可,如图

animation中列出的即是此模型所绑定的动作动画,最上方的为默认动画设置,勾选下方play automatically 选项后即可自动播放默认动画。

现在我们通过脚本来控制动画播放。以最简单的为例,大家自己举一反三:

1
2
3
4
5
6
7
8
9
10
11
12
using UnityEngine;
using System.Collections;

public class AnimationManger : MonoBehaviour {
   
    // Update is called once per frame
    void Update () {

              gameObject.animation.Play("这里输入动作名 如 run");

    }
}

注意动作名必须和Animation表单中的一致,将脚本绑定到该Gameobject上,运行,效果如同

可以看到狼人开始奔跑起来了。

通过代码量的扩充我们即可达到自由超控动作动画的播放。
本章节仅为动画播放最基础教程,更多高级教程欢迎继续关注。

BeiTown
2013.03.05

Unity3D游戏开发之状态流框架

星期四, 十二月 27th, 2012 1,065 views

在制作Unity游戏时,通常我们可以充分利用其自身的特性来量身定做一系列开发框架。其中我们可以利用Unity中每一帧都会执行脚本中的一些默认函数如Update()、OnGUI()…的特性来设计一种针对Unity的框架——尚且称之为状态流框架。此类型框架在一些项目中都有见到身影,所以这里将其总结一下。

惯例,先上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public enum STATE
{
    START,PAUSE,OVER //枚举 开始,暂停,结束 三种状态
}

private STATE state = START;

void OnGUI()
{
    switch(state){
        case STATE.START:
            //此处添加游戏开始GUI绘制代码
            break;

        case STATE.PAUSE:
            //此处添加游戏暂停GUI绘制代码
            break;

        case STATE.OVER:
            //此处添加游戏结束GUI绘制代码
            break;
       
        default:
            break;
    }
}

我们可以利用枚举于switch结合来进行一个游戏状态的判断,脚本在游戏运行时会不断执行OnGUI()中的代码,此时只需要修改 state 的值即可针对不同的游戏状态绘制出不同的GUI界面。
(更多…)

Unity3D中Animation的初级使用方法及技巧

星期四, 十二月 27th, 2012 6,377 views

这一节说一下如何使用Unity的Animation编辑器控制GameObject的一些动画效果。并简述如何为Animation添加Event事件的方法。
首先,先创建一个Gameobject例子,这里我们还是Create 一个 Cube好了。


(更多…)

Unity3D自动匹配摄像机全方向公告板

星期三, 十二月 19th, 2012 125 views

项目需要在GUI上做一些特效,按道理应该是直接做2D序列帧动画,然后GUI播放的,但是介于美术实现的时间原因,决定用例子来做UI特效,但是目前遇到难题是GUI不能加载粒子。
所以决定运用公告板来虚拟一个UI,脚本代码如下:

FaceToCamera.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using UnityEngine;
using System.Collections;
using System;

public class FaceToCamera : MonoBehaviour
{
    public Camera _camera;
    public float _z = 5.0F;//纵深
    public float _x = 1.0F;//相对中心点x偏移
    public float _y = -1.0F;//相对中心点y偏移

    void Update()
    {

        _camera = Camera.current;//获取当前摄像机
        if (!_camera) return;

        transform.rotation = _camera.transform.rotation;//将对象角度与摄像机统一
        transform.position = _camera.transform.position;//将对象移动到摄像机当前位置

        transform.Translate(Vector3.forward * _z);//纵向推远,否则看不见
        transform.Translate(Vector3.right * _x);
        transform.Translate(Vector3.down * _y);

    }  
}

以上代码即可完成一个自动匹配摄像机的全方向公告板,即便摄像机来回切换Gameobject也会自动匹配上摄像机。唯一缺陷是该公告板不停刷新,可能会在某些极端情况下出现闪烁。

该Cube仅用于测试,此脚本适用于任意的Gameobject。

BeiTown
2012.12.19

Unity3D粒子系统的使用

星期二, 十二月 18th, 2012 305 views

先从最简单的粒子特效做起,点击[GameObject]->[Create Other]->[Particle System],此时在场景中创建一个粒子系统。如下图所示:

选中场景中的粒子系统,点击[Component]->[Effects]->[Legacy Particles]->[Ellipsoid Particle Emitter] 以及 [Particle Animator] 为粒子系统实例分别添加粒子发射器和粒子动画器。
如下图:
(更多…)

在C#调用DLL包(U3D同理)

星期四, 十二月 13th, 2012 70 views

本文简单说明一下如何在Unity3D中调用一个DLL包,用法和C#调用一个DLL包一样,由于比较简单这里就直接上代码吧

1
2
3
4
5
[DllImport("DLLNAME")]//DLLNAME为dll包的名字,不需要加.dll后缀
static extern void TestFun1();//定义一个DLL包中的方法TestFun1
[DllImport("DLLNAME")]
static extern void TestFun2();//定义一个DLL包中的方法TestFun2
...

之后在代码中直接调用TestFun1() 和正常的C#函数一样使用即可
关于DLL包的放置位置,如果是C#中,和.exe执行文件同一个目录下即可
在Unity中应将DLL文件放置在 Assets\Plugins 文件夹下,没有就自己创建一个
就说到这里吧,本文意在分享,欢迎指着交流

BeiTown
2012.12.13

Unity3D几种透明(Alpha)效果实例

星期五, 十一月 30th, 2012 2,506 views

熟悉图像处理的朋友应该知道对一个对象透明效果的处理是通过调整其Alpha值来实现的
在Unity中我们通常通过调整对象的Alpha值来实现一些基础的半透明效果,以下分别针对GameObject以及GUI的来进行说明

先从GameObject的半透明效果:

①新建一个Cube对象

②拖一张图片至Project窗体中

③直接把图片拖拽至于Cube对象上,为Cube附上Texture 效果如下


(更多…)

Unity3D音频播放动态加载组件

星期三, 十一月 28th, 2012 934 views

网上大多数Unity教程只讲述了如何在Unity里播放音乐,如何通过拖拽添加音频文件之后就没有继续了
但在游戏中有时候一个对象需要播放好几种声音,这个时候我们就需要用代码进行控制,教程上推拽给AudioClip赋值的方法就显得不是那么实用了
所以本篇将重点讲述如何在Unity中创建一个最简化的音频播放器,并通过代码进行动态加载与播放

①创建一个Empty对象 点击菜单栏[GameObject]–>Create Empty 命名为Audio

②选取这个空对象 点击菜单栏[Component]–>Audio–>Audio Source 这样就在场景里创建了如图所示的一个喇叭

(更多…)

Unity3D视频播放动态加载组件

星期三, 十一月 21st, 2012 1,195 views

上一篇文章中说到的U3D视频播放的MovieTexture是手动拖拽赋值的,但在游戏中往往需要通过代码改变MovieTexture的值,所以本篇将讲解一下如何进行视频资源的动态加载,即通过代码来对MovieTexture进行赋值。

具体步骤如下(以游戏对象播放为例):

①创建一个Plane对象

②创建一个MovieTexture加载及播放的组件脚本,这里我已经封装好了一个组件,代码如下:
MoviePlayer.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
using System.Collections;

public class MoviePlayer : MonoBehaviour
{
    public MovieTexture Texture;

    public void PlayMovie(string movieName)
    {
        //在这里资源加载,movie是视频的文件名不需要后缀名
        Texture = (MovieTexture)Resources.Load(movieName, typeof(MovieTexture));
        renderer.material.mainTexture = Texture;
        Texture.loop = true;
        Texture.Play();
    }

}

(更多…)

Unity3D视频播放的两种方式

星期二, 十一月 20th, 2012 557 views

Unity支持的播放视频格式包括.mov、.mpg、.mpeg、.mp4、.avi和.asf。下面简单演示一下Unity播放视频的两种方式:

方式1:

在游戏对象中播放,通常是创造一个Plane面对象,MovieTexture类似贴图(Texture)一样附着在游戏对象上,比如做VR时可以在墙上挂电视机之类等等

①首先导入视频资源,直接拖拽入Porject视图,系统自动生成对应的MovieTexture对象,如下图。导入过程比较缓慢,30MB视频大概需要10分钟来处理

这里要注意的一点是在导入视频前电脑上必须装有QuickTime,否则Unity将无法对视频进行解析

因为时间关系还是拿之前就导入好的视频来讲解吧
(更多…)