SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Unityで幾何を
やる話
KMC-ID:ten
自己紹介
⚫ ID:ten
⚫ 京大情報学科3回計算機
⚫ Twitter:@ten986,@ten986_2600
⚫ ゲーム制作をしているつもり
⚫ 競プロやったことないです
近況
近況
近況2
⚫ これは財布の中身です
近況3
Unityで幾何を
やる話
KMC-ID:ten
幾何
⚫ 図形的なことをします
○ 点と線分の距離
○ 点と多角形の内外判定
○ 多角形の面積
おにぎりのわぎり
⚫ 「Unity1週間ゲームジャム」参加作品
⚫ おにぎりを円形に切る
⚫ 直線によって切る
⚫ 円に近い/面積が大きいほど高得点
⚫ https://unityroom.com/games/round_slice
今日話すこと
⚫ おにぎりのわぎりの実装の説明
⚫ Unityで幾何をするための知見
前準備
⚫ Unityで幾何をやるための前準備
⚫ PolygonCollider2Dを
判定する多角形として用いる
前準備
⚫ PolygonCollider2DのパスをVector2[]に変換しておく
⚫ GetPathという関数があります
前準備
⚫ PolygonCollider2Dのパスの座標は
「transformを適用する前の座標」
⚫ ワールド座標を取得したいなあ
⚫ さっき取得した座標にtransformを適用する
⚫ TransformPointという関数があります
おにぎりのわぎりの実装
1. おにぎりを切る
2.面積を測る(面積が大きいほど高得点)
3.円っぽさを測る(円に近いほど高得点)
おにぎりを切る
⚫ unity-sprite-cutterを使った
○ 凸多角形を直線で切れる
○ 若干改造して
単純な多角形に拡張&バグ取り
⚫ http://baba-s.hatenablog.com/entry/2017/12/31/163100
おにぎりを切る
⚫ 中のコードを見た
⚫ 幾何なんだけど、それ以上に
Unityの闇の部分に触れてる
⚫ ので、説明は割愛
⚫ ちなみにAsset Storeに
もっといいやつがあるっぽい
面積を測る
⚫ さっき取得した多角形の座標を元に面積を測る
⚫ このサイトを参考にした
⚫ https://imagingsolution.net/math/calc_n_point_area/
面積を測る
⚫ さっきのサイトによると
右のようになるらしい
⚫ 座標は取得できるので、
あとは実装するだけ!
面積を測る
⚫ 実装(数式をそのまま写したくらい)
⚫ 引数はパスとtransform
円っぽさを測る
⚫ (これは結構難しかった)
⚫ 円っぽさってなんやねん
⚫ まず定義します
円っぽさを測る
⚫ 多角形内部の任意の点において
⚫ 外周のうち最も近い点との距離
⚫ 外周のうち最も遠い点との距離
⚫ この2つの距離の比の最大値
⚫ 真円度っていう概念があるらしい
○ その定義に基づいてるので妥当っぽい?
円っぽさを測る
⚫ これを実装するには?
⚫ 点と多角形の内外判定
⚫ 点と線分の最も近い距離(っていうか距離)
⚫ 点と線分の最も遠い距離
点と多角形の内外判定
⚫ 以下のQiitaを参考にした
⚫ https://qiita.com/ykob/items/6118b8e2e7ddcd8b6355
⚫ 点と多角形の各点とのなす角の合計が360°になる
場合、その点が多角形に内包されている、ということ
になるらしい。
点と多角形の内外判定
⚫ 実装
⚫ ほぼ写した
点と線分の最も近い距離
⚫ 以下のQiitaを参考にした
⚫ https://qiita.com/yellow_73/items/bcd4e150e7caa0210
ee6
点と線分の最も近い距離
⚫ 記事によると、点と線分上の点との距離の2乗は
下に凸の2次関数になる
⚫ それのある範囲内の最小値を求めるのは高校数学~
○ 頂点が範囲内に含まれていれば頂点
○ そうでないなら範囲の端っこのどっちか
点と線分の最も近い距離
⚫ 実装
⚫ 写(ry
点と線分の最も遠い距離
⚫ 記事によると、点と線分上の点との距離の2乗は
下に凸の2次関数になる
⚫ ある範囲内の最大値は最小値より簡単
○ 範囲の端っこのどっちかが必ず最大値
点と線分の最も遠い距離
⚫ 実装
⚫ 2つの端点との距離のMaxを取ってる
円っぽさを測る
⚫ 道具は全部用意した!
⚫ ということでいよいよ円っぽさを測ります
⚫ 次のスライドの再掲する手順で実装します
円っぽさを測る(再掲)
⚫ 多角形内部の任意の点において
⚫ 外周のうち最も近い点との距離
⚫ 外周のうち最も遠い点との距離
⚫ この2つの距離の比の最大値
⚫ 真円度っていう概念があるらしい
○ その定義に基づいてるので妥当っぽい?
何はともあれ
⚫ まずはパスをワールド座標に変換しておきましょう
多角形内部任意の点をとる
⚫ 多角形内部の任意の点とは?
⚫ 任意の点を取ることは不可能
⚫ 多角形内にある程度細かく点をとりましょう
多角形内部任意の点をとる
⚫ 多角形の上下左右端をとる
⚫ その内部に細かく点をとろう
多角形内部任意の点をとる
⚫ 縦横それぞれn=30(+1)分割します
⚫ 961個の等間隔な点それぞれについて内部か判定
⚫ 内部なら以降の
判定をする
そういえば
⚫ 2つの距離の値から比を求める関数を用意しておく
⚫ 実装は、まぁはい。
⚫ 評価関数を変えたくなったときに便利なのでね
内部の点それぞれを見る
⚫ 内部の点それぞれについて、
○ 外周のすべての線分との距離の最小値を求める
○ 外周のすべての線分との距離の最大値を求める
○ 距離の最小値÷距離の最大値(つまり比)を求める
○ その値が今までで最大なら記録
内部の点それぞれを見る
⚫ 最大値を取るために初期化
⚫ 適当な点を取って、最大値を-∞にしとく
○ いつもの
点と線分との距離の最小値
⚫ パス内の線分を順にみていく
⚫ 距離が最小なら記録
点と線分との距離の最大値
⚫ パス内の線分を順にみていく
⚫ 距離が最大なら記録
距離と距離の比を計算
⚫ 距離の最小値÷距離の最大値(図ではValue)を求める
⚫ その値が最大なら記録
⚫ すべての点で見たら、
maxValueを返す
円っぽさを測る
⚫ 以上の手順で求めたmaxValueが求めたい円っぽさ
⚫ お疲れ様でした!!!
⚫ スライドの半分、円っぽさの計測じゃねえか
まとめ
⚫ Unityで幾何がやれます
○ このスライドの前準備をするといい感じになる
○ 図形っぽい話だけど他に無さそうな機能だったら
自分で実装できる!すごい!
⚫ ある図形的操作は調べれば割と出るので、
自分のやりたい手順を分割してそれぞれ調べて実装、
っていう感じになるかなあ

Weitere ähnliche Inhalte

Was ist angesagt?

ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことMASA_T_O
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移まべ☆てっく運営
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
設計してますか?
設計してますか?設計してますか?
設計してますか?ke-m kamekoopa
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解したtorisoup
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話torisoup
 
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニックUnityTechnologiesJapan002
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
 Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み) Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)Sindharta Tanuwijaya
 
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能Unity Technologies Japan K.K.
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!com044
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話torisoup
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 FallYoshitaka Kawashima
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装Koji Morikawa
 
エターナらないゲーム開発
エターナらないゲーム開発エターナらないゲーム開発
エターナらないゲーム開発Kohki Miki
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編Hiroto Imoto
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 

Was ist angesagt? (20)

ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
設計してますか?
設計してますか?設計してますか?
設計してますか?
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 
UE4とUnrealC++について
UE4とUnrealC++についてUE4とUnrealC++について
UE4とUnrealC++について
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
 Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み) Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
Behaviour Tree AI in Gentou Senki Griffon (幻塔戦記グリフォンでのBehaviour Treeの試み)
 
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
 
エターナらないゲーム開発
エターナらないゲーム開発エターナらないゲーム開発
エターナらないゲーム開発
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編
 
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 

Mehr von 京大 マイコンクラブ

かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話京大 マイコンクラブ
 
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換京大 マイコンクラブ
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ京大 マイコンクラブ
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?京大 マイコンクラブ
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜京大 マイコンクラブ
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会京大 マイコンクラブ
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」京大 マイコンクラブ
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編京大 マイコンクラブ
 

Mehr von 京大 マイコンクラブ (20)

テキストファイルを読む💪 第1回
テキストファイルを読む💪  第1回テキストファイルを読む💪  第1回
テキストファイルを読む💪 第1回
 
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
 
Common Lisp入門
Common Lisp入門Common Lisp入門
Common Lisp入門
 
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
 
エンジニアと健康
エンジニアと健康エンジニアと健康
エンジニアと健康
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
 
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったらもし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
 

Geometry with Unity