之前跟着老师后面边学边做了一个屠龙战机项目,在这个项目中,主要用到的技术,在这里总结一下(本次项目的脚本语言用的是JS):

1、  如果想在场景中导入一个声音文件,则需要在脚本中添加一个变量,如在脚本顶部添加:var menusound:AudioClip;在JS中,默认的变量是public,所以将脚本文件添加到对象后,会有sound这个选项,然后将所需要的文件拖到这里。

2、创建一个按钮,先定义一个变量,用于说明按钮的位置

 private var newGanePosition:Rect=new Rect(10,10,10);

同样添加一个变量,用于接收按钮的皮肤:

var myskin:GUISkin;

然后在OnGUI事件中创建按钮:

function OnGUI(){

                     GUI.Skin=mySkin;

                     GUI.Button(newGamePosition,””,GUI.Skin.GetStyle(“newGameButton”));

}

如果想通过点击按钮,发生事件,如进入下一个场景,则需要将上面的函数改为:

function OnGUI(){
GUI.Skin=mySkin; if(GUI.Button(newGamePosition,””,GUI.Skin.GetStyle(“newGameButton”))){
//DoSomething
        }
}

3、如果想在点击一个按钮,让它播放按钮声音后再进入其他场景,则需要添加一个时间推迟脚本

function waitSeconds(){

        yield WaitTimesForSecond(menusound.length);  

        Application.LoadLevel(1);     //1是场景的顺序,从0开始计数

}

  

4、如果想在游戏的主界面添加一个背景音乐,并且让它一直播放,不会因为进入其它场景而终止,则添加一个脚本:

function Awake(){      //Awake的执行顺序第一,其次是Start

              DontDestroyOnLoad(transform.gameObject);

}

  

5、如果想使一个物体一直向下运动,可以通过Update函数实现:

 var speed:float=1;
function Update(){
transform.translate(Vector3.down*speed*Time.deltaTime); }

  

6、碰撞检测的条件:对于双方需要检测碰撞的物体,至少其中一个必须是刚体,如果该刚体是运动的,那么在双方都没有设置碰撞题的isTrigger属性的时候,双方都可以通过OnCollisionEnter代码检测碰撞;如果至少一个碰撞体isTrigger被设置,则双方都可以通过OnTriggerEnter代码检测碰撞。

function OnTriggerEnter(other:Collider){

                     //DoSomething

}

function OnCollisionEnter(other:Collision){

       //DoSomething

}

  

7、对于一组动画,就我所知可以通过在3D max或maya中做好的模型导入,也可以在Unity3D中做,当然对于爆炸的特效,可以通过一组动作图片,然后通过函数显示出来,在此次项目中,添加了一个aniSprite脚本文件:

//以下的变量值都可以在unity中设置,根据具体情况而定

              var isUsed=false;

              var timeLength:float=0;        //动画的时间长度

              var columnSize:int=1;     //图片中的总列数

              var rowSize:int=1;                //图片中的总行数

              var colFrameStart:int=0;

              var totalFrames:int=0;           //动画的总帧数

              var framePerSeconds:int=0;   //每秒播放的帧数

              var totalTime:float=1.0;        //动画的总时间

              private var index:int=0;

              private var myTime:float=0;

              private var size:Vector2;        //一般是用Vector3,此次项目是2D游戏

              private var offset:Vector2;     //偏移量

              private var myTimeLength:float=0;

              private var isPlay=true;         //设置动画是否播放

              private var myTimeLength:float=0;

              function Update(){

                     if(isUsed){

                                        isUsed=aniSprite(columnSize,rowSize,colFrameStart,rowFrameStart,totalFrames,framePerSeconds,totalTime);

                            myTimeLength+=Time.deltaTime;

                            if(timeLength!=0 && myTimeLength>timeLength)

                                   Destroy(gameObject);

}

}

function aniSprite(columnSize:int,rowSize:int,colFrameStart:int,rowFrameStart:int,totalFrames:int,framesPerSeconds:int,totalTime:float){

              myTIme+=Time.delatTime;

              if(myTime>totalTime && totalTime!=0){

                     isPlay=false;

                     myTime=0;

                     return isPlay;

}

index=myTime*(framesPerSeconds-1);

index=index%totalFrames;

var v:int=index%rowSize;

var u:int=index%columnSize;

size=new Vector2(1.0/columnSize,1.0/rowSIze);

offset=new Vector2((u+colFrameStart)*size.x,1.0-size.y-(v+rowFrameStart)*size.y);

renderer.material.mainTextureScale=size;

renderer.material.mainTextureOffset=offset;

return ture;

}

  

8、实例化爆炸对象

var explosion:GameObject;

Instantiate(explosion,transform.position,transform.rotation);

  

9、对于指定发生碰撞的对象,可以对该对象添加一个tag属性

Function OnTriggerEnter(other:collider){   

    if(other.transform.tag==”enemy”){

       Destroy(other.gameObject);     //销毁其它对象

    }
}

  

10、更换对象材质的方法

var blockhouse:Material;

transform.renderer.material=blockHouse;

  

11、使物体失去碰撞体功能

 transform.collider.eabled=false;

  

12、在游戏中,一般都会用代码操作敌人自动攻击玩家,而这里就需要判断玩家的位置,根据敌人和玩家的相对位置,来攻击玩家。在屠龙战机项目中,也用到了这个功能,具体代码实现如下:

var sound:AudioClip;                          //敌人死后的声音

var yellowProjectile:GameObject;        //敌人的子弹

var playerTransform:Transform;          //玩家对象

private var shoot:Boolean=false;          //设置敌人是否射击玩家

private var myTime:float=0.0;             //敌人射击玩家的间隔时间

private var angle:float=0.0;                 //敌人和玩家之间的角度

function Update(){

  if(transform.position.y-playerTransform.y)<0){

       shoot=false;                  //如果玩家的位置已经飞过敌人的位置,在敌人上面

  }

  angle=Mathf.Rad2Deg*Math.Atan((transform.position.y-playerTransform.position.y)/(transform.position.x-playerTransform.position.x));

  if(shoot && transform.position.y<2.5){

       if(angle<0){

       angle=90-Mathf.Abs(angle);

  }else{

       angle=-90+Mathf.Abs(angle);

  }

  transform.LocalEulerAngles=new Vector(0,0,angle);

  Instantiate(yellowProjectile,transform.position,transform.rotation);

  AudioSource.PlayClipAtPoint(sound,new Vecor3(0,0,-10));    //这里是摄像机的位置

  myTime=0;

  shoot=false;

  }

  myTime+=deltaTime;

  if(myTime>2){

       shoot=true;

  }
}

  

13、游戏中操作玩家的位置的重要的,Unity3D中,如果想将对象的位置设置为随鼠标移动而改变

function Update(){

              transform.position=Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,Input.mousePosition.z));

}

  

14、改变刚体速度,要用到Rigidbody.Velocity这个属性

var projectile:Rigidbody;

var myProjectile:Ridigbody=Instantiate(projectile,transform.position,transform.rotation);

myProjectile.Velocity=transform.TransformDirection(new Vector3(0,-2,0);

  

15、实现血条

其实血条的实现就是通过代码,改变血条材料的长短,当血条的长度为零时,就结束游戏。改变血条的长短,就是改变x轴值,y轴和z轴的值不需要改变。比如在此次游戏中:

function Update()
{
if(GameState.myCount<=20) //这里的GameState相当于一个静态类,myCount是它的静态成员
    {
        transform.localScale=new Vector3(0.72*(1-GameState.myCount/20),5,1); }
}

Unity3D屠龙战机项目总结的更多相关文章

  1. unity3d android导出项目编译Multiple dex files define Lcom/unity3d/player/UnityPlayerActivity

    unity3d版本: 4.1.2 在导出android工程进行编译时,发现出现Multiple dex files define Lcom/unity3d/player/UnityPlayerActi ...

  2. 【Unity3d】【项目学习心得】从资源server下载资源(一)

    项目里面的很多资源都是从资源server载入的,这样子能够减小client的包大小. 所以我们须要一个专门的类来管理下载资源. 资源分非常多类型,如:json表,txt文件,image文件,二进制文件 ...

  3. unity3d导出xcode项目使用afnetworking 3框架导致_kUTTagClassMIMEType 问题解决方案

    http://blog.csdn.net/huayu_huayu/article/details/51781953  (参考链接) Undefined symbols for architecture ...

  4. ios -Unity3D的EasyAR集成到已经有项目中。

    近期 在做AR这一块,用EasyAR集成到iOS端,由于现在到项目已经上线,下一版本要做一个AR功能,于是迫于需求需要,自己研究和翻阅读好多集成到资料. 通过整理分出几个重要到模块,其中在这里指出Xc ...

  5. Android项目实战(三十九):Android集成Unity3D项目(图文详解)

    需求: Unity3D 一般用于做游戏 而且是跨平台的.原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作. ...

  6. 跟我从零基础学习Unity3D开发--NGUI入门基础

    英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...

  7. Unity3D外包

    北京动点软件长年承接Unity3D(U3D外包)项目,我们制作各类型VR/AR游戏,虚拟现实,增强现实项目! 品质保证,售后完备. 联系请加QQ:372900288  电话:13911652504 我 ...

  8. Unity3D编程学习分享

    学习地址:http://www.ixueyun.com/lessons/detail-lessonId-692.html 一.课程概述: 以前大部分3D游戏出现在pc和ps.XBox等专业游戏主机上, ...

  9. UNITY3D与iOS交互解决方案

    原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...

随机推荐

  1. CoreAnimation4-隐式动画和显式动画

    事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在. 当你改变CA ...

  2. 网页快照 - C#实现

    /// <summary> /// 图片类型枚举 /// </summary> public enum ImageType { GIF = , JPG = , PNG = } ...

  3. linux命令行抓取网页快照-(xvfb+CutyCapt)

    目的: 在一台没有安装X-server的Debian服务器上实现命令行抓取网页快照 软件: xvfb(在命令行下实现对X-server的模拟,渲染图形进行缓存)-在没有安装X-Server的环境下提供 ...

  4. Javascript面试题浅析

    分享几道JavaScript相关的面试题. 字符串反转 这这里提供了两种解题思路.如果各位读者还有其他的思路,可以分享交流! 第一方法: function reverse(str){ var sp = ...

  5. 数据库(学习整理)----5--Oracle常用的组函数

    其他: 1.oracle中下标是从1开始的,Java下标是从0开始的 函数分类: 日期函数 字符函数 转换函数 数学函数 系统函数 ---在当前月份上面:增加.减少月份 select add_mont ...

  6. 读书笔记之 - javascript 设计模式 - 装饰者模式

    本章讨论的是一种为对象增添特性的技术,它并不使用创建新子类这种手段. 装饰者模式可以透明地把对象包装在具有同样接口的另一对象之中,这样一来,你可以给一些方法添加一些行为,然后将方法调用传递给原始对象. ...

  7. windows phone 之笔势

    笔势: Windows Phone 用户可以使用触控笔势与他们的手机进行交互.触控笔势被定义为用户在触摸屏上使用单个或多个手指发起的运动.Windows Phone 上支持的控件都可以识别笔势.这些控 ...

  8. jQuery EasyUI 1.4.4 Combobox无法检索中文输入的问题

    在项目里使用了EasyUI的Combobox,当ComboBox的item是英文时,都能正常检索出对应项,但是如果使用中文输入法输入几个字母然后通过按shift键输入时,奇怪的事情发生了,combob ...

  9. C#连接、访问MySQL数据库

    一.准备工具 visual stuido(本示例使用visual studio 2010) MySql.Data.dll mysql_installer_community_V5.6.21.1_set ...

  10. Netty启动分析

    基于Netty-3.2.5 先看一段Netty的服务端代码: import java.net.InetSocketAddress; import java.util.concurrent.Execut ...