#じゃべめも

じゃべめも棚卸し

CKEditor

テキストエディタの共同編集機能はどのように実装されているのか

WYSIWYGエディタについて、CAP定理のうちA+Pを取る時のノウハウだそうな。 CKEditorのサービスを使えば、GoogleDocみたいな共同編集機能を実装できるそうな。 Overview - CKEditor 5 Documentation

CAP定理

CAP定理 - Wikipedia CRDT (Conflict-free Replicated Data Type)を15分で説明してみる - Qiita

分散システム(プロセス同士がネットワークを介して協調するというシステム)において

  • Partition Tolerance: ネットワークが故障しても
  • Consistency: データの整合性をもって
  • Availability: 読み書きが常にできる

というウマイ話は、どうやっても無理という定理

具体例

  • C+A:ネットワークが故障しない限り、整合性をもって読み書きができるシステム 一般的な関係データベース、LDAPNFS など
  • A+P:ネットワークが故障しても、読み書きができる Amazon SimpleDBApache Cassandra - Wikipedia(NoSQL系) 、DNS や HTTP キャッシュなども該当
  • C+P:ネットワークが故障しても一貫性を保つ(ただし使えなくなる) Apache HBase - Wikipedia

Unityのリソース読み込み

今更誰も教えてくれない、Unityにおけるリソース読み込みについての基礎知識 - Qiita

Unityにおけるリソース読み込みのバリエーション

  • Resources.Load
    • 簡易な方法
  • StreamingAssetsからのロード
    • リソースを無変換で保持してくれる
  • AssetDatabase.LoadAssetAtPath
    • Resourcesフォルダ以外の物も読み込める(エディタ専用)
  • AssetBundle.LoadAsset
    • ネットワークに置ける

スマホアクションゲーム雑感

スマホゲーをあれこれやってみて

スマホでアクションゲームの可能性を探して

書く流れ: 一つ一つ書いてる頭の良さは持ち合わせていないので、おおよそカテゴリに分けて書く

縦スクロール

  • Wall Kickers 三角飛びで上に向かうランゲーム。 空中ジャンプで向きを反転できる。 たまに横スクロール面が出てきて、気分をリフレッシュできる。
  • Tower Fortress - Apps on Google Play まっとうなアクションゲーム。これがやたら難しい。 左右移動とジャンプとショットの4アクション。あと壁蹴り。 横にしか撃てないのに敵が上から攻めてくる理不尽。
  • Once Upon a Tower - Apps on Google Play フリック移動のミスタードリラー。 敵への攻撃もフリック。 回避にフリック入力を使うのはよく見かけるけれど、このゲームは全操作がフリックなので、反射的に入力するのが難しい。3面に行けない
  • Cavefall - Apps on Google Play 落下しながら左右の壁を渡るランゲーム 壁を飛び移る時に攻撃判定が出る感じ。もっぱら壁に生えてるトゲを避けるゲーム。 また、空中でジャンプすると向きを変えられる。 反射神経ゲーだけど操作はタップだけなので結構遊べる。 感心したのがクリア条件がランダムで出てくるノートを集めることで、 下手でもひたすらコンテニューしていればステージが解放されていく。やさしい
  • 塔をかける少女~かけあがり殲滅アクション - Apps on Google Play Cavefallを丁度上下反転して、ゲーム速度を遅くした感じ。 対面の壁へジャンプ中にタップするとその場でショットが打てる。アクションというより変則STGみたいなゲーム感。 ショットを打ち続けると息切れして操作が利かなくなるので、頃合いを見て切り上げるHit&Awayなセンスが要る

横スクロール

  • Metal Shooter: Run and Gun - Apps on Google Play スマホ向け2Dアクションとしてはいい線行っている気がする。 全体的にゲームテンポが遅くて、敵の3Way弾でもう難しく感じる難易度、オート射撃もあってかなり遊びやすい。 このゲームテンポは、敵の弾が自機より遅いことに由来しているのかも。 強化要素があって、お金をつかって強化すると敵が倒しやすくなる。 ただ、ライフがやたら低いので、意外とよく死ぬ。1ステージが長くて、クリアできていないのも・・・・ 最近、狭い足場を飛び移るパートが出てきたので、難易度自体は結構高いのかもしれない
  • Yの冒険R - Apps on Google Play 死にゲー。なんというか、コンテニュー時に広告を見せるため、ゲーセン時代の難易度調整が生き返っていることを思わせた。
  • Shadow of Death: Dark Knight Stickman Fighting - Apps on Google Play ソシャゲRPGのゲームパートを横スクロールにした感じ。メイプルとかラテールみたい。 でもこの内容なら指一本で遊びたい気はする。
  • レッドサイレン:宇宙防衛(Red Siren: Space Defense) - Google Play のアプリ アクションなのかはちょっと不明。プレイヤーはジョイスティックによる移動と特殊武器の利用を操作、基本攻撃攻撃は自動照準。 武器が自動照準なので、レベル上げのモチベーションが上がる。MOBAやMORPGと同じジャンルかもしれない 目標が拠点を守る事なので、あまり強くないと、右へ左へと忙しく飛び回る事になる。
  • Sword Of Xolan - Apps on Google Play 妙に遊びやすい近接戦アクションゲー。メトロイドヴァニア、らしい。 敵の挙動に学びが多すぎてもうちょっと深堀したいレベル。 ただ、収集要素?の捕まった人が居る隠し部屋がノーヒントで、探すには片っ端から壁に向かって体当たりを繰り返すのが微妙
  • Super Cat Tales 2: Cute Cat Adventure - Apps on Google Play 左右移動ボタンだけで、ジャンプ、壁登り、三角飛びを実装してるスマホ操作極地みたいなゲーム。猫も可愛い。 まだ操作に慣れてないので、難しい動きしようとするとたどたどしいが、ジャンプからの三角飛びをキメると楽しい。 敵のギミックが未知数なので、もうちょっと深堀したい。
  • Ninja Arashi - Apps on Google Play Shadow of Dethと同じ影絵系デザインのアクションゲーム。しかしやたらステージの絵作りが奇麗で、Shadow of Dethが遊べなくなる。3~4ステージで色んな背景オブジェクトを惜しみなく出してくるのが恐ろしい。 ゲームの内容的には、スピード感の割にやたら難易度が低く感じる。

横ランゲーム

  • Super Dashy Knight - Google Play のアプリ 左サイドタップでジャンプ、右サイドタップでダッシュ攻撃。 思い切ったボタンの大きさに関心する。 ただ、壁に横から当たると一発ミスなのがシビアすぎて難しい あるいは壁と壁の間隔が狭すぎるか。。。 どうも糸通しゲームのニュアンスを感じる
  • 消滅都市2 公式サイト ランゲームフォーマットのパズドラ。 ステージにいろんな色の玉が落ちてるのでたくさん拾うと攻撃できる。
  • NinjAwesome - Apps on Google Play 左サイドでジャンプ、右サイドでショット、下フリックでスライディングや落下攻撃 こっちは壁にぶつかっても死なないけど、その分地形が複雑。 ショットにゲージが設定されていて、撃ちまくれないのが悲しい。 あとスライディングでしか壊せない壁の、スライディング入力タイミングが分からん なんかこう惜しい感じ
  • ダッシュでバトル - Apps on Google Play RPG要素のあるランゲーム。RPG要素は繰り返しプレイを要求するだけの要素に思える。 グリップなどのステータスの意味が分かればまた違うのかもしれない。
  • 新チャリ走DX - Google Play のアプリ 個人的にランゲームといえばチャリ走のイメージ。ずいぶん垢抜けたなぁ
  • WonderCat Adventures - Apps on Google Play ランゲームなのか少し悩む。 プレイヤーはジャンプしかできないけど、基本足場が動くので、結果的にランゲーム。 ドンキーのトロッコ面みたいな。 おかげで、動く足場みたいな、ジャンプするタイミングを計るギミックが使えて、普通のランゲームより遊びやすい。 あと、ガイド用クリスタルの配置がなんか独特。

見下ろし

MOBA

  • #コンパス 戦闘摂理解析システム | スマホゲーム 3DアクションのMOBA やたら操作しにくいけど、相手を射程に入れたら自動攻撃ってシステムは好きかもしれない MAP構成がMOBAというよりFPSっぽい 攻撃スキルがガチャなので、P2Wの色を感じる。マッチングでなんとかなるのかしら
  • Mobile Legends: Bang Bang - Apps on Google Play 現状勝ててるからなんだけど、スマホMOBAに可能性を感じる程度には面白い 装備購入順を事前に設定したり、自動ターゲットの優先順位やマップの広さやら、良い塩梅にスマホ向けにアレンジされてる気がする。 レッドサイレンでもそうだけど、自動攻撃システムは可能性感じる

ミニゲーム

これは・・・記録する意味あるのだろうか

左右タップゲー

プレイ感がらいが~らいが~♪を思い出すので好き - Stick Fight: Shadow Warrior - Apps on Google Play - Dragon Storm - Apps on Google Play

ジャンプゲー

BeatStomperがRezっぽい演出でカッコイイ。基本タイミングを計るゲームなので、優しくなったランゲームみたいなプレイ感 - Beat Stomper - Apps on Google Play - Jelly Jump - Apps on Google Play - Helix Jump - Apps on Google Play

パーリンノイズ

地形生成に使えそうななだらかなノイズ Perlin Noise フラクタル地形自動生成

バリューノイズ

ランダムな値の間を補完して作るノイズ 基本的に、線形補完に渡す割合の値を、こねくり回してる感じ

線形補完

aまで移動後、a-b間のx%を追加で移動

def liner(a, b, x)
  a + x * (b - a)
end

コサイン補完

線形補完に使っているx%を、コサインを使って作る。 ラジアンが0〜PIの時、コサインは-1〜1なので、1から引いて0〜2にする。 これを半分にして距離の割合(x%)を作る

def cosine(a, b, x)
  ft = x * Math::PI # 0〜1を0〜PIのラジアンへ変換
  f = (1 - Math.cos(ft)) * 0.5
  a + f * (b - a)
end

パーリン先生の補完(?)

ノイズの話 - Pentanium Blog? 補完の割合をf(t) = 6.0*t^5-15*t^4+10*t^3に食わせると いい感じに滑らかになる魔法

def parlin_interpolate(a, b, x)
  # 
  f = x * x * x * (10.0 + x * (-15.0 + 6.0 * t))
  a + f * (b - a)

Rubyで模様生成機

tracpath.com

ランダムで模様作るよ

前提:

gem install geo_pattern --no-ri --no-rdoc

gem install color

require 'webrick'
require 'geo_pattern'

random = Random.new(20)
server = WEBrick::HTTPServer.new({:BindAddress => '0.0.0.0', :Port => 3000})

trap(:INT){server.shutdown}

server.mount_proc('/') do |req, res|
  range = 0.0..1.0
  col = Color::RGB.from_fraction( random.rand(range), random.rand(range), random.rand(range) )
  pattern = GeoPattern.generate(col.html, patterns: :plaid, base_color: col.html)

  content = "<div style=\"background-image: #{pattern.to_data_uri};min-height:768px; width:1024px;\">"

  res.body = content
  res.content_length = content.size
  res.content_type = "text/html"
end

server.start

3Dオブジェクトを使った2Dゲームのレイヤー実装

SpriteRendererだけを使う場合は、SortingLayerでレイヤーを実装する。
ただ、MeshRendererにはSortingLayerが無いので、描画順の制御が上手く行かなかったりしてた。

MeshRendererを織り交ぜてレイヤー表現する場合は、カメラを複数使って実装するのが、汎用的で良い

背景カメラ、メインカメラ、前景カメラ、みたいな塩梅

 

オブジェクトをどのカメラに写すのかは、各オブジェクトのLayerとカメラのCullingMaskで操作する

 

*カメラのDepthを変更して、描画順を決定するのだけど、-10とかにすると何故か描画されなくなるので、
最背面を0スタートの正数で実装するのが良さそう

アニメーション管理での親子管理例