よりみちアプリ開発

Unityゲームアプリ開発、猫、映画、ゲーム、日々🍀

『バベットの晩餐会』-小さな演出が宝石のようにきらめく

大好きな映画の一つ『バベットの晩餐会
数年ぶりに再鑑賞し、以前は気づかなかった発見と新しい感動がたくさんありました。

 

 

【目次】

 

 

 


こんな人におすすめ!


・「自分の在り方」を見つめ直したい人
・人の優しさを感じたい人
・本当の幸せとは何か?を考えたい人

 

 

 


あらすじ


デンマークの海沿いにある、小さくて質素な村。
敬虔なカトリックの牧師の父をもつ二人の姉妹。
信仰による善行と、慎ましい日常。それが彼女たちのすべてだった。

ある日、フランスからバベットという婦人が家を訪ねてくる。
ときは普仏戦争の時代。
彼女はフランスから亡命し、共通の知人から紹介された二人を頼ってやってきたのだ。

心優しい姉妹は、彼女を快く家に迎え入れ、

バベットは家事手伝いとして、姉妹と一緒に暮らすことになるのだった。

 

 

 


みどころ


途中までは、姉妹の人生と、村の生活の話が穏やかに続きます。
穏やかすぎて、少々眠たくなっちゃうかも(笑)
でも、最後まで見ると、そんな眠気を吹き飛ばすほどの大きな驚きと感動が待っています!
最後には、暖かい涙に包まれること必至です…!

 

以下はネタバレを含みますので、作品を観終わったあとにお読みください☆


 

 

 

 

 

 

 

 

 

 

 

個人的な感想と気付き


以前観たときは、バベットはなんて良い人なんだろう…!

というのが感想でした(単純)


宝くじのお金で、故郷であるフランスに帰ることもできたのに、

恩人のためにそれを捨てる、自己犠牲的な優しさを感じたのです。

 

 

ですが、今回はすこし感じ方がちがいました。

ああこれは、ただの恩返し、優しさというだけではなかったんだと。
(もちろんそれはありきですが)

 

これは、職人であり、芸術家であり、料理長としてのバベットの矜持でもあったのだなと。


一夜の晩餐は、バベットの渾身の芸術作品。
それを心から振る舞いたい相手というのは、フランスにいるお客さんではなく、
きっとこの村の姉妹と住人たちだったのだと思いました。

 

 

晩餐の後、バベットが宝くじのお金を全部食事に使ったと打ち明けるシーン。
姉妹が、「でもあなた、そんなに貧乏になっちゃって…」と涙ながらに言います。

 

それに対して、バベットが答えます。


「貧しい芸術家はいません」

 

この言葉がこの映画のすべてだね。
というのは私の夫が言っていた言葉ですが、私も本当にそうだと感じました。

 

芸術とは、絵画や映画、音楽、小説といったものだけをさすわけではないと思います。

自分のもつ技術を注いで、心を込めておこなったことは、すべて芸術といえるのではないだろうかと、この映画を観て感じました。

「芸術とは心の形容」

とこれも夫が言った言葉ですが、名言!と思いました。

 

 

晩餐会が終わったときには、それまでギスギスしていたみんなの心が融和し、

心からの幸福感に満ち溢れます。

 

それは、単に美味しいものを食べたから、

というだけではなく、バベットの心からの作品に心がふれたからだと思うのです。

 

姉妹はこれまで、信仰をよりどころとした厳格な人生を送ってきました。

だから、姉妹の人生には「心から」という感覚がなかったのではないかと思います。

 

バベットの料理は、はじめて彼らに、頭ではなく五感で感じるような幸せを与えたことでしょう。

 

 

 

 

雪の演出について


もう一つ、今回はじめて気がついて、すごい…!と感動したことがあります。


バベットが晩餐会の支度をしていて、みんなで恐ろしがっているときのこと。

 

だれか(姉妹のどちらかか村のどなたか、すいません、忘れました^^;)が
「こんな恐ろしいことが起きるなんて、きっと雪が降るわ…!」
と言います。

 

きっとこれは、”ありえないことが起きる”ことの例えなんだろうなというのがわかります。
日本でも「彼が遅刻しないなんて明日は大雪だ!」みたいに言いますね(笑)

 

晩餐会が終わって、みんなが満足して帰ったあと、姉妹が
「もう雪は降らないわね」
と言います。

 

ところが、そのあと食堂でバベットと姉妹が話すシーンで、

なんと窓の外に雪が降っているのです…!

 

これはどういう意味があるのだろう?と夫と話しました。
そして、夫が気付きました!

 

最初の「雪が降る」のあり得ないこと

→恐ろしい料理を食べさせられるかもしれないこと。

 

「雪は降らない」

→そんな恐ろしいあり得ないことは起きなかった。

 

最後に雪が降った

→ここで起きたあり得ないこととは…?

→バベットがフランスに帰らないで、残ってくれたことだ!

 

あくまで私たちが感じたことなので、もちろんこの解釈が誰にとっても正しいというわけではありません^^

 

でも、こうして細部まで仕掛けをほどこしてくれて、観た人が「もしかしてこうなんじゃない?」なんて話し合えたり、見返すたびに新しい発見をあたえてくれる…

そんな小さな演出が、宝石みたいに散りばめられているのって、

それはきっと製作者の作品への愛情だし、

そんな作品は、きっと良い映画なんだろうなぁ、と、改めて感じました。

 

 

 

 

バベットの料理という芸術作品に心が洗われた村人と同じように、

バベットの晩餐会』という素晴らしい作品に、心が洗われた私でした。

 

それでは、最後までお読み頂きありがとうございました(*^-^*)

『PolyNav2D』Unity2DでNavMeshっぽいことができるアセット使い方説明

 
・クリックした地点にキャラを移動させたい
・あらかじめ決めたルートを行ったり来たりさせたい

 
Unity2Dでこれらのことがしたいな〜と思ったのですが、
こちらのNavMeshを使った「ナビゲーションと経路探索」の機能は3Dのみとのこと😭
docs.unity3d.com

 
がっかりしていたところに、正に2Dで上記のことができる『PolyNav2D』というアセットを見つけました。 assetstore.unity.com

 
すごく便利で実装も簡単に作ってくれており、ReadMeとサンプルでほぼわかるのですが、
英語で毎回読み返すのが面倒なので、備忘録がてら使い方を書いておこうと思います😃

 

①キャラが動ける範囲のマップを作る

ツール/ParadoxNotion/Poly Nav/Create Poly Nav Map
で、@PlyNav2Dというオブジェクトが作られます。
「コライダーの編集」で、動かしたい範囲を囲うように整形します。

 

②動かしたいキャラクターを設定する

動かしたいキャラのオブジェクトに、PolyNavAgentというコンポーネントをつけます。
・マップ:①で生成された@PlyNav2D。なしの場合、シーン内で最初に見つかったマップが適用されるとのこと。

目的によって、アセットのDEMOにあるスクリプトをつけます。
・キャラをクリックした地点に移動させたい→ClickToMove
・決められたルートを移動させたい→PatrolWaypoints
 W pointsで、移動させたい地点の座標を指定。
・決められた地点をランダムに移動させたい→PatrolRandomWaypoints
 同じくW pointsで、ランダムに移動させたい地点の座標を指定。

 

基本的にはこれだけです!
細かい設定や他にもできることもあるのですが、また追記していきたいと思います(^^)

アプリ開発、再始動しました。

ブログを見にきて下さった皆様、ありがとうございます😊えみのです。

 

前回のアプリをリリースしてから、かれこれ4年ほどが経ってしまいました。

 

その間、いろんなことがありました。(そのことはまた別の機会に書きたいと思います🍀)

 

そして今、また本気でアプリを作ろう、という気持ちがようやくわいてきました。

 

できなかった期間は、どうしてやる気が起きないんだろう??私ってだめだなぁと思ったりしましたが、時期がくれば、自然と気持ちがわいてくるものなんですね✊🏻

起きたこと全部が自分の糧になって、今後の作品のなかに活きてくるんだろうなと思います。

 

楽しいアプリを作れるようにがんばりますので、皆様、何卒応援よろしくお願いいたします🙏🏻✨

Unityドット絵ゲーム(自分的)最適設定

今回は、Unityでドット絵ゲームを作る際の初期設定についてです。

サイトによって設定方法が様々だったのですが、 色々試してみた結果、 自分的に最適だと思われる方法にたどり着いたのでまとめてみました。

主に踏襲したのは、こちらのUnity公式ページです。

blogs.unity3d.com

設定の前に、ドット絵ならではの注意点として心に留めておいた方がいいなと感じたことがあります。
それは、ドット絵はインポート後に画像自体の大きさを変えられないということです。

ドット絵ではない画像を扱うのに慣れていると、大きさを変えたかったらScaleをいじればいいや〜という感覚になります。 ですが、ドット絵でこれをやると崩れてしまいます( ̄O ̄;)

なので、作画の段階ですべての大きさの比率を意識しながら製作するのが良いと思います。

それでは設定に入ります。

①画像ごとのインポート設定

私が変更したのは以下の2点です。
・Filter ModeをPoint(no filter)にする
・CompressionをNoneにする

f:id:emi_noa:20200806150206p:plain

サイトによってまちまちなのが、Pixels Per Unitの部分かと思います。
Unitとは、Sceneに表示されている1マス分のことです。
つまり、ここを100にすると、1マスに100ピクセル分表示されるということになります。
結論としては、ここの数字はプロジェクトに合わせて使いやすい数字でOKです。
32ピクセルのタイルで作っていたら、32にすれば1マス1タイルになるのでわかりやすいでしょう。 (私は100のままにしました。)

ただ注意なのが、すべての画像で数字を統一することです。
画像によって32にしたり64にしたりすると、崩れてしまいます。

②プロジェクト自体の設定

上のメニューから、Edit/Project Settings/QualityのAnti AliasingをDisabledにします。 (私のはデフォルトですでになってました。)

③2D Pixel Perfectを導入する

導入方法については、上記リンクの公式ページをご参照ください。
導入できましたら、Pixel Perfect CameraのコンポーネントをMain Cameraに追加します。
Run In Edit Modeはオンにしておくと、編集中もプレイモード時の表示がされるのでやりやすいです。

Assets Pixels Per Unit は、画像のインポート設定のときのPixels Per Unitと同一にします。そうしないと崩れます(^^;

・Reference Resolutionは、アセットを表示する解像度のことです。 たとえば、X32,Y32などにすると、32ピクセルの画像が画面いっぱいに表示されます。
ここを調整して、画面に表示させる大きさを決めます。

・Upscale Render Textureは、チェックしたときと外したときの差異がまだよく確認できてないのですが、チェックを外した方が画像を回転させたときもきれいなので、外してます。 (ぼやっとしててすいません)

・Pixel Snappingは、有効にすると、スプライトレンダラーが自動的にワールド空間のグリッドにスナップされるとのことなので、チェックしてます。

・Crop Frameは、チェックすると、どの画面解像度でも、Reference Resolutionの解像度でトリミングされます。
私のゲームの場合は、どの機種でも画面いっぱいに背景を表示したかったので、この設定は切っています。
常に同じアスペクト比で表示させたい場合は、有効にすると良いかと思います。

 

最後に、参考に私の最終的なPixel Perfect Cameraの設定と、Game画面を載せておきます。
キャラクターのサイズが、32ピクセルくらいです。

f:id:emi_noa:20200806161256p:plain

f:id:emi_noa:20200806161421p:plain f:id:emi_noa:20200806161427p:plain f:id:emi_noa:20200806161433p:plain

このような感じで、どの画面解像度でもきれいに表示されています。

以上、自分的ドット絵をきれいに表示する設定でした。
私もまだ勉強中でよくわかっていない所もありますので、もし間違いやわかりづらい部分等ありましたらお教え頂ければありがたいです。

それではまた♪

UnityでREST API通信 ⑤ PUT通信をおこなう

GET、POSTとスムーズにできましたが、 PUTでちょっとハマってしまいました(・_・;)

 

※POSTについてはこちらの記事や公式ドキュメント等を参考にさせていただきました。

UnityWebRequestによるHTTP通信 – てっくぼっと!

HTTP サーバーにフォームを送信 (POST) - Unity マニュアル

 

UnityWebRequestのPUT関数を使おうとしたのですが、
引数にフォームデータを渡せない…(文字列かバイト配列だけ)

UnityドキュメントのPUTの説明を読むと、
「HTTP サーバーに生データをアップロード」と書いてあり、
ん?なんかちがうかも…?

HTTPメソッドについて詳しくなかったのですが(今も)
PUTは更新する以外にもファイルをアップロードするという役割もあるらしいので、
UnityのPUTはこっちなのかなと思いました。

 

ドキュメントを読んでると、
method:GET や POST など、この UnityWebRequest によって使用される HTTP Verb を定義します。 というのがあったので、
POSTを使用して、 method変数でHTTPメソッドをPUTにしたらうまくいきました!

 UnityWebRequest www = UnityWebRequest.Post(url.webURL, formData);
 www.method = "PUT";

 

こちらのstackoverflowの質問でも、同様の解決法が書いてありました。

c# - How to update user picture using PUT method in Unity3D - Stack Overflow

 

また、Laravel側は、fill()を使うことで、Modelで設定した$fillableから、 設定できるプロパティを確認してくれるらしいので、
送信したカラムだけを更新することができます。

$input = $request->all();
$player -> fill($input) -> save();

 

ふうσ^_^;
webの知識がなくて勉強しつつなので、間違ってること等ありましたらすみません。
わかりづらい箇所などあればお気軽にご質問ください〜♪
では今回はこれにて( ・∇・)ノ

【Unity】複数のボタンからクリックした一つを選択状態にする方法

こんにちは! やっぱり三日坊主が発動して、久しぶりのブログになってしまいました(^^;
開発自体は、じわじわと進んでおります。

今日はタイトルの通り、複数のボタンを並べて、その中からクリックした一つを選択状態にする方法です。 調べたら意外と出てこなかったので、作ってみました。

↓のように、クリックされた一つだけ色が変わって、他のボタンは元の色に戻るという感じになります。

f:id:emi_noa:20200521164206g:plain

Unity上はこのようになっていて、 animal_1,animal_2,animal_3が3匹のにゃんこのボタンです。

f:id:emi_noa:20200521170134p:plain

コードはこんな感じで、各ボタンにスクリプトをつけて、OnClick()で以下のメソッドを呼び出しています。

 public static string AnimalName;

    public override void ButtonClick()
    {

        //すべてのボタンを見つけて、リストに入れる
        GameObject animal_1 = GameObject.Find("animal_1");
        GameObject animal_2 = GameObject.Find("animal_2");
        GameObject animal_3 = GameObject.Find("animal_3");

        List<GameObject> animalList = new List<GameObject>()
        {
            animal_1,animal_2,animal_3
        };

        //まず、すべてのボタンの色を白(元の色)にする
        foreach(GameObject gameObject in animalList)
        {
            gameObject.GetComponent<Image>().color = Color.white;
        }

        //クリックされたボタンの色だけを、グレイにする
        this.gameObject.GetComponent<Image>().color = Color.gray;

        //クリックしたオブジェクトの名前を、static変数に渡す       
        string AnimalName = this.gameObject.name;
    }

今回は、クリックしたオブジェクト名の数字の部分を切り取ってIDとして使用したかったので、 nameを取得しましたが、クリックされたgameObject自体をstatic変数に入れて、 登録ボタンなどで使うこともできるかと思います。

自己流なのでもっと良いやり方があるかも。
わかりづらい点がありましたら聞いてくだされば幸いです^^

ではでは今回はこの辺で。
皆様体調にお気をつけてお過ごしくださいませ😊

UnityでREST API通信 ④ データベースの値をローカルに保存する

こんにちは!

UnityでREST API通信 ③JSON形式のデータをオブジェクト化する - よりみちアプリ開発

の続きです。

 

API通信するクラスを別のクラスでnewして使おうとしたのですが、
そうするとAPI通信するクラスを新たにインスタンス化することになるため、
データを取得する前の状態になってしまいました。。

そのため、サーバーからデータを取ってきた時点で、ローカルに保存することにしました。

Unity標準のセーブ機能、PlayerPrefsは、int、float、string型しか保存できません。
今回はクラス型を保存したかったので、

magnaga.com

こちらを使わせて頂きました。
こんな素晴らしいものを無料で公開して下さってるなんて、神すぎます(T_T)
 

サンプルのコードも書いてあり、簡単に実装できました。 ありがとうございますm( _ _ )m

  今回は短くてすみません。 次回に続きます!