SceneKit框架详细解析(二) —— 基于SceneKit的简单游戏示例的实现(一)

版本记录

版本号 时间
V1.0 2018.10.20 星期六

前言

SceneKit使用高级场景描述创建3D游戏并将3D内容添加到应用程序。 轻松添加动画,物理模拟,粒子效果和逼真的基于物理性的渲染。接下来这几篇我们就详细的解析一下这个框架。感兴趣的看下面几篇文章。
1. SceneKit框架详细解析(一) —— 基本概览(一)

开始

首先看一下游戏的类似实现效果

本教程系列将向您展示如何使用Apple的内置3D游戏框架Scene Kit创建您的第一款游戏。

你认为制作3D游戏比制作经典的2D游戏要复杂得多。 3D游戏因众所周知难以编程而闻名,通常涉及大量复杂的数学运算。

然而,由于Apple的Scene Kit的问世,情况已经不再如此了! Scene Kit的简单性让初学者可以在短时间内创建简单时尚的游戏。

在这个教程系列中,您将创建第一个Scene Kit游戏:几何战斗机。这是一款水果忍者风格的游戏,彩色几何形状被抛向空中,为您的纯粹破坏性放纵。

在本系列的第一部分中,您只需创建一个空白项目即可获得良好的起点,这对于喜欢了解每一步的人来说都是有益的。

下载本教程的入门包; 它有一些你以后需要的资源。

打开Xcode并从主菜单中选择File> New> Project。 如果您想成为Xcode忍者,请使用快捷命令:⇧⌘N

选择iOS/Application/Game模板,然后单击Next继续:

现在,您需要提供有关项目的一些基本详细信息。 输入GeometryFighter作为产品名称,选择Swift for LanguageSceneKit for Game TechnologyUniversal for Devices,取消选中unit tests,然后单击Next

最后一步是选择保存项目的位置。 选择一个目录并选择Create;Xcode将发挥其魔力并生成您的项目。


Building the SceneKit Game Project - 构建SceneKit游戏工程

现在您已经从模板生成了SceneKit游戏项目,现在是时候看到它了!

首先,从工具栏中选择iPhone 6模拟器,然后按顶部的Play按钮来构建和运行项目。 Xcode ninjas只需按⌘R

您将看到模拟器启动,您的第一个3D SceneKit游戏将出现。 您只需在不同方向绕屏幕旋转即可在游戏中旋转3D太空飞船的视图以更改摄像机角度:

很酷,对吗? 如果你想花一点时间在你的座位上做一些快乐的舞蹈,那也没关系。 完成后,继续学习本教程的其余部分。


Challenge - 挑战

这是你第一次迷你挑战的时候了! 在继续之前,浏览游戏模板项目。 密切关注项目导航器中的以下关键文件和文件夹:

  • art.scnassets
  • ship.scn
  • GameViewController.swift
  • Assets.xcassets
  • LaunchScreen.storyboard

您可能无法理解一切是如何工作的,但要试着弄清楚您认为每个文件可能会做什么。 因为您将在下一部分中清理项目,所以在它们还在的时候看看文件和文件夹。


Cleaning up the Game Project - 清理游戏项目

为了从干净的SceneKit游戏项目开始,您需要删除一些组件。 别担心;您将从头开始重新创建所有内容,这样您就可以更好地了解它的工作原理以及它的来源。

1. Removing Unwanted Folders - 删除不需要的文件夹

要删除的第一件事是art.scnassets文件夹。 右键单击该文件夹,选择Delete,然后单击Move to Trash

注意:目前,请不要过于担心art.scnassets文件夹的用途。 只需知道Xcode SceneKit游戏模板会自动为您生成art.scnassets

2. Cleaning up Main Project Files - 清理主项目文件

GameViewController.swift文件是游戏的关键组成部分;这就是你的所有游戏逻辑和代码都将存在的地方。 在开始编码之前,最好清除为您创建的Xcode SceneKit游戏模板的所有代码。

用以下内容替换GameViewController.swift的内容:

import UIKit
import SceneKit

class GameViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  override var shouldAutorotate: Bool {
    return true
  }

  override var prefersStatusBarHidden: Bool {
    return true
  }
}

样板代码产生了宇宙飞船;你用空的石板替换了那个代码。 shouldAutorotate()处理设备旋转,prefersStatusBarHidden()隐藏状态栏。


Setting up SceneKit - 设置SceneKit

之前,您了解了SceneKit如何使用场景图在屏幕上显示内容。 SCNScene类代表一个场景;您在SCNView实例的屏幕上显示场景。 您的下一个任务是在项目中设置场景及其对应的视图。

1. Setting up the Project View - 设置项目视图

将以下属性添加到GameViewController.swift,就在viewDidLoad()上方:

func setupView() {
  scnView = self.view as! SCNView
}

在这里,您将self.view转换为SCNView并将其存储在scnView属性中,这样您就不必在每次需要引用视图时重新构建它。 请注意,该视图已在Main.storyboard中配置为SCNView

注意:SCNView是macOS中NSView的子类,也是iOS中UIView的子类。 因此,无论您是使用macOS还是iOS,相同的SCNView都会提供专门针对SceneKit内容的视图。

2. Setting up the Project Scene - 设置项目场景

是时候设置你的场景了。 将以下属性添加到GameViewController.swift,就在scnView属性下面:

var scnScene: SCNScene!

在这里,您为游戏中的SCNScene声明了一个属性。 您将添加灯光,相机,几何体和粒子发射器等组件作为此场景的子项。

现在,在setupView()下面添加以下方法:

func setupScene() {
  scnScene = SCNScene()
  scnView.scene = scnScene
}

此代码创建一个新的SCNScene空白实例并将其存储在scnScene中;然后将此空白场景设置为scnView要使用的场景。

3. Adding Finishing Touches

现在您已经创建了设置SCNViewSCNScene实例的方法,您需要在初始化步骤中从某个地方调用它们。 一个好地方就是在视图完成加载之后。

在调用super之后,将以下行添加到viewDidLoad()

setupView()
setupScene()

现在是时候为你的游戏添加一个应用程序图标了。 看一下Resources文件夹;你会发现各种尺寸的应用程序图标,你可以用于这个项目。

要将图像设置为游戏的图标,请打开Assets.xcassets文件夹,选择AppIcon条目并将每个文件从Resources文件夹拖到适当的位置。 完成后,您的AppIcon面板应如下所示:

构建并运行您的项目,你可以看到下面!

后记

本篇主要讲述了基于SceneKit的简单游戏示例的实现,感兴趣的给个赞或者关注~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容