你留意一下你的代码createScene处是否调用create方法。你这个有可能就是没有调用该方法导致没有执行init完成初始化,也就没有调用到加载TMX文件的方法。你可以通过设置调试点到加载TMX文件的方法,很快就能定位出现问题的原因。希望能帮到遇到这个问题的人。
NPC头上显示名字的脚本:(首先对楼上吐槽无力……)# 使用方法:插入到main前即可,之后就会显示每个事件的名字。
# 不想显示名字的NPC直接把名字设置为一个空格就行了。
#
# 附加功能:名字颜色区分:比如一个NPC的名字是 小龙,2 就会用2号颜色(红色)显示
#
# 修改NPC名的方法:$game_map.events[事件ID编号].name =
# 比如某个宝箱,原名宝箱,打开后名为“打开的宝箱”,则
# $game_map.events[@event_id].name = "打开的宝箱" 或者
# $game_map.events[2].name = "打开的宝箱" (假设宝箱是2号事件)
#
# 修改颜色定义:70-88行,131-149行,自己随便改。
#
# 给主角带上名字:192行,改 "" 为 "主角" 或者 $game_party.actors[0].name 即可
#
# 是否显示姓名的开关:157行,开头的井号去掉。则以后39号开关打开的时候才会显示姓名
#
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# 处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
# 在 Game_Map 类的内部使用。
#==============================================================================
class Game_Event <Game_Character
#——————————————————————————————————————
# 用来返回名称
#——————————————————————————————————————
def name
return @event.name
end
def name=(newname)
@event.name = newname
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# 角色显示用脚本。监视 Game_Character 类的实例、
# 自动变化脚本状态。
#==============================================================================
class Sprite_Character <RPG::Sprite
def dispose
super
@namesprite.dispose unless @namesprite.nil?
end
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :character# 角色
#--------------------------------------------------------------------------
# ● 初始化对像
# viewport : 查看端口
# character : 角色 (Game_Character)
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
name = character.name
super(viewport)
@character = character
@namesprite = Sprite.new
@namesprite.bitmap = Bitmap.new(160, 48)
@namesprite.bitmap.font.name = "黑体"
@namesprite.bitmap.font.size = 15
@namesprite.bitmap.font.color.set( 30, 255, 0)
@evname = name
@evname_split = name.split(/,/)[0]
if name[0, 2]=="EV"
@evname_split = " "
end
if name.split(/,/)[1] != nil
case name.split(/,/)[1]
when "0"
@namesprite.bitmap.font.color.set(255, 255, 255)
when "1"
@namesprite.bitmap.font.color.set(120, 120, 120)
when "2"
@namesprite.bitmap.font.color.set(255, 0, 0)
when "3"
@namesprite.bitmap.font.color.set( 30, 255, 0)
when "4"
@namesprite.bitmap.font.color.set( 0, 112, 221)
when "5"
@namesprite.bitmap.font.color.set(163, 53, 238)
when "6"
@namesprite.bitmap.font.color.set(247, 102, 0)
when "7"
@namesprite.bitmap.font.color.set(255, 210, 0)
else
@namesprite.bitmap.font.color.set(255, 255, 255)
end
end
if @evname_split != "" and @evname_split != nil
@namesprite.bitmap.draw_text(0, 0, 160, 36, @evname_split, 1)
end
update
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
# 元件 ID、文件名、色相与现在的情况存在差异的情况下
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
# 记忆元件 ID 与文件名、色相
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
# 元件 ID 为有效值的情况下
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
# 元件 ID 为无效值的情况下
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
if @evname != @character.name
@namesprite.bitmap.clear
@evname = @character.name
@evname_split = @character.name.split(/,/)[0]
if @character.name.split(/,/)[1] != nil
case @character.name.split(/,/)[1]
when "0"
@namesprite.bitmap.font.color.set(255, 255, 255)
when "1"
@namesprite.bitmap.font.color.set(120, 120, 120)
when "2"
@namesprite.bitmap.font.color.set(255, 0, 0)
when "3"
@namesprite.bitmap.font.color.set( 30, 255, 0)
when "4"
@namesprite.bitmap.font.color.set( 0, 112, 221)
when "5"
@namesprite.bitmap.font.color.set(163, 53, 238)
when "6"
@namesprite.bitmap.font.color.set(255, 128, 0)
when "7"
@namesprite.bitmap.font.color.set(229, 204, 128)
else
@namesprite.bitmap.font.color.set(255, 255, 255)
end
end
if @evname_split != "" and @evname_split != nil
@namesprite.bitmap.draw_text(0, 0, 160, 36, @evname_split, 1)
end
end
@namesprite.x = self.x-80
@namesprite.y = self.y-self.oy-24
# @namesprite.visible = $game_switches[1]
# 设置可视状态
self.visible = (not @character.transparent)
# 图形是角色的情况下
if @tile_id == 0
# 设置传送目标的矩形
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
# 设置脚本的坐标
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
# 设置不透明度、合成方式、茂密
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
# 动画
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理主角的类。事件启动的判定、以及地图的滚动等功能。
# 本类的实例请参考 $game_player。
#==============================================================================
class Game_Player <Game_Character
def name
return $game_party.actors[0].name
end
end
一、创建瓦片地图
1.在 Hierarchy 窗口中,右键单击一个空白位置。
2.从上下文菜单中选择 2D Object >Tilemap
此时将在 Hierarchy 窗口中创建两个游戏对象:
<1> Grid(网格):顾名思义,场景中的网格可用于将游戏对象均匀地放置在网格单元格中
<2>Tilemap(瓦片地图):此瓦片地图是网格的子游戏对象。瓦片地图由瓦片 (Tiles) 组成;在本教程中,可将瓦片视为特殊精灵
二:创建新瓦片
1、在 Project 窗口中,选择 Assets >Art
2、创建文件夹 Tiles 存放瓦片
3、在Tiles下创建瓦片
右键 >Crete >Tile 并命名(例如:FirstTile)
4、在 Inspector 中,可以看到瓦片资源的属性。此处包括一个 Sprite 字段(瓦片将绘制此精灵)
三、将精灵分配给FirstTile
1、选中FirstTile
2、在 Inspector 中,单击 Sprite 属性右侧的圈选按钮。此时将打开一个对话窗口,其中会显示你的项目的所有精灵。选择刚保存在 Project 中的一个精灵。(或者精灵直接拖过去)
四:将FirstTile 添加到你的面板
Unity 使用面板 (Palette) 来定义在瓦片地图的哪个单元格中渲染哪个瓦片。你的瓦片地图就像是画布,瓦片则像是你的颜色。你可以将瓦片置于面板上,这样你就可以拾取瓦片并将瓦片应用于瓦片地图。
要将 FirstTile 添加到面板,请执行以下 *** 作:
1、选择 Window >2D >Tile palette。此时将打开 Tile Palette 窗口:
2、选择 Create New Palette。随即将出现一个窗口,允许你设置面板 (给面板起名字)Create
3、将新面板保存在 Tile 文件夹中(Art 下的文件夹,用于存放面板)
4、将瓦片(FirstTile)拖到面板中心(你想放置的位置,自己排版)
5、你的瓦片将显示在面板的网格中。单击瓦片以将其选中
6、从 Tile Palette 顶部的工具栏中,选择画笔工具
现在,可以在 Scene 视图内的网格上进行绘制
此时需要调整精灵适应网络(这样就要求出图像素要一致)
五:瓦片精灵适应网格
1、将Grid游戏对象, x he y 设置为 1 (每个单元格的宽度 he 高 度为 1 个单位)
2、在 Project 窗口中,选择瓦片精灵
“Pixels per Unit”通过定义 1 个单位内应该设置的像素数量来告知 Unity 如何设置精灵的大小。 这个根据图的大小来确定
五:瓦片集制作
1、点击大图可以看到此时就一张精灵, 比如下面一张大图本来下面就一个精灵 现在 分成了9个 可以看到他的像素本来是 192 * 192
(这样作图时需要注意的,比如我们一个单位是64像素,图集要是整数倍)
把本来的 SpriteMode 从 Single 改为 Multiple .
点击Sprite Editor (d出下面小图)
进行拆分 .在 Inspector 中,单击 Sprite Editor 按钮 > 单击 Slice > 使用下拉菜单将 Type 字段设置为 Grid by Cell Count > 将 Column &Row 值(包括 C 和 R)设置为 3 >单击 Slice > 单击 Apply
这样就将这张大图 3 * 3 分成了9个
九:将精灵分配给瓦片
Window >2D >Title Palette >d出面板 >右侧的图集拖到面板
调整绘制顺序 (调整地图渲染顺序)
Order in Layer 调整层级 越大 渲染越往后 比如 地图是 -10 玩家是 0 玩家就可以在地图上走,否则地图就盖住了玩家。
此时需要确定的就是 一个单图的大小 图集是确定单图n倍
特别注意的是,unity 创建的一定要是 2D项目,不可以是3D
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)