unity坦克大战(一)
2013-09-04 21:57
183 查看
前面简单的 介绍了unity的一些功能和方法,从现在开始,我们就以一个游戏实例(坦克大战)来讲解unity游戏开发,因为我之前也是看别的教程学习的所以所以可能和别人做法的一样,现在我是一边做一边写,在最后我会把源代码发到网上。
首先我们先简单的介绍一下我们这个坦克大战到最后的一个效果,主角(也就是你)利用键盘和鼠标来控制坦克的移动旋转以及发射炮弹,然后出现若干辆敌对的坦克,开始攻击你,你学要做的就是保护自己并攻击敌对的坦克。现在我们开始编写坦克大战游戏:
打开unity,创建一个地面,(这里为了简化游戏,我们在这里并不做游戏的地形),添加一个Cube改名为Mytank,选中Mytank在菜单栏中找到Component>Physics>Rigidbody,这样我们就给这个方块添加了一个物理属性,它受到重力、摩擦力等,然后我们在Project中创建一个C# script,重命名为Tank_move,打开输入代码:
public float Force=1000;
void Update () {
if (Input.GetKey(KeyCode.W))
{
rigidbody.AddForce(transform.forward*Force);
}
if (Input.GetKey(KeyCode.S))
{
rigidbody.AddForce(transform.forward*-Force);
}
if (Input.GetKey(KeyCode.A))
{
transform.Rotate(Vector3.up*-1);
}
if (Input.GetKey(KeyCode.D))
{
transform.Rotate(Vector3.up*1);
}
}将代码直接拖改Mytank
这样我们得到一个可以控制的方块。
然后就是找一个坦克模,我们可以在http://www.3dcool.net/这里找一些我们学要的模型,虽然对游戏开发来时模型不是很全,但是总比没有要强的多,找到后我们用3dmax或者maya等软件将模型的格式转化成FBX格式,然后将模型(Tank)放到需要放的位置(项目文件asset的摸个文件下)系统会自动将模型导入到资源列表中,然后在资源列表中找到模型并将模型拖入游戏场景,利用菜单上的缩放功能将坦克模型缩放至适合大小,并调整位置最后将坦克模型付给Mytank作为Mytank的一个子物体。
坦克模型已经做好了,现在开始给坦克一个炮弹,先在视图中创建一个球体(当做炮弹),调整大小就这样我们的炮弹有了替代品了,给球体添加一个component>physics>Rigidbody属性,是它具有物理属性,并把mass改为0.01,然后我们在资源管理模块中我们创建一个预物体(这个是用来复制经常用的物体),重命名为bullet,并将之前创建的球体拖到这个bullet形成一个炮弹的预物体,并写一个炮弹在碰撞时自动销毁的脚本:
using UnityEngine;
using System.Collections;
public class bulletxiaohui : MonoBehaviour {
void OnCollisionStay(Collision collisionInfo)
{
Destroy(gameObject);
}
}
这个脚本回事具有这个脚本的物体在发生碰撞时自动销毁,较少一些不必要的运行资源 。
坦克以及炮弹都有了 ,我们就开始实现坦克发射炮弹的效果,首先在坦克的炮筒的正前方放置一个空的GameObject>Create Empty,重命名为bulletposition,它确定炮弹的发射位置,并将其拖到Mytank上成为一个子物体,这样的话会随着Mytank的移动而移动,做好这个以后,我们需要用脚本来实现发射过程,具体代码可以参考下面代码:
using UnityEngine;
using System.Collections;
public class Mytankfire : MonoBehaviour {
public Transform firepostion;//定义一个炮弹位置的变量
pub
9ed7
lic Rigidbody bullets;//定义一个具有物理属性的
public float bulletforce=10;
void Update () {
if(Input.GetKeyDown(KeyCode.Space))
{
Rigidbody bullet;
bullet=(Rigidbody)Instantiate(bullets,firepostion.position,firepostion.rotation);
bullet.rigidbody.AddForce(transform.forward*Time.deltaTime*bulletforce);
}
}
}
写好以后我们将其赋予Mytank,然后我们单击Mytank我们会在Inspector中找到Mytankfire(Script)然后将Mytank的子物体bulletposition拖至Fireposition,以及将炮弹的预物体Mybullet拖至Bullets这样我们就可以实现坦克发射炮弹的效果了。
首先我们先简单的介绍一下我们这个坦克大战到最后的一个效果,主角(也就是你)利用键盘和鼠标来控制坦克的移动旋转以及发射炮弹,然后出现若干辆敌对的坦克,开始攻击你,你学要做的就是保护自己并攻击敌对的坦克。现在我们开始编写坦克大战游戏:
打开unity,创建一个地面,(这里为了简化游戏,我们在这里并不做游戏的地形),添加一个Cube改名为Mytank,选中Mytank在菜单栏中找到Component>Physics>Rigidbody,这样我们就给这个方块添加了一个物理属性,它受到重力、摩擦力等,然后我们在Project中创建一个C# script,重命名为Tank_move,打开输入代码:
public float Force=1000;
void Update () {
if (Input.GetKey(KeyCode.W))
{
rigidbody.AddForce(transform.forward*Force);
}
if (Input.GetKey(KeyCode.S))
{
rigidbody.AddForce(transform.forward*-Force);
}
if (Input.GetKey(KeyCode.A))
{
transform.Rotate(Vector3.up*-1);
}
if (Input.GetKey(KeyCode.D))
{
transform.Rotate(Vector3.up*1);
}
}将代码直接拖改Mytank
这样我们得到一个可以控制的方块。
然后就是找一个坦克模,我们可以在http://www.3dcool.net/这里找一些我们学要的模型,虽然对游戏开发来时模型不是很全,但是总比没有要强的多,找到后我们用3dmax或者maya等软件将模型的格式转化成FBX格式,然后将模型(Tank)放到需要放的位置(项目文件asset的摸个文件下)系统会自动将模型导入到资源列表中,然后在资源列表中找到模型并将模型拖入游戏场景,利用菜单上的缩放功能将坦克模型缩放至适合大小,并调整位置最后将坦克模型付给Mytank作为Mytank的一个子物体。
坦克模型已经做好了,现在开始给坦克一个炮弹,先在视图中创建一个球体(当做炮弹),调整大小就这样我们的炮弹有了替代品了,给球体添加一个component>physics>Rigidbody属性,是它具有物理属性,并把mass改为0.01,然后我们在资源管理模块中我们创建一个预物体(这个是用来复制经常用的物体),重命名为bullet,并将之前创建的球体拖到这个bullet形成一个炮弹的预物体,并写一个炮弹在碰撞时自动销毁的脚本:
using UnityEngine;
using System.Collections;
public class bulletxiaohui : MonoBehaviour {
void OnCollisionStay(Collision collisionInfo)
{
Destroy(gameObject);
}
}
这个脚本回事具有这个脚本的物体在发生碰撞时自动销毁,较少一些不必要的运行资源 。
坦克以及炮弹都有了 ,我们就开始实现坦克发射炮弹的效果,首先在坦克的炮筒的正前方放置一个空的GameObject>Create Empty,重命名为bulletposition,它确定炮弹的发射位置,并将其拖到Mytank上成为一个子物体,这样的话会随着Mytank的移动而移动,做好这个以后,我们需要用脚本来实现发射过程,具体代码可以参考下面代码:
using UnityEngine;
using System.Collections;
public class Mytankfire : MonoBehaviour {
public Transform firepostion;//定义一个炮弹位置的变量
pub
9ed7
lic Rigidbody bullets;//定义一个具有物理属性的
public float bulletforce=10;
void Update () {
if(Input.GetKeyDown(KeyCode.Space))
{
Rigidbody bullet;
bullet=(Rigidbody)Instantiate(bullets,firepostion.position,firepostion.rotation);
bullet.rigidbody.AddForce(transform.forward*Time.deltaTime*bulletforce);
}
}
}
写好以后我们将其赋予Mytank,然后我们单击Mytank我们会在Inspector中找到Mytankfire(Script)然后将Mytank的子物体bulletposition拖至Fireposition,以及将炮弹的预物体Mybullet拖至Bullets这样我们就可以实现坦克发射炮弹的效果了。
相关文章推荐
- 我是运营,我没有假期
- 新一代iPad适配应用之游戏篇
- 用vbscript实现隐藏任务栏图标的脚本
- 用autoit编写第一个脚本(Hello World)
- VBS调用WMI快速关闭IE的脚本
- 收集的ROS防火墙脚本
- JSP脚本漏洞面面观
- 不错的批处理脚本 第一部分
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- 不错的批处理脚本实例代码 第二部分
- 使用脚本和批处理清除电脑中的痕迹的代码第1/2页
- 让你的脚本说话
- 批量文件查找替换功能的vbs脚本
- 脚本 MsAgent组件 微软精灵 揪出系统自带的宠物
- 百度空间备份脚本baidublogbak.vbs代码分析
- 关于脚本调用外部对像和类型库
- 用vbs判断系统补丁的脚本
- hta查看磁盘空间的脚本
- 用VBS脚本实现更换Windows Xp序列号的代码