TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Unity 2019.3にあげると再生のたびにImport Assetsが実行される現象

Unity 2019.3にあげたのはよかったのですが、再生するたびに、Import Assetsが実行され、毎回鬱陶しいので調査しました!

環境

  • Unity 2019.3.1
  • iMac 2019

現象

再生ボタンを押すたびにImport Assetsが実行される。
タイトルはAsset Progressと表示されていた。
f:id:TAKOYAKING:20200215203403p:plain

注意事項

作業前にgit推奨

調査

調べてみるとこちらのUnity Forumに似たような現象が上がっていたので、こちらを参考にしました
https://forum.unity.com/threads/unity-constantly-importing-iteration-problem.732788/

もう一回手動でpackageをimportし直す

とうまくいくみたいです。

再生の時に対象のパスが一瞬だけ表示されるので、ここで原因となっているpackageがあるので、これを瞬時にとらえます。(結構素早いので、スクショとってみた方が良いかもです。)
f:id:TAKOYAKING:20200215203403p:plain

自分の場合はAnima2D packageが原因となっているようでした。
特に原因となっているのはsprite.pngでした。(一つの画像にキャラクターのパーツを全部まとめて入れる画像)

なのでAnima2dのexampleのUnitychanとTrexのフォルダを削除しました。(exampleなので使っていない)
すると起動時にImport Assetsダイアログが出なくなりました。

追記
と思ったけど、ダイアログは出続ける模様です。ただ一瞬になりました。(モヤっとする!)

まとめ

  • 対象のPackageを特定し、削除
  • もう一回そのpackageをimportし直す

感想

sprite.pngが直接の原因みたいなので、(<-自分の場合)なんかmetaがおかしくなっている気がします。
Anima2dではない、自分が作成したspritesheetもImport Assetsされていましたが、Anima2Dを削除すると何もしなくても解決されました!
勝手な想像ですが、UnityはAnima2Dの代わりに2D SpriteShapeを新たに機能として追加したので、それ関連でおかしくなったのかもしれません・・・よくわかりません

起動の時に毎回表示されているのがとても面倒だったので直ってよかった

Rustのライフタイムはスコープとは同じものではない

ライフタイムとは

ライフタイム | Rust by Example

コンパイラ(借用チェッカーと呼ばれる場合もあります)が、全ての借用に問題がないことを確認するために使用する仕組み

ざっくりライフタイムの使い所

  • 借用するときに使える (&とほぼペア)

ライフタイムの例

ライフタイムで参照を有効化する - The Rust Programming Language
ここによると以下の例の時、スコープ終了した後なのに参照しようとしているのでエラーとなる

{
    let r;

    {
        let x = 5;
        r = &x;
    }

    println!("r: {}", r); // error
}

ライフタイム VS スコープ

ライフタイム | Rust by Example

ライフタイムとスコープは同時に語られることが多いですが、同じものではありません。

今までは同じようなものかと思っていたし、スコープ外だから参照持ってたらいけないのは当たり前なのではと思っていのですが、ライフタイムを明示することで、生存期間を伸ばすことが可能みたいです。
上のコードにライフタイムを明示してあげると、xのライフタイムが伸び、rが参照できるようになりました。

fn takoyaki<'a>() {
    let r: &'a i32;
    { 
        let x: &'a i32 = &5;
        r = x; 
    } 
    // println!("x: {}", x); // error: cannot find value `x` in this scope
    println!("r: {}", r); // ok! ライフタイム伸びた!
}

xは外側からは参照できないので、「ライフタイム ≠ スコープ」という図式になりました。

余談

let r: 'a i32;
ができると思って書いてたらエラーが出て、かなりの時間困っていました!
ライフタイムは借用とセットなので&がいることに気づかなかった・・・

SourceTreeのコミット欄にプロフィール画像を表示する (Gravatar)

f:id:TAKOYAKING:20200213204439p:plain
こんな感じでSource Treeにプロフィールアイコンを表示させたかったので
git - How to set up your avatar in SourceTree.app? - Stack Overflow
ここを参考にして表示させました。

環境

iMac2019

やり方

  1. Gravatar - Globally Recognized Avatars ここでプロフィール画像を設定
  2. Source Treeを一旦閉じる
  3. ~/Library/Application Support/SourceTree/ImageCacheの中にあるファイルを削除(rm RepoAvatarURLCache)

感想

今回BitbucketからGithubに移行したときに、新しいメールアドレスが必要だったので、ついでに設定してみました。

Unityを2019.31f1にアップデートするとエラーが出た (ArgumentException: Requested value 'X86' was not found)

Unityを2019.31f1にアップデートすると以下のようなエラーが出ました

ArgumentException: Requested value 'X86' was not found.
ArgumentException: Requested value 'X86' was not found.
System.Enum+EnumResult.SetFailure (System.Enum+ParseFailureKind failure, System.String failureMessageID, System.Object failureMessageFormatArgument) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Enum.TryParseEnum (System.Type enumType, System.String value, System.Boolean ignoreCase, System.Enum+EnumResult& parseResult) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Enum.Parse (System.Type enumType, System.String value, System.Boolean ignoreCase) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Enum.Parse (System.Type enumType, System.String value) (at <437ba245d8404784b9fbab9b439ac908>:0)
GooglePlayServices.AndroidAbis.EnumValueStringToULong (System.Type enumType, System.String enumValueString) (at <0ea28fee5338451fbecc93319b91e068>:0)
GooglePlayServices.AndroidAbis.get_Current () (at <0ea28fee5338451fbecc93319b91e068>:0)
GooglePlayServices.PlayServicesResolver.PollAndroidAbis () (at <0ea28fee5338451fbecc93319b91e068>:0)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <437ba245d8404784b9fbab9b439ac908>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Delegate.DynamicInvokeImpl (System.Object[] args) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Delegate.DynamicInvoke (System.Object[] args) (at <437ba245d8404784b9fbab9b439ac908>:0)
UnityEditor.EditorApplication.Internal_CallUpdateFunctions () (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)

環境

  • iMac 2019
  • Unity 2019.2.16f -> Unity 2019.31f1

解決方法

android - ArgumentException: Requested value 'X86' was not found - Stack Overflow
ここに書いてありました。
google play serviceが古いようなので最新にする必要があるみたいです。

  1. PlayServicesResolverを丸ごと削除
  2. Releases · googlesamples/unity-jar-resolver · GitHub ここから最新のをダウンロード (Download hereと書いているのでそこのリンクに行きます。)
  3. Importする

これでいけるかなと思ったのですが、timeline がなんとかかんとかのエラーが出ました。
Window > Package Mangerを開くとtimelineの所に赤いビックリマークが付いていたので
timelineをupdateしました
エラーは消え去りました。

感想

2019.3は結構UIのデザインが変わって、慣れるまで時間がかかりそう・・・

Rust: Traitの匿名の引数 (Anonymous trait parameter)は廃止されていた

関連型が必要になる状況 | Rust by Example
このサンプルを行っていた時に

trait Contains<A, B> {
    fn contains(&self, &A, &B) -> bool;
}

// expected one of `:`, `@`, or `|`, found `)`

が出て動作しませんでした。


https://users.rust-lang.org/t/solved-example-of-rust-by-example-can-not-be-built-with-rust-2018-edition/24528/3
この記事によると
TraitのAnonymous trait parameterはもう廃止されているとのことでした。

正しくは

trait Contains<A, B> {
    fn contains(&self, _: &A, _: &B) -> bool;
}

公式ガイドにも書いてありました。2015年版はできたみたいですが、2018年版はできなくなったようです。
No more anonymous parameters - The Edition Guide
以下例を抜粋

// 廃止
trait Foo {
    fn foo(&self, u8);
}


// OK
trait Foo {
    fn foo(&self, baz: u8);
}

Rustでmodはネストできない

ファイルの階層構造 | Rust by Example

modの使い方を練習していたのですが、サンプルではmy/mod.rsにもmodを書いて階層化をしていたので、パスのようにmod my::nestedでnestedファイルのfunctionだけ呼びたい場合、できるかどうか試してみましたが、できませんでした。

やりたいこと

mod my::nested

のように階層化したmodをやりたい

// mod my::nested; // <= 不可
mod my

fn function() {
    println!("called `function()`");
}

fn main() {
    my::nested::function();
}
$ tree .
.
|-- my
|   |-- mod.rs
|   `-- nested.rs
`-- split.rs

結果

できませんでした。

rust - How do 'use' and 'mod' work when there are nested source directories? - Stack Overflow
このStackoverflowに書いてある通り、できないらしいです。

You cannot use :: in a mod declaration.
You need a file src/book/mod.rs, containing:

感想

Rust初心者なので、mod のネストの必要性がそもそもあるかどうかはわかりません・・・

UnityエディタでPREVIEW PACKAGES IN USE が上のバー出る時

f:id:TAKOYAKING:20200130132640p:plain

いつからか気付いた時にはこのような「REVIEW PACKAGES IN USE」が上のバーに出るようになってました。
気持ち悪いので直したいと思います。

環境

Unity2019.2
Mac

注意

Gitのようなバージョン管理していない場合は注意です。

方法

What is "PREVIEW PACKAGES IN USE" - Unity Answers
方法はこれに書いてある通りです。

  1. Window > Package Manager
  2. Reset Packages to defaults
Window > Package Manager

f:id:TAKOYAKING:20200130132646p:plain

するとこんな画面が出てきます。
f:id:TAKOYAKING:20200130132659p:plain

Reset Packages to defaults

があるのでこちらを押します。

すると以下のような警告文が出ます。
f:id:TAKOYAKING:20200130132707p:plain

OKします!

するとPackages/manifest.json
に変更箇所が記載されます(Git管理必須)

PREVIEW PACKAGES IN USE という文字が消えました!
f:id:TAKOYAKING:20200130132714p:plain

備考

UnityAnalitycsも削除されてしまったのでまた入れ直しました。

もうやってしまったあとなのでPreview版と書いてあるものだけを手動で取り除いてもいいような気がします。

感想

なんかスッキリした!