NinaLabo

個人ゲーム開発者の技術メモ

【Unity】 async/awaitの実行スレッド

C#6.0から async/await が使えるようになり非同期処理がスッキリ書けそうなので興味あるのですが、マルチスレッドとの関連が不明だったので色々試してみました。

実行環境

Unity2018.3.4f1

Taskのasync/await

まずはシンプルなasync/awaitのサンプル。TestAsyncで3秒待っています。

public class TaskTest1 : MonoBehaviour
{
    private async void Start()
    {
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Call Start");
        await TestAsync();
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End Start");
    }

    public async Task TestAsync()
    {
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Call TestAsync");
        await Task.Delay(3000);
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End TestAsync");
    }
}

 結果はこんな感じですべて同じスレッドで実行されます。

f:id:ninagreen:20190203050126p:plain

つまり、async/awaitってただ書くだけでは非同期処理の待ち合わせはされるが、マルチスレッドにはならないということですかね。

UniTaskのasync/await

UniTask(UniRx.Async)でも同様になります。

public class TaskTest2 : MonoBehaviour
{
    private async void Start()
    {
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Call Start");
        await TestAsync2();
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End Start");
    }

    public async UniTask TestAsync2()
    {
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Call TestAsync2");
        await Task.Delay(3000);
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End TestAsync2");
    }
}

 結果、すべて同じスレッドで実行されています。

f:id:ninagreen:20190203052246p:plain

Taskをマルチスレッドで実行

別のスレッドで実行させたい場合は、Task.Runが使えます(マルチスレッドで実行する方法は他にもあるようですが割愛します)

public class TaskTest3 : MonoBehaviour
{
    private async void Start()
    {
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Call Start");
        await TestAsync();
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End Start");
    }

    public async UniTask TestAsync()
    {
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Call TestAsync");

        await Task.Run(() =>
        {
            Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " Start Run");
            Thread.Sleep(3000);
            Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End Run");
        });
        
        Debug.Log("Id: " + Thread.CurrentThread.ManagedThreadId + " End TestAsync");
    }
}

このように書いて実行すると以下のように、Task.Runに渡したActionは別スレッドで実行されます。 

f:id:ninagreen:20190203053208p:plain

 

ただ、ゲームのUI処理やロジック処理でマルチスレッドを使う機会はほとんどないのでこれ以上は追わないことにします。

UniTaskの作者のこの意見には私も同意です。

UniTaskはどちらかというとJavaScript的(シングルスレッドのための非同期の入れ物)に近いです。Taskは、そうした非同期の入れ物に加えてマルチスレッドのためなどなど、とにかく色々なものが詰まりすぎていて、あまりよろしくはない。非同期とマルチスレッドは違います。明確に分けたほうが良いでしょうし、UnityではC# JobSystemを使ったほうが良いので、カジュアルな用途以外(まぁラクですからね)ではマルチスレッドとしてのTaskの出番は少なくなるでしょう。

neue.cc

 

【Unity】MagicaVoxel で Export した obj ファイルのマテリアルが変更できなくなった

先日、Unity2017からUnity2018にアップデートしたのですが、MagicaVoxel で エクスポートした obj ファイルのマテリアルを変更するために、objファイルを選択し、Inspector の Materials タブを選択すると Import Materials 以下の項目が何も出なくなりました。FBXファイルを選択しても同様に出てきません。

f:id:ninagreen:20181107052442p:plain

 

前までは、ここに Location という項目があり、いつもはこれを Use Embedded Materials にして、defaultMat の項目を変更しているのですが... 何も出てきません...

 

よく見るとConsoleタブにエラーが大量に吐き出されていました。

NullReferenceException: Object reference not set to an instance of an object

UnityEditor.PropertyHandler.OnGUILayout (UnityEditor.SerializedProperty property, UnityEngine.GUIContent label, Boolean includeChildren, UnityEngine.GUILayoutOption options) (at /Users/builduser/buildslave/unity/build/Editor/Mono/ScriptAttributeGUI/PropertyHandler.cs:203)

UnityEditor.EditorGUILayout.PropertyField (UnityEditor.SerializedProperty property, UnityEngine.GUIContent label, Boolean includeChildren, UnityEngine.GUILayoutOption options) (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorGUI.cs:8791)

UnityEditor.EditorGUILayout.PropertyField (UnityEditor.SerializedProperty property, UnityEngine.GUIContent label, UnityEngine.GUILayoutOption options) (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorGUI.cs:8780)

UnityEditor.ModelImporterMaterialEditor.DoMaterialsGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/ImportSettings/ModelImporterMaterialEditor.cs:364)

UnityEditor.ModelImporterMaterialEditor.OnInspectorGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/ImportSettings/ModelImporterMaterialEditor.cs:162)

UnityEditor.AssetImporterTabbedEditor.OnInspectorGUI () (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/TabbedEditor.cs:147)

UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editors, Int32 editorIndex, Boolean rebuildOptimizedGUIBlock, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1367)

UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

 

エラー内容を調べてはみたものの、よくわからず...

Unity 2018.2.13f1 だったのですが、Unity のサイトを見ると最新が Unity2018.2.14f1 になっていたので、ダメもとでアップデートしてみたところ、

 

なおりました・・・

 

f:id:ninagreen:20181107053028p:plain

 

Unity 2018.2.14f1のリリースノートを見ましたが、ズバリコレというのは見つからず。関連してそうなのはこれぐらい・・?

 

f:id:ninagreen:20181107053050p:plain

 

このまま解決できなかったらどうしようかとすごく焦りましたが、とにかく直って良かったです。Unity 2018 はまだ細かい不具合がありそうですね。

 

 

【Unity】.vs ファイルを削除する

Unity 2018 にして Visual Studio を使用し始めたところ、ソースコードを修正するたびに以下の差分が出るようになりました。

modified:  [プロジェクトフォルダ]/.vs/rogue2-unity/xs/UserPrefs.xml

modified:  [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/storage.ide

modified:  [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/storage.ide-shm

modified:  [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/storage.ide-wal

 

.gitignore に .vs/ を追加しても消えません。

一度リポジトリに追加してしまうと .gitignore に .vs/ の記述を追加しても、差分を追跡し続けてしまうようです。

stackoverflow.com

 

記事にある通り、

git rm --cached -r [プロジェクトフォルダ]/.vs/

を実行すると

deleted:   [プロジェクトフォルダ]/.vs/rogue2-unity/xs/UserPrefs.xml

deleted:   [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/db.lock

deleted:   [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/storage.ide

deleted:   [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/storage.ide-shm

deleted:   [プロジェクトフォルダ]/.vs/rogue2-unity/xs/sqlite3/storage.ide-wal

と削除差分が出てくるのでコミットしたところ、以降は差分が出なくなりました。

 

 

【Unity】iPhone に実機転送すると development team がないエラー

久しぶりに iPhone に実機転送しようとしたところ、XCode実行時に以下のエラーが出ました。

Signing for "Unity-iPhone" requires a development team. Select a development team in the project editor. (in target 'Unity-iPhone')

 

この記事によれば、Xcode8 からXcodeエディタ上でTeamを設定する必要があるそうです。最近、iOSでリリースしてなかったので知りませんでした...

nn-hokuson.hatenablog.com

 

詳しい説明は上の記事のほうが画像付きで詳しいので、簡単に手順だけまとめます

1. General > Signing > Add Account

2. Apple ID Password を入力して Sign In

3. Team のドロップダウンで自分のアカウントを選択

 

実行すると、別のエラーが2個発生しました。

Your development team has reached the maximum number of registered iPhone devices.

Provisioning profile "iOS Team Provisioning Profile: (Bundle Id)" doesn't include the currently selected device "(端末名)".

 

そういえば、最近 iTunes Connect 開いてないなと思って確認してみたら、

デベロッパプログラムのメンバーシップの有効期限切れ

でした...  

 

 

【Unity】GoogleMobileAds で CocosPods エラー

エラー内容

Unity で広告配信を実装しようと GoogleMobileAds をインストールしたところ、Unityで再生した時にエラーが出るようになりました。プラットフォームが Android の時は問題なかったのですが、iOSにした途端エラーが出るようになりました。広告表示の実装自体はまだだったのに、インストールしただけでエラーになるとは..

 

*実行するとダイアログが2個立ち上がります。

f:id:ninagreen:20181020201536p:plainf:id:ninagreen:20181020202244p:plain

 

*Consoleにもエラーが表示されます

Failed to install CocoaPods for the current user.

 

It will not be possible to install Cocoapods in the generated Xcode project which will result in link errors when building your application.

 

For more information see:

  https://guides.cocoapods.org/using/getting-started.html

 

 

'gem install activesupport -v 4.2.6 --user-install' failed with code (2):

 

 

ERROR:  Could not find a valid gem 'activesupport' (= 4.2.6), here is why:

          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: tlsv1 alert protocol version (https://rubygems.org/specs.4.8.gz)

 

 

UnityEngine.Debug:LogError(Object)

Google.Logger:Log(String, LogLevel)

Google.IOSResolver:Log(String, Boolean, LogLevel)

Google.IOSResolver:LogToDialog(String, Boolean, LogLevel)

Google.<InstallCocoapods>c__AnonStorey0:<>m__1(Int32, CommandItem[], Result, CommandLineDialog)

Google.<RunCommandsAsync>c__AnonStorey2:<>m__2(Result)

GooglePlayServices.ProgressReporter:SignalComplete()

GooglePlayServices.ProgressReporter:CommandLineToolCompletion(Result)

GooglePlayServices.<RunAsync>c__AnonStorey2:<>m__3()

Google.RunOnMainThread:ExecuteNext()

Google.RunOnMainThread:<ExecuteAll>m__6()

Google.RunOnMainThread:RunAction(Action)

Google.RunOnMainThread:ExecuteAll()

UnityEditor.EditorApplication:Internal_CallUpdateFunctions()

 

解決方法

本当に色々試したのですが、最終的には Mac の OS が El Captain だったのを High Sierra にアップデートしました。Xcode も 7.3.1 だったので、Xcode 10.0 にアップデートしました。ついでに、Unity も 2017.3 から 2018.2 にアップデートしました。

 

 

試したこと

1. ターミナルから実行

エラーで表示されているインストールコマンドをターミナルから実行してみました

$ gem install activesupport -v 4.2.6 --user-install

ERROR:  Could not find a valid gem 'activesupport' (= 4.2.6), here is why:

          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: tlsv1 alert protocol version (https://rubygems.org/specs.4.8.gz)

 確かにダイアログで表示されるのと同じエラーが出ました。

 

2. エラー内容の read server hello A を調べる

エラー内容を調べていたら下記のサイトを見つけました。

Bundler: How to troubleshoot RubyGems and Bundler TLS/SSL Issues

 

「Why am I seeing read server hello A?」というタイトルを見て、同じ現象かなと思いました。記事内ではまず診断用のコマンド実行するように書いてありました。

ruby -ropen-uri -e 'eval open("https://git.io/vQhWq").read'

結果は、このように表示されました。

Here's your Ruby and OpenSSL environment:

 

Ruby:           2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]

RubyGems:       2.0.14

Compiled with:  OpenSSL 0.9.8zc 19 Mar 2015

Loaded version: OpenSSL 0.9.8zg 14 July 2015

SSL_CERT_FILE:  /System/Library/OpenSSL/cert.pem

SSL_CERT_DIR:   /System/Library/OpenSSL/certs

 

With that out of the way, let's see if you can connect to rubygems.org...

 

Bundler connection to rubygems.org:       failed    (uninitialized constant Bundler)

RubyGems connection to rubygems.org:      failed    (SSL/TLS protocol version mismatch)

Ruby net/http connection to rubygems.org: failed 

 

Unfortunately, this Ruby can't connect to rubygems.org. 😡

Your Ruby can't connect to rubygems.org because your version of OpenSSL is too old. You'll need to upgrade your OpenSSL install and/or recompile Ruby to use a newer OpenSSL.

よくわからなかったのですが、❌ がついているなら駄目なんだろうと思いました。

 

3. Rubyの更新を試みる

エラーメッセージには、OpenSSLが古いとあったのですが、Rubyが古いんじゃないかと勘違いしました。 また、「Updating RubyGems: You might be able to upgrade RubyGems using the self-update command:」とあったので、Rubyをアップデートすることにしました。

 

下記を実行したのですが、もう最新だよと言われて??となりました。この時点でやめておけばよかったのにこれからどんどん深みにハマります。

$ gem update --system

Latest version currently installed. Aborting.

 

4. 権限がないエラーとの戦い 

色々調べていると、 source オプションを付けて実行している記事を見かけたので試してみました。

$ gem update --system --source http://rubygems.org/

Updating rubygems-update

ERROR:  While executing gem ... (Gem::FilePermissionError)

    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

先ほどとは異なり、権限がないと言われます。

$ sudo gem update --system --source http://rubygems.org/

 sudo を付けて実行してみました。

WARNING: Improper use of the sudo command could lead to data loss

or the deletion of important system files. Please double-check your

typing when using sudo. Type "man sudo" for more information.

 

To proceed, enter your password, or type Ctrl-C to abort.

 

Password:

Updating rubygems-update

Fetching: rubygems-update-2.7.7.gem (100%)

Successfully installed rubygems-update-2.7.7

Parsing documentation for rubygems-update-2.7.7

Installing ri documentation for rubygems-update-2.7.7

Installing darkfish documentation for rubygems-update-2.7.7

Installing RubyGems 2.7.7

YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0).

ERROR:  While executing gem ... (Errno::EPERM)

    Operation not permitted - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/gem

警告は出つつも途中までは実行されます。でも、最後にやっぱり権限がない(Operation not permitted) と言われました。

 

5. ローカルで ruby をセットアップしてみる

もうよくわからなくなってしまい... Rubyをローカルにダウンロードしてインストールすればいいんじゃないかと思ってしまいました。

下記のページから rubygems-2.7.7.zip をダウンロードしてzipを解凍します。

Download RubyGems | RubyGems.org | your community gem host

展開したフォルダへ移動し、以下のコマンドを実行しました。

YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0).

ERROR:  While executing gem ... (Errno::EPERM)

    Operation not permitted - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/gem

結果は同じでした...

6. brew をインストール

エラーの内容を調べていくと、rbenv か RVM を使えば解決できるよ、と書いてありました。

ruby - Installing gem or updating RubyGems fails with permissions error - Stack Overflow

 

rbenv をインストールしようと思ったのですが、rbenv は Homebrew でインストールするため、まずは Homebrew をインストールする必要があるらしいとわかり、以下のコマンドでインストールしました。

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew update

 また、

brew doctor

で、問題がないかをチェックできるらしいので実行してみました。

Warning: You are using macOS 10.11.

We (and Apple) do not provide support for this old version.

You will encounter build failures and other breakages.

Please create pull-requests instead of asking for help on Homebrew's

GitHub, Discourse, Twitter or IRC. As you are running this old version,

you are responsible for resolving any issues you experience.

 

Warning: An outdated version (2.10.1) of Git was detected in your PATH.

Git 2.14.3 or newer is required for Homebrew.

Please upgrade:

  brew install git

 

Warning: Your Xcode (7.3.1) is outdated.

Please update to Xcode 8.2.1 (or delete it).

Xcode can be updated from the App Store.

 mac OS が古いこと、git が古いこと、Xcode が古いことで、warning が出ました。ただ、この時はとりあえず無視して作業を続けました。

7. rbenv をインストール

ようやく rbenv を インストールします。

$ brew install rbenv

 

無事成功したようなので、使えるバージョンを確認します。

$ rbenv install -list

 

2.5.3 が最新のようだったので、インストールしてデフォルト設定にしました。

$ rbenv install 2.5.3

$ rbenv global 2.5.3

 

パスを通します。~/.bashrc ファイルに以下を記述します。

export PATH=$HOME/.rbenv/bin:$PATH

eval "$(rbenv init -)"

以下のコマンドで反映させます。

$ source ~/.bashrc

7. rbenv で activesupport をインストール

最初にエラーになったコマンドもう1度、rbenv経由で実行します。

$ rbenv exec gem install activesupport -v 4.2.6 --user-install

無事インストールできたように見えました。成功したように見えました。

(あまりにホッとしてログを記録し忘れました)

 

8. Unity で再生

Unity に戻り、アプリを再生して実行してみます。当然問題ないと思ってましたが... なんと結果は変わらず、同じエラーが出ました。

開発環境を更新すると使えないソフトが出てきてしまう可能性もあるのでためらっていましたが、もう打つ手もなく、潔く環境を更新することにしました... 

Google から削除されたアプリの復帰(プライバシーポリシー編)

ある日、突然 Google Play Support から メールがきました。

審査の結果、 ローグスフィア は、Google Play ポリシーに違反していると判断されたため、Google Play ストアから削除されました。このアプリは、ポリシーに準拠するアップデートをご送信いただくまで、ユーザーに配布、販売されなくなりますのでご了承ください。

削除の理由:  Android 広告 ID の使用ポリシー及び Google Play デベロッパー販売 / 配布契約 4.8 への違反

アプリが個人情報や個人情報や機密情報を扱う場合、有効なプライバシーポリシーを掲載して頂く必要があります。お客様のアプリは Android 広告 ID の収集及び転送を行うことが確認されましたので、プライバシーポリシーを掲載して頂く必要があります。

アプリが Android 広告 ID の収集を行う場合、有効なプライバシーポリシーを Play コンソールの所定の箇所及びアプリ内に掲載して頂く必要があります。プライバシーポリシーの中でユーザープライバシーについて明記し、URL が有効であることをご確認ください。

必要な対応: プライバシーポリシーをストアの掲載情報及びアプリ内に追加してください

  1. Android 広告 ID の使用に関するポリシー、ユーザーデータに関するポリシー、Google Play デベロッパー販売 / 配布契約を確認し、アプリを修正します。個人情報や機密情報を要求する場合、上記 Google Play ポリシーに準拠した上で、有効なプライバシーポリシーへのリンクをストアの掲載情報及びアプリ内に掲載して頂く必要があります。
  2. アプリが、デベロッパー プログラム ポリシーに含まれるすべてのポリシーに準拠していることを確認します。再度ポリシーに違反したアプリには追加措置が取られることがあります。
  3. デベロッパー コンソールにログインし、ポリシーに準拠した修正済みの APK をアップロードします。必ず APK のバージョン番号を更新してからアップロードを行ってください。

また、お客様のアプリから個人情報や機密情報に関するアクセス権限リクエストを削除していただくことで、今回の警告を回避することも可能です。

アップデートが承認されると、アプリはすべてのインストール、評価、レビューが元のままの状態で再び配布、販売されるようになります。

ポリシーをご確認のうえ、今回の削除措置が誤りだと思われる場合は、お手数ですがポリシーサポートチームまでお問い合わせください。担当者が 2 営業日以内にご連絡いたします。

どうぞよろしくお願いいたします。

 

「アプリが個人情報や個人情報や」って2回書いてあったので、「あやしい・・」と一瞬思ったのですがどうやら本物っぽいです。実際にGoogle Play から削除されてましたから・・・

警告が来たという開発者の方をネット上で見かけたのですが、私の場合はいきなり削除でした。β版だから・・とかでしょうか。

実際にはゲーム内に広告は入れてないのですが、おそらくUnityのデフォルトのままだと権限リクエストが勝手に付与されてしまうのかもしれません。

 

広告系の機能を削除してもいいのですが、後のバージョンで広告を入れようとは思っていて二度手間になってしまうので、プライバシーポリシーに対応することにしました。

 

他のアプリを参考にプライバシーポリシーをはてなブログに書きました。

ninagreen.hatenablog.com

 

私は自分のサイトは持っていないくて、はてなブログしか運営してないので・・・いいのかどうかはわかりませんが、普通の1記事として書きました。

 

その後、Google Play Console (https://play.google.com/apps/publish)を開いて、該当アプリを選択し、「ストアでの表示」> 「ストアの掲載情報」> 「プライバシーポリシー」に、記事のURLを設定しました。

 

また、アプリ内の設定ページにプライバシーポリシーのボタンを設置し、押すとブラウザが立ち上がるようにしました。実装は、Application.OpenURLを呼び出しているだけです。

Application.OpenURL (CommonConf.PrivacyURL);

 

無事復帰して、今のところ問題なさそうです。。

 

【ローグスフィア】角越しの斜め移動/斜め攻撃の仕様まとめ

角越しの斜め移動や斜め攻撃に関して、仕様の考慮不足や不具合により一部チグハグな挙動になっていたので ver0.3.4 で全体的に整理して修正致しました。

(下記の記述はかなり細かい挙動となっており、知らなくてもゲームをプレイするのに支障はないかと思いますが、自分用の備忘録としてまとめておきます。)

角越しの斜め移動

◯ 通常の斜め移動 → できる

f:id:ninagreen:20180704013555p:plain

 

◯ 床なし越しの斜め移動 → できない

f:id:ninagreen:20180704014145p:plainf:id:ninagreen:20180704014431p:plain

 

◯ 壁/扉/家越しの斜め移動 → できない

f:id:ninagreen:20180704013655p:plainf:id:ninagreen:20180704015403p:plainf:id:ninagreen:20180714141646p:plain

 

*扉に鍵がかかっていない場合(一番右画像)に斜め移動できていたのを修正

(修正後は上に進んで扉を越えた後に、→↗️と進んでいる)

f:id:ninagreen:20180704015925p:plain → f:id:ninagreen:20180714131021p:plain

 

◯ 上記以外の通常家具越しの斜め移動 → できる

f:id:ninagreen:20180714132431p:plainf:id:ninagreen:20180714132433p:plainf:id:ninagreen:20180714132444p:plain

 

*両サイドを通常家具で挟まれていた場合に通り抜けできなかったのを修正

f:id:ninagreen:20180714132703p:plain → f:id:ninagreen:20180714134235p:plain

 

◯ キャラ越しの斜め移動 → できる

f:id:ninagreen:20180714141257p:plainf:id:ninagreen:20180714141237p:plain

 

◯ 通行不可地形/ラグ越しの斜め移動 → できる

f:id:ninagreen:20180714145228p:plainf:id:ninagreen:20180714150805p:plain

 

角越しの斜め近接攻撃

◯ 通常の斜め近接攻撃 → できる

f:id:ninagreen:20180715022104p:plain

 

 ◯ 床なし越しの斜め近接攻撃 → できない

*プレイヤーだけ攻撃できてしまっていたのを修正

f:id:ninagreen:20180715165906p:plain

 

◯ 壁/扉/家越しの斜め近接攻撃 → できない

f:id:ninagreen:20180715170117p:plainf:id:ninagreen:20180715170340p:plain

 

◯ 上記以外の通常家具越し/キャラ越しの斜め近接攻撃 → できる

f:id:ninagreen:20180715180731p:plainf:id:ninagreen:20180715181010p:plain

 

◯ 通行不可地形/ラグ越しの斜め近接攻撃 → できる

f:id:ninagreen:20180715181916p:plainf:id:ninagreen:20180715182537p:plain

 

角越しの斜め遠隔攻撃(魔法弾、弓矢、アイテム投げ)

杖による魔法弾や弓矢、アイテム投げなどの遠隔攻撃は、どのような状態でも角を越えてヒットするように修正しました。

◯ 通常の斜め遠隔攻撃 → できる

◯ 床なし越しの斜め遠隔攻撃 → できる

◯ 壁/扉/家越しの斜め遠隔攻撃 → できる

◯ 上記以外の通常家具越し/キャラ越しの斜め遠隔攻撃 → できる

◯ 通行不可地形/ラグ越しの斜め遠隔攻撃 → できる

 

角越しの視界

通路から部屋を見た場合に角越しの敵を表示が表示されていなかった不具合を修正しました。

f:id:ninagreen:20180704003417p:plain → f:id:ninagreen:20180704003443p:plain