ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

第7回VFX技術者交流会

ATNDがサービス終了してしまいましたので、告知ページをこちらに転載しておきたいと思います。

主催:VFX技術者交流会
Twitterハッシュタグ#VFXStudy

日時:2018/12/01 (土) 14:30 - 20:00
場所:グランフロント大阪タワーB 18F Aiming大阪スタジオさまのセミナールーム

参加: 80人
補欠:6人
キャンセル:1人

イベント概要


ゲーム開発におけるリアルタイムエフェクト向けの勉強会になります。
今回は「マテリアル」をテーマに千葉章人さんとcom04さんにエフェクトならではな表現方法についてご講演いただきます。 お二方ともUE4を使用しての解説になりますが、UE4に関わらず参考になる内容になります。

普段なかなか伺うことができなかったり、まとまった情報が見つからない分野についてお話頂ける、大変貴重な内容となっております。
当日まで参加を受け付けますので、多くの方のご参加をお待ちしております!

※当日参加できなくなった方は、申し込みのキャンセルをお忘れないようお願いします
※85名ギリギリ座れると思いますので補欠の方もぜひいらしてください!

講演内容


1 『事前説明』 30分

 ●講演者:moko (@moko_03_25)
  スライドを公開しました!SlideShareこちら
  ※写真撮影・SNSへの投稿はOKです

 ●対象者:エフェクトに関わる人/マテリアルに興味がある人(甘口)

 ●内容説明:
 ゲーム開発でのエフェクトのマテリアルは半透明であることが多く、様々な制約があります。
 その辺りについて、ご存じない方向けに簡単にではありますが解説させて頂く予定です。

2 『UE4でTranslucencyやUnlitに影を落としたい!』 60分

 ●講演者:com04さま(@com04
  動画を公開しました!
  スライドを公開しました!
  サンプルプロジェクトを公開しました!
  ※写真撮影・SNSへの投稿はOKです

 ●対象者:エフェクトに関わる人/マテリアルに興味がある人(中辛)

 ●内容説明:
 UE4ではTranslucencyやUnlitマテリアルでは他のActorからのキャストシャドウ、落ち影を表示出来ません。
 それをエンジン改造無しで、キャストシャドウを受け取る幾つかのアプローチを提案します。
 ※UE4以外の環境についての言及はありませんのでご了承ください

3 『エフェクト向けマテリアルの子ネタ』 20~40分

 ●講演者:moko (@moko_03_25)
  スライドを公開しました!SlideShareこちら
  ※写真撮影・SNSへの投稿はOKです

 ●対象者:エフェクトに関わる人/マテリアルに興味がある人(甘口~中辛)

 ●内容説明:
 エフェクト向けマテリアルのちょっとしたテクニックのご紹介になります。
 ・World Position Offsetでふわふわさせる
 ・マテリアルでレンズフレアをそれらしく見せる
 ・カメラとの角度に応じてパーティクルを透明にする
 などを予定

4 『マテリアルエディタで作るVFX』 90分前後

 ●講演者:千葉章人さま(@chiba_akihito
  スライドを公開しました!
  ※写真撮影・SNSへの投稿はOKです

 ●対象者:エフェクトに関わる人/マテリアルに興味がある人(中辛)

 ●内容説明:
 マテリアルやポストプロセスを用いてアニメ風エフェクトや炎・煙・破壊表現等の作り方やアイデアを紹介します

 ■VFXの下準備
 ・手軽にプロトタイピングするために普段揃えている基本素材を紹介
 ・Noiseノードでディスプレイスする方法。ノーマルを作成する方法
 ・Photshop,AfterEffectsでノイズテクスチャを作る

 ■炎・煙VFX 動画
 ・パーティクルとマテリアルを用いてエフェクトを作る流れを解説
 ・UVに歪みを与えながらスクロールさせる方法
 ・テクスチャの輝度情報を用いて、炎や煙をセル風に塗分け、炎→煙への変化をコントロール

 ■水・液体VFX 動画1 動画2
 ・DepthFadeを用いてノーマルと透明度をコントロールし、噴き出しオブジェクトと水面を滑らかに繋ぐ
 ・倒立像を得られる屈折の作り方。それによって起きる描画問題を回避する方法
 ・DefferedDecalで水面の揺らぎを表現

 ■破壊VFX 動画
 ・ディスプレイスとテッセレーションによってオブジェクトを削る破壊表現
 ・BoxMask-3Dを拡張して自由に操作できるマスクにする方法
 ・マスク情報を用いてテッセレーション乗数をコントロール

 ■イラスト風PostProcess 動画
 ・SceneTextureを歪ませて手描きのような揺らぎと輪郭線を得る方法
 ・Smooth Ceilを用いたなソフトなトゥーンシェード

会場

株式会社Aiming 大阪スタジオ

f:id:moko_03_25:20181022002657p:plain

アクセス
グランフロント大阪へはJR大阪駅・阪急梅田駅・地下鉄御堂筋線梅田駅から徒歩5分ほどです。
タワーB 18Fへは9Fスカイロビーでエレベーターを乗り継ぐ必要がありますのでご注意ください。
※詳しくは会場の地図をご覧ください

会場は飲食ともにOKです。

会場のWi-Fiはご利用になれません。

お手洗いと自販機は会場のあるフロア内でご利用いただけます。

参加費


講演の受講、懇親会ともに無料

タイムテーブル


 14:30~15:00 参加受付開始
 15:00~15:20 1.マテリアルの事前説明(30分)
 15:30~16:30 2.com04さんのご講演(60分)
 16:40~17:00 3.マテリアル小ネタ(20~40分)
 17:10~18:40 4.千葉章人さんのご講演(90分前後)
 19:00~20:00 懇親会&キャリア相談会

 ※時間は多少前後すると思いますので目安になります

懇親会


勉強会終了後に同じAimingさまの別のセミナールームへ移動し、立食形式で行います。
オードブル等を手配する予定です。
ぜひこの機会に講演者の方や参加者のみなさまとご親睦を深めて頂ければと思います!

 ※懇親会と並行して希望者のみキャリア相談会受付けます(詳しくは後述)

主催


VFX技術者交流会

アンケートにより得た情報は、次回開催時の内容選定などの参考にさせていただきます。
何かご質問などありましたら<vfx.studygroup@gmail.com>までお願いします。

協賛


株式会社クリーク・アンド・リバー

f:id:moko_03_25:20161017232522p:plain

懇親会では「キャリア相談コーナー」を同フロアの別室にて実施します。

『キャリア相談会とは?』
履歴書・職務経歴書ポートフォリオ、一切必要ありません!
当日は懇親会スタートから終了まで、ゲーム業界専属のエージェントが個別ブースにてお話を伺います。
現職でのご相談や業界動向、今後のキャリアアップ、スキルアップなどお気軽にご相談ください。

※キャリア相談をご希望の方はお申し込み時にお知らせください
 ご希望者が多数の場合には先着順とさせていただきます
 当日お話が出来なかった方へは別途ご対応しますので、予めご了承ください

ちなみに前回開催時のページはこちら

第6回VFX技術者交流会 in 京都 - GDC情報編 -

ATNDがサービス終了してしまいましたので、告知ページをこちらに転載しておきたいと思います。

主催:VFX技術者交流会
Twitterハッシュタグ#VFXStudy

日時:2017/05/27 (土) 14:00 - 20:00
場所:京都「西陣産業創造会館」3F

参加: 79人

イベント概要


普段はゲーム開発におけるエフェクトの勉強会になりますが 今回はGDC2017の情報をメインに海外の技術情報を3名の方に発表いただきます。

関西では海外の技術情報を伺える機会はなかなか無いと思いますので
ぜひとも沢山の方のご参加をお待ちしております!

※今回は後日の動画公開はありません
※当日参加できなくなった方は、申し込みのキャンセルをお忘れないようお願いします
※補欠の方もキャンセルを見越してぜひおいでください
 (もしかしたら立ち見になる可能性もありますが)

講演内容


1 『GDC17 VFX Bootcamp参加報告』 60分

 ●講演者:後藤 誠 さま / マッチロック株式会社(@SquashSesame
  ※スライドはすでにアップされています(下記をご参照ください)
  ※SNSへの投稿はOKです

 ●対象者:エフェクトに関わる人/GDC技術情報に興味がある人

 ●内容説明:
  GDC2017報告会(3/18)での講演内容を60分に拡張して詳しくお話します。
  以下は本講演で取り上げるセッションです。
  ・The Rise of Realtime(リアルタイムの台頭)■(404)
  ・Visual Effects Bootcamp: Artistic Principles of VFX
  ・Visual Effects Bootcamp: How to Go from Good to Great ■(404)
  ・LIKE A MACE TO THE FACE: LEAVING THE BATTLEFIELD TO GO IT ALONE
  ・Visual Effects Bootcamp: Rapid Talks
  ・VISUAL EFFECTS ROUNDTABLEVFXのラウンドテーブル)

 ●参考ページ:
  GDC17 VFX Bootcamp参加報告

2 『海外グラフィックスのトレンド』 60分

 ●講演者:Russell Wardinsky さま / 
  株式会社 Skeleton Crew Studio(@SkeletonCrewStu
  ※SNSへの投稿はOKです

 ●対象者:GDCの技術情報に興味がある人

 ●内容説明:
  下記の5つの講演をベースに近年のグラフィックスのトレンドを語っていただきます。
  ・GPU-Based Procedural Placement in Horizon Zero Dawn
  ・Player Traversal Mechanics in the Vast World of Horizon Zero Dawn
  ・Ghost Recon Wildlands: Terrain Tools and Technology
  ・High Dynamic Range color grading and display in Frostbite
  ・4K Checkerboard in Battlefield 1 and Mass Effect Andromeda

3 『GDC2017に関する報告』 90分

 ●講演者:松林 尚理 さま / 株式会社Aiming大阪スタジオ(@fadis_
  ※スライドはすでにアップされています(下記をご参照ください)
  ※SNSへの投稿はOKです

 ●対象者:GDCの技術情報に興味がある人(エンジニア寄り)

 ●内容説明:
  GDC2017に参加されての講演のご紹介を90分でお話します。
  以下は本講演で取り上げるセッションです。
  ・Advanced Graphics Tech: How to Thrive on the Bleeding Edge Whilst Avoiding Death by 1,000 Paper Cuts ■(404)
  ・Moving to DirectX 12: Lessons Learned
  ・Advanced Graphics Tech: "Async Compute: Deep Dive" & "Raster Ordered Views and Conservative Rasterization"
  ・Vulkan Game Development on Mobile (Presented by The Khronos Group)
  ・Advanced Graphics Tech: "Cinematic Depth of Field" & "Advanced Particle Simulation in Compute" ■(404)
  ・Game Physics on the GPU with PhysX 3.4 (Presented by NVIDIA)
  ・Reaching the Largest Gaming Platform of All: The Web. WebGL, WebVR and glTF (Presented by The Khronos Group)
  ・Accelerating Your VR Games with VRWorks (Presented by NVIDIA)
  ・Rendering Low LOD Cars at Lightning Speed in 'Forza Motorsport 6' ■(404)
  ・Efficient Texture Streaming in 'Titanfall 2'
  ・Replicating Chaos: Vehicle Replication in 'Watch Dogs 2'

 ●参考ページ:
  GDC2017に関する報告

参加費


講演の受講、懇親会ともに無料

懇親会


勉強会終了後にそのまま会場にて行います。
オードブル等を手配する予定です。
ぜひこの機会に講演者の方や参加者のみなさまとご親睦を深めて頂ければと思います!

準備に15分ほどお時間を潰していただくことになるかも知れません。
その際は2Fでくつろげますのでご利用ください。

 ※懇親会と並行して希望者のみキャリア相談会受付けます(詳しくは後述)
 ※懇親会中にエフェクトセッションの紹介講演を1つ挟む‥かも?

タイムテーブル


 13:30~14:00 参加受付開始
 14:00~18:00 講演(休憩を挟みつつ)
 18:00~20:00 懇親会

会場について


アクセス
京都駅から地下鉄に乗り換えて今出川から徒歩が分かりやすいです
(15分ほど歩きますが、間にコンビニもあります)
または京都駅、祇園四条、大宮からバスでも可能です。
※詳しくは会場のHPをご覧ください

飲食ともにOKです。

Wi-Fiは利用可能ですが同時接続数も限られますので、できるなら通信環境はお持ち込むください。

お手洗いは会場である3Fの入口付近に1つあり、2Fもご利用いただけます。

共同主催


京都クロスメディア推進戦略拠点(KCROP)

f:id:moko_03_25:20170429141332p:plain

映画・映像、ゲーム、マンガ、アニメなど多岐にわたるコンテンツ産業が集積している京都で、企業やクリエイターの人材交流、ビジネスマッチング、ハンズオン支援などを行うための事業拠点です。

専門的なコーディネータが窓口となり、コンテンツ産業の活性化と新たな雇用の創出を目指しています。

※本事業は「京都次世代ものづくり産業雇用創出プロジェクト」の一環として実施するものです

株式会社クリーク・アンド・リバー

f:id:moko_03_25:20161017232522p:plain

懇親会では「キャリア相談コーナー」を2Fに設けます。

『キャリア相談会とは?』
履歴書・職務経歴書ポートフォリオ、一切必要ありません!
当日は懇親会スタートから終了まで、ゲーム業界専属のエージェントが個別ブースにてお話を伺います。
現職でのご相談や業界動向、今後のキャリアアップ、スキルアップなどお気軽にご相談ください。

※キャリア相談をご希望の方はお申し込み時にお知らせください。
 ご希望者が多数の場合には先着順とさせていただきます。
 当日お話が出来なかった方へは別途ご対応しますので、予めご了承ください

お問い合わせ


何かご質問などありましたら<vfx.studygroup★gmail.com>(★を@に変えてくれださい)までお願いします。

ちなみに前回開催時のページはこちら

レポート


共同主催である「京都クロスメディア推進戦略拠点」さまによるレポート記事が下記ページにて掲載されています!

crossmedia.kyoto

第5回VFX技術者交流会

ATNDがサービス終了してしまいましたので、告知ページをこちらに転載しておきたいと思います。

主催:VFX技術者交流会
Twitterハッシュタグ#VFXStudy

日時:2016/11/19 (土) 12:30 - 19:30
場所:グランフロント大阪 ナレッジキャピタル タワーC 9階
   「大阪工業大学 うめきたナレッジセンター」

参加: 90人
補欠: 12人
キャンセル: 11人

イベント概要


ゲーム開発におけるエフェクトの勉強会になります。
今回は3名の方に遠方からお越し頂き、リアルタイムVFX向けのご講演をいただけることになりました。

普段なかなか伺うことができなかったり、まとまった情報が見つからない分野についてお話頂ける、大変貴重な内容となっております。
当日まで参加を受け付けますので、多くの方のご参加をお待ちしております!

※当日参加できなくなった方は、申し込みのキャンセルをお忘れないようお願いします

講演内容


1 『GDC ラウンドテーブルで得た情報量 2016』 50分

 ●講演者:小林太郎さま
  ※スライドはすでにアップされています(下記をご参照ください)
  ※写真撮影・SNSへの投稿はOKです

 ●対象者:エフェクトに関わる人/GDCに興味がある人

 ●内容説明:
 GDC2016でのVFXラウンドテーブルについて、東京で開催されているゲームエフェクト交流会のライトニングトークでお話した内容を50分に拡張して詳しくお話します。
 また自身が参加した「カンヌライオンズ 国際クリエイティビティフェスティバル」についても少し触れさせて頂きます。

 ●参考ページ:
  GDC ラウンドテーブルで得た情報量 2016
  GDC ラウンドテーブルで得た情報量 2015

2 『なぜなにリアルタイムレンダリング』 90分

 ●講演者:もんしょさま(@monsho1977
  ※スライドは後日公開予定になります
  ※写真撮影・SNSへの投稿はOKです

  11/20 スライドがアップされました!
  http://www.slideshare.net/SatoshiKodaira/ss-69311865

  11/21 講演動画がアップされました!
  https://vimeo.com/192465095

 ●対象者:現在のリアルタイムレンダリング手法をもっと理解したいアーティスト
      非レンダリングプログラマの方
 ●内容説明:
 Deferred Renderingが台頭したことにより、リアルな映像が作りやすく、多くの光源も使えるようになってきました。

 しかし、それと引き換えに描画に関する自由度が減っていると感じることはないでしょうか?
 例えば半透明について、描画レイヤーについて、特定キャラ用ライトについて…
 レンダリングプログラマはDeferred Renderingの制約と答えますが、なぜそうなっているのか詳しく理解したいという方も多いのではないでしょうか?

 本講演ではDeferred Renderingを中心に、リアルタイムレンダリングの疑問をQ&A形式で答えていきます。
 対象はより深くレンダリングについて知りたいアーティスト・非レンダリングプログラマです。
 レンダリングプログラマに提案を行う上で役に立つ知識を得られるような内容にしたいと考えています。

 ●講演者さまのHP:『もんしょの巣穴blog』『もんしょの巣穴ブログ Ver2.0

 ●著書:『Unreal Engine 4 マテリアルデザイン入門[第2版]

3-A 『線香花火の観察とエフェクト表現について』 40分
3-B 『Unity5.5 beta エフェクト新機能紹介』 20分

 ●講演者:ktk.kumamotoさま(@KTK_kumamoto
  ※スライドは後日公開予定になります
  ※写真撮影・SNSへの投稿はOKです

  11/20 スライドとUnityのデータと動画資料がアップされました!

  ○ スライドとUnityのデータはこちら 

  ○『線香花火の観察とエフェクト表現について』の動画リンク
   最初に作った線香花火エフェクト自作の線香花火火球の説明
   縦長の炎の説明火花の説明雨の火花の説明煙の説明
   完成線香花火エフェクト線香花火iPhoneスロー撮影

  ○『Unity5.5beta 新機能紹介:エフェクト編』の動画リンク
   Trailsモジュール説明
   Noiseモジュールの説明
   TrailsとNoiseを使った煙エフェクト作成説明

 ●対象者:エフェクト初心者から中級者

 ●内容説明3-A:
 誰もが一度は遊んでみたことのある線香花火。
 今回講演をするにあたり、この線香花火の製作体験をしてきました。
 その時に得られた知識や経験を踏まえて、エフェクト制作に欠かせない「観察」、「分析」について、考えていきたいと思います。
 実物を「観察」、「分析」をする事によって、作成するエフェクトに説得力が増すと考えます。
 受講することにより、今後のエフェクト制作の何かの気づきがありますと幸いです。

 ●内容説明3-B:
 Unity5.5betaで新たにエフェクトの機能が大きく強化されました。
 実際のゲームエフェクトで活用できそうな部分などをピックアップしてご紹介させていただきます。

 ●著書:『Unity ゲームエフェクト入門 Shurikenで作る!ユーザーを引き込む演出手法』 

参加費


講演の受講、懇親会ともに無料

懇親会


勉強会終了後にそのまま会場にて行います。
オードブルとピザを手配する予定です。
ぜひこの機会に講演者の方や参加者のみなさまとご親睦を深めて頂ければと思います!

タイムテーブル


 12:30~13:00 参加受付開始
 13:00~17:00 講演(休憩を挟みつつ)
 17:30~19:30 懇親会

会場での飲食とWi-Fiについて


フタのついた飲み物のみ可(同フロアに自販機もあります)
Wi-Fiあり

共催


大阪工業大学情報科学部 様

協賛


●株式会社クリーク・アンド・リバー社 様

f:id:moko_03_25:20161017232522p:plain

●株式会社インディゾーン 様

f:id:moko_03_25:20161017232523p:plain

会場内ではHoudiniを展示しておりますので、ぜひお立ち寄りになってください。

お問い合わせ


何かご質問などありましたら<vfx.studygroup★gmail.com>(★を@に変えてくれださい)までお願いします。

ちなみに前回開催時のページはこちら
DoorkeeperのVFX技術者交流会コミュニティにご参加頂ければ開催時にご案内をお送りします。

レポート


togetter.com

 

Netflixで英語字幕から英文を学ぶ

Netflixで「とある科学の電磁砲」1話を英語音声/英語字幕で観てみました。

視聴時にはChromeアドオンの「LLN」を使用していますが、どういう感じで観ているかはこちらに書いています。

さて、冒頭でこちらのようなセリフがありました。

だっから しょうがないでしょ
あんたたちが来る前に 終わっちゃうんだから


こちらは英語字幕で下記のように訳されています。

It's not like I can help it, right?
I always finish before you guys show up.


ここが英語の難しいところですが、誰でも知っているレベルの単語でしか構成されていないにも関わらず、フレーズを知らないので意味が全く分からず難解な文章に感じます。

ちなみにフレーズに関してはこちらに記事にしています。

という訳で、まずはGoogle翻訳とDeepL翻訳にかけてみました。

DeepL翻訳は意訳に近い訳し方になったりするので、実はGoogle翻訳の方が直訳に近くて文章構成を理解しやすかったりします(一方でGoogle翻訳は基本的にフレーズに弱いので全く力になってくれないこともよくあります)。

DeepL翻訳:
どうしようもないですよね。
いつもお前らが来る前に終わるんだよ

Google翻訳
手伝ってくれるわけじゃないですよね?
皆さんが現れる前に私はいつも終わります。

 

前半部分の訳に関してはDeepLに軍配が上がっているのがよく分かります。しかしなぜ「It's not like I can help it, right?」が「どうしようもない」という訳になるのかは分かりません。

そこで検索のために文章を分解してみます。
今回の場合は以下のような感じで分けられそうだと思いました。

・It's not like (~that節?)
・I can help it
・show up


それぞれGoogle検索したり、Google翻訳やDeepL翻訳にかけてチェックしてみたりしますが、今回はストレートに参考になる解説サイトがすぐ見つかりました。

これらの解説記事から、前半の「It's not like I can help it」は「仕方がある‥訳では無い」と意味が逆転して「仕方ない」になってるということでしょうかね。

ややこしい。。

後半は「show up」が「現れる」ということが分かれば簡単で、「いつも私はあなたたちが現れる前に終わらせる」になる訳ですね。

ちなみに英語音声の方はというと‥

「I can'ts help it ~~~ , can I?」「I'm always done matter times guys event show up.」??速過ぎて全然聞き取れません。。もしこれが聞き取れたら、元のセリフから自然な口語にどう訳されるのかの勉強にもなりそうですが‥

Netflixでの英語学習に英語対応の日本アニメを視聴してみる

英語学習のために動画配信サービスを選択するなら「Netflix」が最も良いかと思います。
英語音声/字幕に対応した動画が多いのもありますが、なんと言ってもGoogle Chromeで利用できる「LLN」が非常に便利だからです。

おすすめの設定は「訳を非表示」をONにしておくことです。

f:id:moko_03_25:20200404162247p:plain

これで日本語訳はボケた状態で表示され‥

f:id:moko_03_25:20200404163859j:plain

日本語訳の部分をクリックすると綺麗に表示されるので答え合わせができます。

f:id:moko_03_25:20200404163906j:plain

SWORD ART ONLINE」1話より ©川原 礫 / KADOKAWA アスキー・メディアワークス / SAO Project

これで英語の勉強が捗る訳ですが‥じゃあ「英語初心者向けの作品は何か?」と思って色々調べると「FRIENDS」とか「FULL HOUSE」を始めとした「Sitcom(Situation comedy)」と呼ばれるホームコメディがよく筆頭に挙げられます。

確かに、比較的簡単な英語でアメリカの生活に根差す文化や日常会話を学ぶ目的としては最適と思いますが、笑いを誘う小洒落た言い回しの応酬がひたすら続くため、純粋にシンプルな英文の学習に向いているかというと、それには不向きな一面もあるかと思います。

一方、Nexflixでは日本の人気アニメが英語音声/英語字幕に対応していたりします。

( ↓ 対応していたのに削除されたものも沢山ありますね‥悲しみ。。)

この日本のアニメの英語対応ですが、残念ながら英語音声と英語字幕が一致しないものばかりです(一致しているものもあるかも知れませんが)。これは下記のような感じがします。

・英語字幕 ‥ 日本語のセリフに近い形で英文に訳されたもの
・英語音声 ‥ 音声収録に伴いより自然な言い回しになったもの

ドイツの海外ドラマ「DARK」も英語音声と英語字幕が一致しませんが、元々英語じゃないコンテンツは翻訳フローが違うのかも知れません。

音声と字幕が一致しないという面はとても残念ですが‥反面、元の日本語のセリフに近い形の英文が表示されるという面では英語初学者の自分にも文章が読み易くてとても良いように思いました。「LLN」も月額が発生するプロ版では機械翻訳の表示が可能になるようですが、元のセリフをそのまま変換したもの方が学習には向いてるのですよね。

それから「LLN」では画面右側に字幕が一覧されますが、マウスドラッグで範囲選択が可能なので、気になった文章はクリップボードにコピーしてGoogle翻訳や今話題の「DeepL」に貼り付けてチェックすることもできます。

f:id:moko_03_25:20200404174140j:plain

SWORD ART ONLINE」1話より ©川原 礫 / KADOKAWA アスキー・メディアワークス / SAO Project
https://www.deepl.com/home

「LLN」では字幕内の単語をクリックするとその場で訳を表示してくれますが、フレーズは自力で調べる必要があるので、こうしてコピペできるのは非常に便利です。

‥という訳で、とりあえず今まで観たことが無かった「ソード・アート・オンライン」をシーズン1(全25話)・シーズン2(全24話)をざっと視聴しましたが、登場する英文が初心者である自分には丁度良い難易度でした。

日本が舞台のアニメだと「いただきます」や「ただいま」など日本の文化ならではのセリフや「総務省〇〇局」「埼玉県埼玉市」「皇居」など日本の固有名詞がどう英訳されるかも学べる面もありますね!

次は「ヴァイオレットエヴァーガーデン」を観たいなと思っています。

簡単な英単語を組み合わせたフレーズ

英語が難しい理由は沢山ありますが、その1つがこちら‥

一見簡単そうなアニメやゲームの英文を読んでも全く知らないフレーズのオンパレードで、1つずつ調べながらだと一向に進まなくて絶望したりします。

とは言え‥文法ルールで解決できる問題では無いので、こればかりはとにかくイメージや使用場面などと一緒に脳内に刷り込ませていくしか無いなと。。

‥という訳で、過去にメモっていたものを並べてみたいと思います。

(It's)a shame(that~) (~について)残念です
(same)as usual / as always / as ever いつも通り
a bit too far 少しやり過ぎる
a series of ~ 一連の~
absolute disaster 全然ダメ(絶対的な災難)
all sorts of ~ あらゆる種類の~
all the time いつも
all together みんなで一緒に, 全部合わせて, 同時に
allow me to do~ ~させてください(let me~より丁寧な言い方)
Apparently, ~ どうやら~らしい
apropos of nothing 突然だけど
as a matter of fact 実のところ
at all ぜんぜん, さっぱり
at face value 表面そのままの意味
at large 逃亡中, 野放し
at the rate someone is going このペースだと
at will 気の向くままに, 思いのままに, 自由自在に
back down 引き下がる
bat an eyelash まばたき一つ
be ashamed of~ ~を恥ずかしがる
be aware  知っている, 気付いている
be better off もっと良くなる
be far too 形容詞 あまりにも~すぎる
be fixing to~ ~するつもり(予定)
be supposed to 〜 〜することになっている, ~するはず
blink of an eye 一瞬
But of course もちろん = Of course
Buzz off. うるさい, どっかいけ
by anyone's standards 誰がどう見ても
can only end one way 先は見えている(行きつくところは1つだけ)
can't afford to lose ~ ~を失うことはできない
can't make heads nor tails of ~が何だかさっぱり分からない
carry out 実行(遂行)する
Catch on? 分かった?
certain 名詞 某〇〇
city folk 都会人
city-state 都市国家
close combat 接近戦
cold shoulder 冷たい態度
come along 一緒に来る
come and get it 食事の用意ができたよ
common sight  ありふれた光景, よく見かける
Copy that. 了解
cover a multitude of sins 多くの(悪い)事をおおい隠す
cut a deal 協定/契約を結ぶ, 取引する
cut it out いい加減にして
cut straight to the point 単刀直入に言う
disagree with 体調を崩す
Don’t let it get to you. ま、気にするなよ
don't go easy on 手加減しない
don't need to concern yourself あなたには関係無い(あなた自身、関与する必要は無い)
Don't tell me~ ~と言わないよね?
drive a hard bargain 商談がうまい, ひどく値切る
dying to + 動詞 ~したくてたまらない
elephant in the room 触れてはいけないもの(タブー)
eons ago 大昔に
even though ~にも関わらず~
fall apart ひっくり返る, バラバラになる, 崩壊する
fall on deaf ears 聞き流される, 無視される
fashion ~ ~を作る ※fashionは流行のファッション
fast friend 親友
figure it out 計算する => 解決する
fireside chat 暖炉を囲んでする(ような)談話
first off まず最初に、とりあえず
for a while しばらくの間
for crying out loud 何てこった, これは呆れた, 全くもう
For God’s sake まったくいい加減にしてくれ
For goodness' sake まったくいい加減にしてくれ
from a distance 遠くから
from time to time 時々
full well 十分に
get back to~ ~に戻る
get carried away 調子に乗る, 夢中になる and~で調子に乗って~した またはwith~で~に夢中になる
get even あいこになる, 五分五分になる
get going さあ行こう
get home 家に帰る
get involved 巻き込まれる involved=関わる, 参加する
get this far こんなに遠くまで来る=ここまで成し遂げる
get used to~ ~に慣れる
give ~ quite a turn ~をひどく驚かせる
give you a heads up 前もって知らせる
go a long way 大きな効果を発揮する
go ahead どうぞ
go back and forth 行ったり来たりする
go out (明かりや火が)消える
Good god(s). なんてことだ
Good grief やれやれ, まったく
Goodness knows 神のみぞ知る
greener pastures より良い環境
had better +動詞の原形 ~した方がいい
hand-to-hand combat 白兵戦
happen to 動詞 たまたま~する 疑問文で「ひょっとして~?」になる
hard luck 不幸
have anything to do with~ ~に関わりがある
have nothing to do with~ ~に関係ない
head-on 真正面から, 面と向かって
hear ya (ya=you) 言いたいことは分かる
heave-ho よいしょ
help out 手伝う
Here's looking at you 君の瞳に乾杯(映画カサブランカのフレーズ)
hold down 押さえる, 組みつく
Hold it right there. ちょっと待ちなさい
hold your horses はやる心を抑えて, 落ち着いて
Hot diggity! やった!
how dare you よくもまあ~できるものだ
I beg your pardon. ごめんなさい(I'm sorry よりも丁寧)
I don't appreciate~ ~はやめて頂きたい(感謝しません)
I fear that ~ 残念ながら~のようだ
I guess not 違うみたい
i hate to do~ ~するのは嫌だけど, ~したくないけど
I mean / You mean つまり(つなぎ言葉)
I will thank you to~ ~してくれるとありがたい
I wonder if ~かな?
I’m a little off 少し調子が悪い
if you don't mind もし差し支えなければ
I'll bet~ きっと~だ(賭けてもいい)
I'm afraid ~ ~を恐れている, 残念ながら~, ~のようだ
I'm afraid not. 残念ながら‥
I'm on pins and needles. そわそわする
I'm stuck. 身動きが取れない, お手上げだ
impossible to tell 分からない / 定かではない
in progress 進行中
in search of ~ ~を探し求めて
in some small way ささやかながら
in the end 最終的に
inner nature 本質
Isn't it obvious? 当たり前でしょう, 決まってるじゃん
Isn't it, though? そうでしょう?(=Do you agree?)
It depends on you あなた次第だ
it would seem そのようだ
It’s settled. これで決まりだ
It's no excuse 全く言い訳にならない
It's no use 仕方がない, 無駄だ
just because~ ただ~なだけで
just say the word いつでも言ってね
keep an eye out 見張る, 警戒する
keep something from ~ ~に隠し事をする
knock it off いい加減にして
know full well 十分に理解している
lack of foresight 先見性の欠如 = 見通しの甘さ
lay on 置く, 用意する, 傷付ける
leave it to me 私に任せて
leave it to~ ~に任せろ
leave out~ ~を忘れる
less of ~ ~を見下す
let down 失望する, 裏切る
let it go to one’s head うぬぼれるな, 調子に乗るな
let's see. えーっと(複数人で話しているとき)
letup / let-up ゆるみ, 休止
light source 光源
like no other 他には無い, 唯一無二の
little wonder さほど不思議ではない
live up to に応える, にふさわしい
living tissue 生きている(生体)組織
lock away しまい込む
look down on~ ~を見下す, 見くびる
look first 最初に検討する
look out 気を付ける / 用心する
made out 作り上げる
make fun of ~ ~をからかう
make it sound~ ~のようなことを言う
make it this far ここまでやり遂げる
make progress 進展する
make sense 理に適う, 筋が通っている
make sure 確認する
Mind you, よく聞いてくれ
much too 形容詞 あまりにも~すぎる(名詞を装飾する場合は too much 名詞 になる)
my icon 私の憧れの人
naked eye 肉眼, 裸眼
night falls 夜になる
no longer もはや~ではない
no point 意味が無い no point ~ing ~していても意味がない
No way! ありえない!, とんでもない!
nodding off うたた寝, 居眠り
nose into でしゃばる, 首を突っ込む
not hald bad そんなに悪くない, なかなかのもの
not last long 長続きしない
of all days よりによって today of all days = よりによって今日
of them all 全ての中で~
on one's way out ~ ~を出る途中
on one's way to ~ ~へ行く途中
on the agenda 議題に予定されている
on top of that 挙句の果てに
One good turn deserves another. 一つの良い行為はもう一つの良い行為を受けるに値する(ことわざ)
one of you 誰か一人
orderly fashion 整然と行う
out there 外 / 屋外, 世の中
Out with it! 言ってしまえ!, 話せ!
over my head チンプンカンプン
over time 時間とともに
pay no attention to~ ~に注意を払わない
perk up 元気を出す
pick on ~をいじめる
piece of cake 簡単, 楽勝
play dumb とぼける
point out 指示する, 指摘する
Pray ~ どうか~(pray = 祈る)
pride and joy 自慢の宝
pull yourself together 気を取り直して, しっかりして
put it all together 全てをまとめる, 冷静さを取り戻す
put it that way そんな風に言う
right off すぐに, 直ちに
rule over 支配する
run into~ ~に偶然出会う, ~とばったり会う
run off 走り去る, 逃げ去る
second thought 考え直す, 気が変わる, 二の足を踏む
See? 分かった?
set off 出発する, 作動する, 打ち上げる, 引き金になる, 逆鱗に触れる, 着想を与える, 引き立たせる, 相殺する, 区切る
short on staff / short of staff 人手が足りない
shut down 停止, 休止
Some might say~ 誰かが~と言うかも知れない
sooner or later 遅かれ早かれ
spot you out あなたを見つけ出す
stand for を表す
stand on your way あなたの行く手を遮る
starry-eyed うっとりしている(目がキラキラしている)
step aside 脇へ寄る=身を引く
sticking out 突き出ている
such a big deal そんな大したこと
tag along ついて行く, 付き添う
talk one's ear off 一方的に喋る
thank heavens ~ ~で良かった, ~でありがたい
That should do it. それで十分
That's more like it. そうこなくっちゃ
the daylights out of ~をひどく~する
The very idea. ひどい ※good ideaの逆の意味になる
The world's only~ 世界で唯一の~
then and only then その時になって初めて
think highly of each other お互いに尊敬している
This is gone far enough. これはやり過ぎだ
this won't do. これは良くないな
Tip-top 最高の, 万全の
to my surprise 驚いたことに
to this end その目標に向かって = そのために
too bad 残念
tuck you in 寝かしつける
turn to ~に頼る
upper hand 優位, 優勢
upside down 逆さまに
upsy-daisy よいしょ
wash up 疲れ果てさせる, ボロボロにする
way out 出口, 脱出方法, 解決法
what in the world 一体全体
What is he up to? 彼は何をしているのか?
Whatever~ 一体何を~, どんなに~でも
what's cooking どうしたの?
what's the use of ~ing? ~して何になるのか?
where one left off 中断したところ(‥から再開する、など)
whip up ~ ~を作る ※whipは鞭のウィップ
Why not ~ なぜ~しないのか?, もちろん~する, ~してみては?
-wise ~のように(manhood-wise = 男らしい)
with pleasure 喜んで, かしこまりました
Without a doubt. 疑いない(間違いない)
work out 解決する, 解明する, 練習する, 算出する, 抜け出る, 切り拓く
worth one's salt 給料に値する働きをする = 有能である
would that work うまくいく
You bet. もちろん
you don't say ほんとに?, まじか
you name it ありとあらゆるもの
You up there (上にいる)そこのあなた
You've got it all wrong. あなたは全く誤解している
比較級 and 比較級 ますます~

 

これらフレーズはその時プレイしていたゲームや観たアニメで登場してたまたま知った&調べたものだけをピックアップしています。それでも大量に遭遇しました。

ただ並べただけでは見辛いので、ゆくゆくは分類していきたいところです。。

C# フォームで動画再生

Windows Media Playerのコントロールを利用する形で試してみました。
f:id:moko_03_25:20200329023827p:plain

利用すると言えどもやらないといけないことは色々あります。
・動画を開くボタンを追加、アイコンを作成して設定
・ショートカットキーによる再生/停止、コマ送り/戻し
・ショートカットキーによる動画サイズ変更
・フルスクリーン時にショートカットキーを受け付ける
・ボリューム設定の記憶と復元
・リピート再生(未実装)
・動画ファイルのドラッグ&ドロップ対応(こちらは継承しての拡張が必要なため未実装)
区間再生(UIが絡んで悩ましいため現状未実装)

以前調べたときのものはこちら。
effect.hatenablog.com


以下はお世話になった記事(感謝です!)。
AxWindowsMediaPlayer | C# プログラミング解説
c#.netでWindowsMediaPlayerコントロールを使って動画プレイヤーを作成する。 - 中堅プログラマーの備忘録
axWindowsMediaPlayerでコマ送りをするには?

試した際のソースコードはこちらのような感じ。

using System;
using System.IO;
using System.Windows.Forms;
using WMPLib;

namespace VideoPlayer
{
	public partial class Form1 : Form, IMessageFilter
	{
		string videoPath, videoTitle;
		WMPPlayState videoState;
		int srcWidth = 0;
		int srcHeight = 0;
		double loopSta = 0.0;
		double loopEnd = 0.0;
		bool ready = false;

		public Form1()
		{
			InitializeComponent();
			//wmpVideo.uiMode = "none";

			this.KeyPreview = true;
			wmpVideo.AllowDrop = true;
			wmpVideo.enableContextMenu = false;
		}

		// ロード時
		private void Form1_Load(object sender, EventArgs e)
		{
			// アプリケーションの設定を読み込む
			Properties.Settings.Default.Reload();

			try
			{
				wmpVideo.settings.mute = Properties.Settings.Default.isMute;
				wmpVideo.settings.volume = Properties.Settings.Default.volume;
			}
			catch (Exception)
			{

			}
		}

		// 終了時
		private void Form1_FormClosing(object sender, FormClosingEventArgs e)
		{
			try
			{
				Properties.Settings.Default.isMute = wmpVideo.settings.mute;
				Properties.Settings.Default.volume = wmpVideo.settings.volume;
			}
			catch (Exception)
			{

			}			

			// アプリケーションの設定を保存する
			Properties.Settings.Default.Save();
		}

		// フルスクリーンモード時にキーを受け付けるためのもの
		protected override void OnLoad(EventArgs e)
		{
			base.OnLoad(e);
			Application.AddMessageFilter(this);
		}
		protected override void OnFormClosing(FormClosingEventArgs e)
		{
			base.OnFormClosing(e);
			Application.RemoveMessageFilter(this);
		}
		public bool PreFilterMessage(ref Message m)
		{
			const int WM_KEYDOWN = 0x100;
			if (m.Msg == WM_KEYDOWN)
			{
				Keys keyCode = (Keys)m.WParam & Keys.KeyCode;
				if (keyCode == Keys.Escape)
				{
					this.wmpVideo.fullScreen = false;
					this.ActiveControl = this.wmpVideo;
					return true;
				}
				else if (keyCode == Keys.D1)
				{
					this.wmpVideo.fullScreen = false;
					this.ActiveControl = this.wmpVideo;
					changeScreen(1);
					return true;
				}
				else if (keyCode == Keys.D2)
				{
					this.wmpVideo.fullScreen = false;
					this.ActiveControl = this.wmpVideo;
					changeScreen(2);
					return true;
				}
				else if (keyCode == Keys.D3)
				{
					this.wmpVideo.fullScreen = false;
					this.ActiveControl = this.wmpVideo;
					changeScreen(3);
					return true;
				}
			}
			return false;
		}

		// ショートカットキー
		private void WmpVideo_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
		{
			if (ready)
			{
				// 動画の状態を更新
				videoState = wmpVideo.playState;

				// スペースキー
				if (e.KeyCode == Keys.Space)
				{
					if ("wmppsPlaying" == videoState.ToString())
					{
						wmpVideo.Ctlcontrols.pause();
					}
					else if ("wmppsPaused" == videoState.ToString())
					{
						wmpVideo.Ctlcontrols.play();
					}
				}
				else if (e.KeyCode == Keys.E)
				{
					// 一時停止
					wmpVideo.Ctlcontrols.pause();

					// コマ送り
					((IWMPControls2)wmpVideo.Ctlcontrols).step(1);
				}
				else if (e.KeyCode == Keys.W)
				{
					// 一時停止
					wmpVideo.Ctlcontrols.pause();

					// コマ戻し
					((IWMPControls2)wmpVideo.Ctlcontrols).step(-1);
				}
				else if (e.KeyCode == Keys.OemOpenBrackets)
				{
					// 現在の再生位置を取得
					loopSta = wmpVideo.Ctlcontrols.currentPosition;
				}
				else if (e.KeyCode == Keys.OemCloseBrackets)
				{
					// 現在の再生位置を取得
					loopEnd = wmpVideo.Ctlcontrols.currentPosition;
				}
				else if (e.KeyCode == Keys.D1)
				{
					changeScreen(1);
				}
				else if (e.KeyCode == Keys.D2)
				{
					changeScreen(2);
				}
				else if (e.KeyCode == Keys.D3)
				{
					changeScreen(3);
				}
				else if (e.KeyCode == Keys.D4)
				{
					// フルスクリーン
					wmpVideo.fullScreen = true;
				}
			}
		}

		// ドラッグ&ドロップ
		private void Form1_DragEnter(object sender, DragEventArgs e)
		{
			// コントロール内にドラッグされたとき実行される
			if (e.Data.GetDataPresent(DataFormats.FileDrop))
				// ドラッグされたデータ形式を調べ、ファイルのときはコピーとする
				e.Effect = DragDropEffects.Copy;
			else
				// ファイル以外は受け付けない
				e.Effect = DragDropEffects.None;
		}
		private void Form1_DragDrop(object sender, DragEventArgs e)
		{
			// コントロール内にドロップされたとき実行される
			// ドロップされたすべてのファイル名を取得する
			string[] fileName =
				(string[])e.Data.GetData(DataFormats.FileDrop, false);
			
			// 動画のファイルパスを取得
			videoPath = fileName[0];
			videoTitle = Path.GetFileName(videoPath);

			setUpValue();
		}

		// マウスクリックで再生/一時停止をトグル
		private void WmpVideo_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
		{
			if (ready)
			{
				// 動画の状態を更新
				videoState = wmpVideo.playState;

				if ("wmppsPlaying" == videoState.ToString())
				{
					//wmpVideo.Ctlcontrols.pause();
				}
				else if ("wmppsPaused" == videoState.ToString())
				{
					//wmpVideo.Ctlcontrols.play();
				}

				//srcWidth = wmpVideo.currentMedia.imageSourceWidth;
				//srcHeight = wmpVideo.currentMedia.imageSourceHeight;
				//MessageBox.Show(srcWidth.ToString() + " : " + srcHeight.ToString() + "\r\n" +
					//"Form " + this.Width.ToString() + " : " + this.Height.ToString() + "\r\n" +
					//"Screen" + wmpVideo.Width.ToString() + " : " + wmpVideo.Height.ToString());
			}
		}

		// ボタンのアイコン差し替え
		private void BtnOpenVideo_MouseEnter(object sender, EventArgs e)
		{
			btnOpenVideo.BackgroundImage = Properties.Resources.Icon_Open_on;
		}
		private void BtnOpenVideo_MouseLeave(object sender, EventArgs e)
		{
			btnOpenVideo.BackgroundImage = Properties.Resources.Icon_Open;
		}

		// 開くボタン
		private void BtnOpenVideo_Click(object sender, EventArgs e)
		{
			OpenFileDialog openFileDialog = new OpenFileDialog() { Multiselect = false, Filter = "MP4 File|*.mp4|All File|*.*" };
			if (openFileDialog.ShowDialog() == DialogResult.OK)
			{
				videoPath = openFileDialog.FileName;
				videoTitle = openFileDialog.SafeFileName;

				setUpValue();
			}
		}

		// 動画を開いた際の準備
		public void setUpValue()
		{
			wmpVideo.URL = videoPath;
			this.Text = videoTitle;
			ready = true;
		}

		// 動画サイズを変える
		public void changeScreen(int sizeID)
		{
			wmpVideo.fullScreen = false;
			wmpVideo.stretchToFit = true;

			srcWidth = wmpVideo.currentMedia.imageSourceWidth;
			srcHeight = wmpVideo.currentMedia.imageSourceHeight;

			switch (sizeID)
			{
				case 1:
					this.Width = (srcWidth / 2) + 16;
					this.Height = (srcHeight / 2) + 39;
					break;

				case 2:
					this.Width = (srcWidth) + 16;
					this.Height = (srcHeight) + 39;
					break;

				case 3:
					this.Width = (srcWidth * 2) + 16;
					this.Height = (srcHeight * 2) + 39;
					break;

				default:
					break;
			}
		}
	}
}

「C#」の記事一覧

C#.NET frameworkを使ったWindows Forms Aplicationと、制作時のちょっとしたTIPSメモのメニューになります。

作ったツール


C# リスト管理できるテキストエディタ「List Fusen」を制作&リリース
C# UE4のアセットの命名規則チェックツールを作ってみた
C# 線グラデーション画像を作成するツール
BMP画像に保存された色の値を調べる
C# よく使う文字列をコピペするための補助ツール
C# ファイルパス・フォルダパスをリストアップするツール
C# タスクスケジューラへタスクを登録するツール
C# UE4のフォルダカラーを設定するリストを作成するツール
C# 英単語を覚えるためのツール「English Words Check Tool」を公開しました!
リスト管理できるテキストエディタ「List Fusen」がバージョン2になりました!
Windows用タスク管理アプリ『TaskQuest』について
Tenpu Gazo Maker をリリースしました!


入門


C#のはじめ方
C# ソリューションの基本的なファイル構成について
C# WindowsFormのコントロールの概要

C# Formの主なプロパティ
C# Labelの主なプロパティ
C# ComboBoxの主なプロパティ
C# DataGridViewの主なプロパティと関数
C# TreeViewの主なプロパティ
C# PictureBoxの主なプロパティ


入門の次のステップ


C# 初心者の次のステップ
GitHubでのツールやソース公開について(CGアーティスト向け)
ライセンスについてのメモ
C#でWPFを始める
C#を覚えてからC++を始めたときのメモ


テキスト


C#で正規表現による置換を行う
C# TreeViewのノードに対応した文字列をTextBoxに表示する
C# XMLファイルを読み込んでTreeViewにノードを追加する
C# XMLへの階層構造の保存メモ1(基本編)
C# XMLへの階層構造の保存メモ2(TreeView編)
C# XMLへの階層構造の保存メモ3(TreeView編)
C# TreeViewの親子階層内で指定のノードを選択する
C# テキストの暗号化と複合の方法について
C# RPG風にテキストメッセージを1文字ずつ表示させる
C# WordドキュメントをMarkdownに変換したい


ファイル


C#でサブフォルダをリストアップ
C#でサブフォルダの総サイズのリストアップ(ListBox編)
C#でサブフォルダの総サイズのリストアップ(DataGridView編)


データベース


C# Listの中身をDataGridViewに追加する方法
C# DataGridViewでの値のコピー&ペーストの実装
C# DataGridViewの表示がおかしくなった時の対処法
C# DataGridViewのソートとフィルタのサンプル
C# DataGridViewにDataTableをデザイナでバインドしている際のフィルタのサンプル
C# DataGridViewにDataTableをデザイナでバインドしている際に列を名前で指定する
C# DataGridViewの列の値に0から始まる番号を入力する
C# タスクをリスト管理するツールの基礎となるサンプルデータを公開


画像 / 動画


C# PictureBoxを2つ重ねるサンプル
C# 画像にラインを引く
C# 画像にラインを引く際にShiftキーで垂直/水平に補正する
C# 画像にラインを引く際にShiftキーで45度に補正する
C# 画像に選択範囲のような枠線を引く
C# ハイトマップからノーマルマップを生成してみた
C# フォームで動画再生
動画再生プレイヤーを作りたいメモ


3D


C#で3Dモデルを表示したい場合の方法メモ
C# 多角形の3Dモデルの描画
C# 穴の空いた多角形の3Dモデルの描画
C# 穴の空いた多角形の3Dモデルにテクスチャを貼ってみた


フォーム / コントロール


C# コントロールの表示をボタンで切り替える
C# Buttonコントロールの枠線を消す方法
C# スペースやEnterキーでボタンを反応させない
C# Formから別のFormを作成する
C# フォーム作成時の最小サイズは136*39
C# スペースキー+マウスドラッグでスクロールを制御する1
C# スペースキー+マウスドラッグでスクロールを制御する2


Twitter


C# Twitterアプリを作ってみる1
C# Twitterアプリを作ってみる2

その他


C# カラー管理クラスを考える
C# Visual Studioで設定したマルチアイコンでサイズ別に古い画像が残る現象
WPF導入に良さそうな情報まとめ 
Making of TaskQuest
Making of TaskQuest<実装編>

C# スペースキー+マウスドラッグでスクロールを制御する2

前回の記事の続きです。
effect.hatenablog.com

すでに事前準備ができているので、あとはスクロールバーの制御の部分を実装するだけです。
考え方としては、PictureBox の「MouseDown」「MouseMove」「MouseUp」のイベントでマウスドラッグを判定して、ドラッグ中にスペースキーを押している状態であればPanelのスクロールバーを動かすという感じです。
「MouseMove」はただマウスを動かしているだけの時も反応してしまうので「MouseDown」と「MouseUp」を組み合わせる必要が出ます。ここは少々不便な点ではあります。

具体的な記述方法についてはこちらの記事を参考にさせていただきました。
codepanic.itigo.jp

という訳で無事に動作しました!

f:id:moko_03_25:20200314212815g:plain

ソ-スコードは以下のような感じです。

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Sample_NoFocusedButton
{
	public partial class Form1 : Form
	{
		bool isDragging = false;
		bool downSpaceKey = false;
		Point posStart;


		public Form1()
		{
			InitializeComponent();
		}

		// フォームロード時
		private void Form1_Load(object sender, EventArgs e)
		{
			// サンプル画像を PictureBox に読み込む
			Bitmap b = new Bitmap(@"sample.png");
			pictureBox1.Image = b;
		}

		// ボタンクリック時
		private void Button1_Click(object sender, EventArgs e)
		{
			// ボタンを押した後にスペースキーでボタンをクリックさせない対処
			ActiveControl = null;
		}

		// スペースキーを押した時
		private void Form1_KeyDown(object sender, KeyEventArgs e)
		{
			if (e.KeyCode == Keys.Space)
			{
				pictureBox1.Cursor = Cursors.Hand;
				downSpaceKey = true;
			}
		}

		// スペースキーを離した時
		private void Form1_KeyUp(object sender, KeyEventArgs e)
		{
			if (e.KeyCode == Keys.Space)
			{
				pictureBox1.Cursor = Cursors.Default;
				downSpaceKey = false;
			}
		}

		// マウスクリック時
		private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
		{
			isDragging = true;
			posStart = e.Location;
		}

		// マウスドラッグ時
		private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
		{
			if (isDragging && downSpaceKey)
			{
				Point pos = new Point(
					e.Location.X - posStart.X,
					e.Location.Y - posStart.Y);

				panel1.AutoScrollPosition = new Point(
					-panel1.AutoScrollPosition.X - pos.X,
					-panel1.AutoScrollPosition.Y - pos.Y);
			}
		}

		// マウスドラッグ終了時
		private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
		{
			isDragging = false;
		}
	}
}