Unity3D屠龙战机项目总结
之前跟着老师后面边学边做了一个屠龙战机项目,在这个项目中,主要用到的技术,在这里总结一下(本次项目的脚本语言用的是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屠龙战机项目总结的更多相关文章
- unity3d android导出项目编译Multiple dex files define Lcom/unity3d/player/UnityPlayerActivity
unity3d版本: 4.1.2 在导出android工程进行编译时,发现出现Multiple dex files define Lcom/unity3d/player/UnityPlayerActi ...
- 【Unity3d】【项目学习心得】从资源server下载资源(一)
项目里面的很多资源都是从资源server载入的,这样子能够减小client的包大小. 所以我们须要一个专门的类来管理下载资源. 资源分非常多类型,如:json表,txt文件,image文件,二进制文件 ...
- unity3d导出xcode项目使用afnetworking 3框架导致_kUTTagClassMIMEType 问题解决方案
http://blog.csdn.net/huayu_huayu/article/details/51781953 (参考链接) Undefined symbols for architecture ...
- ios -Unity3D的EasyAR集成到已经有项目中。
近期 在做AR这一块,用EasyAR集成到iOS端,由于现在到项目已经上线,下一版本要做一个AR功能,于是迫于需求需要,自己研究和翻阅读好多集成到资料. 通过整理分出几个重要到模块,其中在这里指出Xc ...
- Android项目实战(三十九):Android集成Unity3D项目(图文详解)
需求: Unity3D 一般用于做游戏 而且是跨平台的.原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作. ...
- 跟我从零基础学习Unity3D开发--NGUI入门基础
英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...
- Unity3D外包
北京动点软件长年承接Unity3D(U3D外包)项目,我们制作各类型VR/AR游戏,虚拟现实,增强现实项目! 品质保证,售后完备. 联系请加QQ:372900288 电话:13911652504 我 ...
- Unity3D编程学习分享
学习地址:http://www.ixueyun.com/lessons/detail-lessonId-692.html 一.课程概述: 以前大部分3D游戏出现在pc和ps.XBox等专业游戏主机上, ...
- UNITY3D与iOS交互解决方案
原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...
随机推荐
- 百度,人人,新浪,腾讯等分享Js代码
<!-- Baidu Button BEGIN --> <div id="bdshare" class=" ...
- pat_1009
1009. 说反话 (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中 ...
- 邓白氏编码(duns number)申请入口的路径-苹果开发者申请必
http://tieba.baidu.com/p/3861287522 这个网址有详细的介绍
- SQL反模式部分内容笔记
规范化: 1, 以一种我们能够理解的方式表达这个世界中的事物; 2, 减少数据冗余存储, 防止异常或者不一致的数据; 3, 支持完整性约束. Tips: 提高数据的性能不在此列表中. 意义: 规范化 ...
- windows 安装maven 环境
1.maven 下载地址: http://maven.apache.org/index.html 2.解压到目录并配置环境变量 M2_HOME D:\maven\maven path ...
- 移动端消除click事件的延迟效果
https://github.com/Plaputta/jquery.event.special.fastclick 用fastclick事件,类似zepto的tap事件,若想去除连点效果,可在外层显 ...
- swift官方文档中的函数闭包是怎么理解的?
官方文档中的16页: numbers.map({ (number: Int) -> Int in let result = * number return result }) 不知道这个怎么用, ...
- centos乱码问题解决
1.yum groupinstall chinese-support 安装中文语言包 2.vi /etc/sysconfig/i18n 修改文件为: LANG="zh_CN.UTF-8&qu ...
- 编译u-boot命令和u-boot常用命令
一.编译u-boot命令 1.配置开发板 #make TQ2440_config 2.编译 #make all 3.交叉编译器是crosstools_3.4.5_softfloat” 使用4.3.3版 ...
- net Core 通过 Ef Core 访问、管理Mysql
net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1. ...