【Unity】スプライトで罠にハマる

大したネタもないので、小ネタを… アセットストアから完成品を落として、 スプライトの差し替えをしようと操作していたら、 スプライトがアタッチできない事がありました。 最初は、完成品アセットなんで、何かロックされているのかな? と思っていたのですが、アセットから落としてきたスプライトなら アタッチできる事に気付きました。 自分でインポートしたスプライトは、 なぜかアタッチができない状況でっす。( ノД`)シクシク… 2DスプライトやCanvasのImageにもアタッチできません。 正直、訳が分からない状況だったので、 Unityのトラブル? それとも完成品アセットの仕様? この辺りを調べる為に自作のプロジェクトを立ち上げて、 様子を見る事にしました。 プロジェクトを立ち上げた所で、 背景スプライトをインポートします。 インポートしたスプライトをドラッグしてヒエラルキーに落とします。 無事にオブジェクト化できました。 やはり完成品は、何かのロックでもされているのでしょうか? アセットは、2D Flexible Platformer Controller、アクション系の完成品アセットです。 改変OKで、商用利用OKの優良な無料アセットですぅ。 さてさて、スプライトをインポートしてみます。 このスプライトをドラッグして、ヒエラルキーやシーンビューに持って行っても ドロップ不可のマークが出ます。 正…

続きを読む

【Unity】ドロップしたオブジェクトを元に戻す

初めての方は、関連記事 【Unity】Objectをマス目に合わせてDropする この記事から続く内容となっています。 大砲オブジェクトの合成と言う事で書いてきましたが、 いよいよ完結となります。 一応、曲がりなりにも合成ができるようになりました。 (バグが残ってそうですが… ) しかし、これで終わりとは行かないですね~ 現状、違う種類や違うLvの大砲をドロップすると 削除もされず重なったままになります。 合成操作としては問題ありでっす。(..*) オハズカシイ・・ 違う大砲が重なった場合、動かす前の位置に戻す必要があります。 動作は ・ドラッグ ・ドロップ ・違えば戻す 単純な動作です。 しかし… 実は、かなり試行錯誤しながら処理を考えました。 出来上がった処理が、 なぜ?となるので説明したいのですが、 上手く説明できないと言うか… なので、検証していった事をそのまま記事にしようと思います。 最後に完成版のスクリプトを載せるので、 検証内容を読み飛ばしてもらってもOKでっす。 まず、大砲の戻り位置を記憶させる必要があります。 単純な話、ドラッグ時に大砲の位置を記録すればいいのですが… private Vector3 backpos; //大砲の戻り座標 //ドラッグ時の処理 public void OnDrag(…

続きを読む

【Unity】オブジェクトをドロップして合成する

大砲を合成する所まで出来たわけなんですが、 コラインダーが複数接触しているとバグる可能性があると言う事で、 修正が必要になってきました。 コラインダーの大きさを調整してみたり、 オフセットを弄ってみたり… なかなか思うようにいかないものですね~(~ヘ~;)ウーン そもそも、ドラッグ中は合成しないと言う条件が 厳しかったりします。 OnCollisionで合成処理をすると何かに接触しただけで合成されるので、 コラインダーを使わずに重なりを判別する方法… 余計に複雑になりますね~(T^T) ヒック いろいろと考えてる内に、 ドラッグ中にOnCollisionが働かなければ良いのでは!? と言う考えに至りまして、処理方法を変える事に… まず、ドラッグ中にOnCollisionが働かないようにするには、 コラインダーが無ければいいので、非アクティブにしてしまえ! と言う考え方でっす。(^.^) オホホホ DragScript private BoxCollider2D boxcoll; //コラインダー取得変数 void Start() { boxcoll = this.GetComponent<BoxCollider2D>(); } //ドラッグ時の処理 public void OnDrag() { …

続きを読む

【Unity】ドラッグ時の接触判定

ドロップ時の処理で書き始めた内容ですが、 少し問題がありまして… 修正でスクリプトを書き直していたら訳が分からなくなって… 頭の中がこんがらがっています。 当然、何から書いていいのやら… 頭の中でまとまってないと書くのも難しいと言うか(~ヘ~;)ウーン 伸び伸びになってるテーマを小出しで書いていくので、 暫くお付き合い下さいませ(゜゜;)ゴメンネ・・・ さて、大砲の複製まで出来るようになったので、 後は、フィールドに出して行けばいいだけなのですが、 やはり合成が必要になってきます。 合成に関しては、Collisionを使えば簡単に判断できるのですが、 問題は、ドラッグ中なら合成しない! 重なっただけで合成してしまうと、元に戻せなくなるので、 ”ドロップ時に合成する”が必要になるかと思います。 しかし、OnCollisionEnterは、衝突時にしか反応しないメソッドなので、 一度、呼び出されると再衝突しないかぎり働かないのが難点です。 OnCollisionStayでも良いのですが、少し重ねておくと 反応して処理が実行されます。 少し工夫が必要になります。 そこで、大砲同士が衝突と離脱を判断できるようにしてみようと思います。 DragScript using System; using System.Collections; using System.Collections.Generic; using …

続きを読む