[過去ログ] 【ゲームエンジン】Unityなんでも質問スレpart11 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
513
(2): 名前は開発中のものです。 [sage] 2023/09/09(土) 08:28:25.54 ID:3k5BPIDG(1/6) AAS
>>511
511(1): 名前は開発中のものです。 [] 2023/09/09(土) 06:45:24.50 ID:kCAfKsgC(1/7) AAS
クリック位置のオブジェクトをマウスでドラッグして移動したいのですが、以下のスクリプトだとドラッグ途中にオブジェクトが止まってしまいます。コメントアウトしている部分のtriangleは問題なくドラッグ出来るので、レイによる取得に問題があるようです。レイというのは案外不安定で、毎回同じ結果を返してくれるとは言えないのでしょうか?
public class getClickPositionObject : MonoBehaviour
{
[SerializeField] GameObject triangle;
GameObject clickedObject;
void Update()
{
if(Input.GetMouseButton(0))
{
//triangle.transform.position = camera.main.screentoworldpoint(input.mouseposition)
// + new vector3(0, 0, 10);
getObject().transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition)
+ new Vector3(0, 0, 10);
}
}
GameObject getObject()
{
//クリックされたゲームオブジェクト
clickedObject = null;
//レイキャストの始点と終点を決定 ,vector2
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//ここでレイを飛ばす
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
if (hit)
{
clickedObject = hit.transform.gameObject;
}
return clickedObject;
}

}
恐らくこのコードだとオブジェクトがマウス追随するのは
オブジェクトのうえにマウスがある時だけなんじゃないかな?
マウスの動きは結構早いからこれでは外れてしまう
俺ならノーマル状態、追随状態と複数の状態を作り
通常はノーマル状態でマウスクリック時に
オブジェクトがあった時追随状態に移行して
追随状態の時はオブジェクトの上にマウスがあるかどうかは
関係なく追随という仕様にする
それでマウスクリック解除でノーマル状態に移行
517: 名前は開発中のものです。 [sage] 2023/09/09(土) 11:37:05.63 ID:3k5BPIDG(2/6) AAS
>>516
516(1): 名前は開発中のものです。 [] 2023/09/09(土) 11:00:00.95 ID:kCAfKsgC(4/7) AAS
>>513
状態はステートで変化させる感じでしょうか。
一回取得したら、ボタンを離すまでそのオブジェクトを追従するという感じですよね
状態なんてなんでもいい
Switch文だろうがboolだろうがやりやすいやり方でやればいい
要するに「追随状態」を維持すればいいだけ
「追随状態」を維持すればマウスがターゲットオブジェクトから
離れてもターゲットオブジェクトが移動してくれる
追随状態の切り替え方も「マウス押しっぱなし
の時に追随」とか「マウス1回クリックするごとに
切り替え」とか好きに考えればいい
上のコードの「マウスがオブジェクトの
上の時だけ追随を認識」というのが
具合がよろしくない
521
(1): 名前は開発中のものです。 [sage] 2023/09/09(土) 13:18:08.40 ID:3k5BPIDG(3/6) AAS
>>519
519(1): 名前は開発中のものです。 [] 2023/09/09(土) 12:53:57.25 ID:kCAfKsgC(6/7) AAS
かなり初歩的ですみませぬ
update内でboolを切り替える場合、ずーっとfalseに代入され続けてしまうのですが、クリック時にのみ発動してほしいイベントに使うわけですから、使わないときも代入され続けたら無駄ですよね。
こういうときはどんな書き方をするもんでしょうか、、、。

bool objectCapture = false;
void Update()
{
if (Input.GetMouseButton(0))
{
objectCapture = true;
print("true");
}
else {
objectCapture= false;
print("false");
}
俺は平気で同じ代入してる
エキスパートの回答は知らない
522: 名前は開発中のものです。 [sage] 2023/09/09(土) 13:26:36.62 ID:3k5BPIDG(4/6) AAS
同じ代入をするのが嫌なら「このステートでは
この処理、別のステートではあの処理」
みたいに明確に分けるしかないんじゃないの
今後エキスパートになろうと思ったら
必要なプロセスかもしれない
524
(1): 名前は開発中のものです。 [sage] 2023/09/09(土) 13:53:13.52 ID:3k5BPIDG(5/6) AAS
>>523
523(1): 名前は開発中のものです。 [sage] 2023/09/09(土) 13:46:41.50 ID:n240SOPq(1) AAS
普通にmousebuttondown と up じゃ駄目なん?
それだと「クリックごとに切り替える」という
仕様を採用するということになるが
若干不便かな
今がノーマル状態なのか追随状態なのか
判別が紛らわしいから
525: 名前は開発中のものです。 [sage] 2023/09/09(土) 13:53:53.72 ID:3k5BPIDG(6/6) AAS
>>524
これ勘違い
無し
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.040s