u3d5第一人称射击游戏(C#脚本)完整版并在iOS9.3系统上真机运行

参考资料:《Unity3D\2D手机游戏开发》(第二版) +   百度

涉及U3D的功能有:摄像机控制、物理、动画、智能寻路等。


开发工具:Unity3D5.3.4,VS2015,VMplayer12+MacOSX10.11+XCode7.3(我是Windos笔记本用的是苹果虚拟机,MAC真机不需要虚拟机,直接在appstore下载XCode最新版本就可以了,MAC最新版+Xcode最新版本可以直接真机调试运行)+OS9.3系统iphone

说一下U3D,想要在ios上调试的话就要在下载的时候勾选ios的插件,如果你之前没勾选的话就需要重新下载,可以直接勾选ios其他的都不勾选,我就是重新下载的unity。

制作的是完整版的游戏,包括开始游戏界面,排行榜界面,游戏介绍界面。。。


游戏制作中遇到的问题(下文都将一一解答):

1.场景切换问题:因为是自学,参考书上面只说了游戏的制作,并没有场景的切换,也就是开始游戏,游戏介绍的场景界面这些

2.怎么编译到iOS

3.VS2015(C#脚本编辑器) 使用30天后无法正常使用

4.Win7系统里面调好的尺寸在iphone上并不可用,后来我根据iphone改变的尺寸,下面我的截图是win7上unity的截图,所以尺寸大家不要介意


游戏中遇到的未解决问题

.我游戏里面用到的摇杆是EasyTouch3插件,然后添加摇杆后,start游戏可以正常使用摇杆,但是一旦我选择重新加载游戏或者退出游戏再开始游戏时,就会报错MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it.Your script should either check if it is null or you should not destroy the object.

这一问题困扰了我很多天,我也在网上找了好多资料,但是最终没有找到解决的办法,我试过的解决办法如下:

1.将摇杆放到Player游戏体下层不可行。
2.删除控制摇杆脚本里面的OnEnable方法不可行。
3.添加OnDestory方法不可行
    void OnDestory() {
        EasyJoystick.On_JoystickMove -= OnJoystickMove;
        EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd;
    }
4.将两个摇杆的脚本都添加到Player游戏体上不可行
5.在GameManager中,点击重新开始或退出游戏时destory摇杆游戏体
Can't destroy Transform component of 'Joystick'. If you want to destroy the game object, please call 'Destroy' on the game object instead. Destroying the transform component is not allowed.
不可行!!
6.添加脚本为不可删除的cantdestory(this);不可行!

所以我放弃了解决这个bug。




完整游戏工程http://download.csdn.net/detail/v7595v/9493631   需要下载积分5分解压后直接用unity打开

游戏资源http://download.csdn.net/detail/v7595v/9493622  需要下载积分1分解压后导入工程 Assets->Import New Assets

U3D摇杆插件 EasyTouch下载地址 http://download.csdn.net/detail/v7595v/9504461



下面开始教程

首先在win7系统使用U3D制作游戏,之后再编译成iOS,导入虚拟机中iPhone真机调试

1开始游戏的场景:

打开Unity3D新建一个工程,包括起名字和存储地址等等,不多说

我的开始游戏的场景是这样的

背景图案+3个button按钮

背景图案:1在场景里面新建一个Plane      GameObject->3DObject->Plane    选中Plane,在Inspector下的Transform设置Reset(养成良好的习惯,新建一个GameObject就将其Transform,Reset一下,然后在调整你想要的位置)

    2 然后在project新建一个材质球(project里面的文件最好统一分类,脚本文件夹,材质球图片文件夹等等),将材质球的Shader选为LegacyShader->Diffuse

    3引入想要做背景的图片右键project下面保存想要保存图片的文件夹(文件夹自己创建或是默认文件夹,但是要有良好的分类习惯)

    4然后选中图片,拖入到材质球的select框里面,或者直接在材质球select想要的图片

    5选中之前创建的Plane,将材质球拖到Plane上面,这样Plane就能显示我们想要的图片了

接下来调整摄像机,让其对准Plane,如下图,将MainCamera的Projection设置成Oithograhpic(这是将摄像机垂直向下)然后调整摄像机的位置,高度,适当调整Plane的尺寸,然后在Game界面浏览一下,像我这样子就可以了。

接下来就是用脚本控制显示游戏名称,和开始游戏、游戏介绍、排行榜的三个button了

在场景里新建一个空游戏体GameObject->CreateEmpty然后在project新建一个C#脚本命名GameManagerStart,将脚本拖到空游戏体上(默认的名字就是GameObject,我没改名,所以上图显示的GameObject就是我创建的空游戏体),接下来就是理解脚本了。

using UnityEngine;
using System.Collections;

public class GameManagerStart : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    void OnGUI() {
        GUI.skin.label.fontSize = 240;									//设置label的字体大小
        GUI.skin.label.alignment = TextAnchor.UpperCenter;						//设置label的对齐方式
        GUI.Label(new Rect(0, 20, Screen.width, 1000), "<color=red>密  室  惊  魂</color>");		//游戏名称的label
	GUI.skin.button.fontSize = 100;
        if (GUI.Button(new Rect(Screen.width * 0.5f - 200, Screen.height * 0.3f, 400, 140), "开始闯关")) {
            Application.LoadLevel("demo");
        }
        if (GUI.Button(new Rect(Screen.width * 0.5f - 200, Screen.height * 0.5f, 400, 140), "游戏介绍")) {
            Application.LoadLevel("Instruction");
        }
        if (GUI.Button(new Rect(Screen.width * 0.5f - 200, Screen.height * 0.7f, 400, 140), "最高得分")) {
            Application.LoadLevel("paihangbang");
        }
    }
}


 脚本解析: 
using UnityEngine;
using System.Collections;
这两行代码引入两个类 Start()Updata()函数都是C#脚本开始便自带的函数

Start()是程序开始的时候执行一次,Updata()是每一帧都执行,在此脚本中我都没有用到这两个函数

OnGUI()函数是显示UI的函数,也是每一帧都执行的函数

if (GUI.Button(new Rect(Screen.width * 0.5f - 200, Screen.height * 0.3f, 400, 140), "开始闯关")) {
            Application.LoadLevel("demo");
        }
这段代码是直接创建一个button,并设置button的rect和名称,如果点击button后执行加载场景demo的操作,3个button对应三个场景,现在还没有其它的场景,可以先将加载场景的代码注释掉,等创建了其它场景再解开注释。

运行一下就可以看到和我上面图片一样的开始游戏界面效果了,保存场景,起名为start。File->SaveScene,保存到project里面,就是刚开始创建游戏的位置,找到project里面你想保存的文件夹,或新建一个文件夹专门保存游戏场景。下图是我保存场景的地方



2游戏介绍场景,最高得分场景

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值