【ゲームエンジン】Unityなんでも質問スレpart11at GAMEDEV
【ゲームエンジン】Unityなんでも質問スレpart11 - 暇つぶし2ch500:名前は開発中のものです。
23/09/08 10:54:51.47 CzNlMLJh.net
綴り間違えてたgannmaはローマ字なんで、Gammaね

501:名前は開発中のものです。
23/09/08 11:34:44.12 BSXDA/IL.net
>>498
そのとおりです
>>499
なるほど
ありがとうございます
資料探して勉強してみます

502:名前は開発中のものです。
23/09/08 14:34:56.96 XdHQtCgD.net
ゲームオブジェクトの取得ですが、thisとthis.transformとthis.transform.gameobjectに違いはありますか?
プリントしてもどれもオブジェクトは取得出来ているようです

また、transformクラスはゲームオブジェクトの操作関係だと思うんですが、だとしたらtransformクラスはゲームオブジェクトの下位にあるべきと思うのですが、this.transform.gameobjectの例ではなぜゲームオブジェクトが下位にあるんでしょうか?

503:名前は開発中のものです。
23/09/08 14:40:47.89 sVV+A+b6.net
transformのほうが上位ぞ

504:名前は開発中のものです。
23/09/08 15:19:23.83 XdHQtCgD.net
ありがとうございます。
thisでゲームオブジェクトが取れているわけではないのですか?
printした結果はすべて同じなんですよね
まあ、こうやって取るものだと覚えます

505:低クオリティでごめんねごめんね
23/09/08 15:59:57.42 OYwRjle1.net
多分読まないと思うけど
URLリンク(docs.unity3d.com)
Transform はComponentから
GameObjectはObjectからの継承
Component.transform
Component.gameObject
GameObject.transform
の関係かなぁ
分かりにくいけどね
んでThisは
URLリンク(docs.unity3d.com)
ここ読んでなんとなくわかってもらえるといいけど
// Removes this script instance from the game object
Destroy(this);
これやるとゲームオブジェクトは消去されないでscript instance
のみ消えるというから要注意

506:名前は開発中のものです。
23/09/08 16:06:09.34 XdHQtCgD.net
>>505
何でそういう事言うんですか(*´ω`*)
理解出来なかったけども、そういうやり方だと覚えます

507:低クオリティでごめんねごめんね
23/09/08 17:12:53.58 OYwRjle1.net
>>506
そういう事? どの部分?
読まないと思うけどってとこかな?
チュートリアルしない人が公式マニュアル読むとは思わなくて、ごめんね
それより、あなた以前の質問でさ
0470名前は開発中のものです。
2023/09/05(火) 16:53:49.91ID:RMKLnaCW
気をつけられる部分があれば次からそうします。
>>468
どの部分でしょうか?
0471名前は開発中のものです。
2023/09/05(火) 17:51:36.40ID:lyIzARh6
>>470
とりあえずコテハン付けると良いよ
そうすれば不快に思う人はNGできるんで
気を付ける部分あればそうしますって言っててコテハン付けてって
言われてるんだから、付けなよ
それくらい出来るでしょ
そうすれば、答えないようにするからさ
じゃないと分からなくて

508:名前は開発中のものです。
23/09/08 17:36:20.83 9GLaEiS+.net
>>502
Debuglogでthisを出すとアタッチしたゲームオブジェクト名が出るけどthisはアタッチしたスクリプト自体な
他のコンポーネントをDebuglogで出せば分かるけど
transformはまんまインスペクタにあるコンポーネントだよ
this.transformはtransformコンポーネントを参照しててthis.transform.gameobjectはゲームオブジェクト自体を参照してる

509:名前は開発中のものです。
23/09/08 20:57:05.39 +NIew3qL.net
やっぱり何度やってもユニティアセットの決済ができん。
クレカ変えてもブラウザ変えてもダメ。
売る気ないのかな?

510:名前は開発中のものです。
23/09/09 06:36:56.17 OIsKWx3l.net
お前に売るアセットはねぇ!出禁じゃ!m9⎛´・ω・`⎞ドーン!>>509

511:名前は開発中のものです。
23/09/09 06:45:24.50 kCAfKsgC.net
クリック位置のオブジェクトをマウスでドラッグして移動したいのですが、以下のスクリプトだとドラッグ途中にオブジェクトが止まってしまいます。コメントアウトしている部分の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;
}
}

512:名前は開発中のものです。
23/09/09 06:49:35.57 kCAfKsgC.net
>>508
スクリプト自体ですね
カッコの中を見るんですね
object(unityengine.gameobject)
みたいな形式になってるから、少し混乱(*´ω`*)

513:名前は開発中のものです。
23/09/09 08:28:25.54 3k5BPIDG.net
>>511
恐らくこのコードだとオブジェクトがマウス追随するのは
オブジェクトのうえにマウスがある時だけなんじゃないかな?
マウスの動きは結構早いからこれでは外れてしまう
俺ならノーマル状態、追随状態と複数の状態を作り
通常はノーマル状態でマウスクリック時に
オブジェクトがあった時追随状態に移行して
追随状態の時はオブジェクトの上にマウスがあるかどうかは
関係なく追随という仕様にする
それでマウスクリック解除でノーマル状態に移行

514:名前は開発中のものです。
23/09/09 10:05:11.65 kCAfKsgC.net
>>513
確かにマウス速度を早めると外れますね
フレームの実行速度をマウスの速度が上回ると駄目ってことですね
なるほど ありがとう(*´ω`*)

515:名前は開発中のものです。
23/09/09 10:16:03.59 OIsKWx3l.net
やっぱ低クオリティガイジ以外の回答者はクオリティ高いお!m9(*´ω`*)ドーン!

516:名前は開発中のものです。
23/09/09 11:00:00.95 kCAfKsgC.net
>>513
状態はステートで変化させる感じでしょうか。
一回取得したら、ボタンを離すまでそのオブジェクトを追従するという感じですよね

517:名前は開発中のものです。
23/09/09 11:37:05.63 3k5BPIDG.net
>>516
状態なんてなんでもいい
Switch文だろうがboolだろうがやりやすいやり方でやればいい
要するに「追随状態」を維持すればいいだけ
「追随状態」を維持すればマウスがターゲットオブジェクトから
離れてもターゲットオブジェクトが移動してくれる
追随状態の切り替え方も「マウス押しっぱなし
の時に追随」とか「マウス1回クリックするごとに
切り替え」とか好きに考えればいい
上のコードの「マウスがオブジェクトの
上の時だけ追随を認識」というのが
具合がよろしくない

518:名前は開発中のものです。
23/09/09 12:19:23.28 kCAfKsgC.net
ありがとう 簡単な分岐なのでboolでやってみます

519:名前は開発中のものです。
23/09/09 12:53:57.25 kCAfKsgC.net
かなり初歩的ですみませぬ
update内でboolを切り替える場合、ずーっとfalseに代入され続けてしまうのですが、クリック時にのみ発動してほしいイベントに使うわけですから、使わないときも代入され続けたら無駄ですよね。
こういうときはどんな書き方をするもんでしょうか、、、。
bool objectCapture = false;
void Update()
{
if (Input.GetMouseButton(0))
{
objectCapture = true;
print("true");
}
else {
objectCapture= false;
print("false");
}

520:名前は開発中のものです。
23/09/09 13:08:12.41 fHIrkeW+.net
透明な板敷けば良いのでは
ドラッグ開始  clickedObjectにレイ飛ばしたオブジェクトを入れる。clickedObjectのコリジョンを消す
ドラッグ中 clickedObjectが空でないならclickedObjectをレイ飛ばした位置に移動。
ドラッグ終了 clickedObjectにコリジョンを復帰してclickedObjectを空

521:名前は開発中のものです。
23/09/09 13:18:08.40 3k5BPIDG.net
>>519
俺は平気で同じ代入してる
エキスパートの回答は知らない

522:名前は開発中のものです。
23/09/09 13:26:36.62 3k5BPIDG.net
同じ代入をするのが嫌なら「このステートでは
この処理、別のステートではあの処理」
みたいに明確に分けるしかないんじゃないの
今後エキスパートになろうと思ったら
必要なプロセスかもしれない

523:名前は開発中のものです。
23/09/09 13:46:41.50 n240SOPq.net
普通にmousebuttondown と up じゃ駄目なん?

524:名前は開発中のものです。
23/09/09 13:53:13.52 3k5BPIDG.net
>>523
それだと「クリックごとに切り替える」という
仕様を採用するということになるが
若干不便かな
今がノーマル状態なのか追随状態なのか
判別が紛らわしいから

525:名前は開発中のものです。
23/09/09 13:53:53.72 3k5BPIDG.net
>>524
これ勘違い
無し

526:名前は開発中のものです。
23/09/09 17:01:41.89 kCAfKsgC.net
>>521
ありがとう
別に気にするほどの負荷にはならなそうですよね
自分はゲームの完成よりどうでもいい部分にこだわってしまうのが、駄目みたいです(*´ω`*)

527:名前は開発中のものです。
23/09/09 17:05:51.31 OIsKWx3l.net
そして低クオリティガイジが死んで嬉しいです!m9(*´ω`*)ドーン!

528:名前は開発中のものです。
23/09/09 17:14:29.36 tG9qh3d0.net
俺は1週間で何も作れないくせに「UnityよりUnreal Engineの方が良い」とか言っちゃうUEガイジに死んでほしい

529:名前は開発中のものです。
23/09/09 17:26:06.82 OIsKWx3l.net
>>528
お?久々のUEアンチガイジやんけ?忍魂は未だ完成せんの?m9⎛´・ω・`⎞ドーン!

530:名前は開発中のものです。
23/09/09 17:27:03.31 GwlW4d3s.net
ueのほうが簡単で処理が重い

531:名前は開発中のものです。
23/09/09 17:37:33.76 GwlW4d3s.net
あとc++をつかおうとすると途端に難しくなる

532:名前は開発中のものです。
23/09/09 19:38:03.74 97fA3UcO.net
>>530
C#の方がよっぽど簡単で処理が早い

533:名前は開発中のものです。
23/09/09 19:40:56.43 N6Jqv8oj.net
じゃあ処理速度が必要なところがC++で書かれてる理由は?

534:名前は開発中のものです。
23/09/09 19:49:40.70 GwlW4d3s.net
>>532
少なくともBPのほうが簡単
そしてBPは当然アホほど処理が重い

535:名前は開発中のものです。
23/09/09 21:35:14.34 tG9qh3d0.net
>>534
BPより遥かにC#の方が簡単

536:名前は開発中のものです。
23/09/10 07:14:00.87 RiJBdYqx.net
C#ならググって出てきたコードそのままコピペ出来るけど
BPってどうすんの???m9⎛´・ω・`⎞ドーン!

537:名前は開発中のものです。
23/09/10 07:54:32.05 nCKHuG8g.net
>>536
それな

538:名前は開発中のものです。
23/09/10 10:45:26.10 Bt7BAgSw.net
ドーン叔父ってこのドン・キホーテのCMに合わせて出現してるんか?
URLリンク(www.youtube.com)

539:名前は開発中のものです。
23/09/10 11:05:12.05 RiJBdYqx.net
>>538
なんだぁ?最近の低クオリティ餓鬼は喪黒福造も知らんのかぁ?m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
URLリンク(www.youtube.com)

540:名前は開発中のものです。
23/09/10 11:29:56.30 Bt7BAgSw.net
いや、知ってるよ
なんでこのタイミング出てきたかっていうことを聞いているだけ
大橋巨泉、藤子不二雄、徳川埋蔵金見てたよ

541:名前は開発中のものです。
23/09/10 11:32:44.50 RiJBdYqx.net
>>540
お前ぜってーアラフォやんけwwwm9⎛´・ω・`⎞ドーン!
URLリンク(i.imgur.com)

542:名前は開発中のものです。
23/09/10 15:16:17.39 nCKHuG8g.net
>>540
昔からおるよ

543:名前は開発中のものです。
23/09/10 21:08:25.55 DCSKbLST.net
2d移動についてなのですが、positionの変更による移動だとなんだかもっさりします
何か理由はあるのでしょうか?
velocityによる移動でも良いかなとは思いますが、軽い方法はありますか
void Update()
{
horizontalMovement();
VerticalMovement();
}
void horizontalMovement()
{
float horizontalKey = Mathf.Round(Input.GetAxis("Horizontal"));
if (horizontalKey > 0)
{
this.transform.position += new Vector3(1, 0, 0) * speed * Time.deltaTime;
}
else if (horizontalKey < 0)
{
this.transform.position += new Vector3(-1, 0, 0) * speed * Time.deltaTime;
}
else
{
horizontalKey = 0;
}
}

544:名前は開発中のものです。
23/09/11 06:05:55.70 CutQJqWR.net
調べたらtrasnformの移動って重いんやね
velocityにするです

545:名前は開発中のものです。
23/09/11 12:57:05.38 hY5yKmdD.net
GetAxisRawで四捨五入せず使ってはどうかしら?

546:名前は開発中のものです。
23/09/11 13:09:39.79 CutQJqWR.net
ラウンド外してみました
しかし、トランスフォームを使った移動自体が重いみたいです
なんだかもっさりしているのでvelocityを使います
重力ゼロなので、物理は使わずコリジョンだけなんですけどもね

547:名前は開発中のものです。
23/09/11 14:20:55.45 hY5yKmdD.net
補足ですが、
GetAxisはキーボードでの入力であっても0から1の値に時間をかけて変化します。
mathfで四捨五入したら0.5より大きくなるまでは0に切り捨てられ、動き出しが遅れます。
なのでGetAxisに四捨五入はやったらいかんです。
また、ボタンを離し1から0への変化にも時間がかかるので、ボタン離してから止まるまでもラグがあります。
ここでもっさりしていませんか?
入力された方向の1or-1の値を即座に返して欲しいならばGetAxisRaw使うのです。

548:名前は開発中のものです。
23/09/11 14:32:19.91 CutQJqWR.net
>>547
ありがとう
getaxisrawってのを使ってみました
これは自動的に丸めてくれるんですね
getaxisだと0か1かではなくジワーと動くので、getaxisrawのほうがいいかもですね
ありがとう

549:名前は開発中のものです。
23/09/11 17:35:22.27 CutQJqWR.net
たびたびすみません、2d移動させたいのですが、横移動している間は縦移動しない、縦移動している間は横移動しない、という条件にするにはどう書けばいいんでしょうか?
プログラミング脳がなくてすみません
void characterMovement()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
rb.velocity = new Vector2(x, y) * speed;
}
これだと斜め移動が可能になります

550:名前は開発中のものです。
23/09/11 18:42:19.57 hY5yKmdD.net
とりあえず、とにかく簡単にナナメ移動は禁止よ~としたいならば、
キーの入力値の取得後に、横移動の入力値が取れたら縦移動の値は強制的に0にしてしまえ!という条件判断入れる。
縦移動入力は、xが0の時にだけ反映される。
if(x != 0f){
y = 0f;
}
問題点は斜め入力時は必ず横移動が優先されると言う事だが…
横移動してる時に縦入力は受け付けたくないし、
縦移動してる時に横入力は受け付けたくないんじゃーと言うならもう少し複雑になる。

551:名前は開発中のものです。
23/09/11 19:38:23.63 CutQJqWR.net
ありがとう
小一時間考えてみたけど自分にはロジックが思いつかない
ゲームの本質部分でもないので、今回は諦めます(*´ω`*)

552:名前は開発中のものです。
23/09/11 21:12:51.17 y0R59DfA.net
>>551
rb.velicityのところをifで囲んでx!=0&&y!=0ならvector2.zeroにしたらいいと
思うよ。
elseにはrb.velocity=new vector2(rb.velocity.x+x,rb.velocity.y+y)
でいけないかな?

553:名前は開発中のものです。
23/09/12 04:09:32.73 FBCYzsoY.net
>>552
ありがとう
いけました
プレイしてみて操作しやすい方式を選ぼうと思います(*´ω`*)

554:名前は開発中のものです。
23/09/13 06:32:40.63 HkRVH3vp.net
ちわす
倉庫番的なゲームを作りたいのですが、キャラクターがブロックを押す動作の作り方を知りたいです
二次元配列でブロックを配置しているのですが、キャラクターの移動先の番地にブロックがあった場合、キャラの移動方向にそれを移動すると言った考え方でいいでしょうか?

基本的な考え方を知りたいです

コリジョンつけてやる方法もあるとは思いますが、余計にややこしくなりそうですね
今はおそらく配列を使ったやり方で取り掛かってます

555:名前は開発中のものです。
23/09/13 07:16:01.37 droDxID/.net
ちわすとかどもすとかいちいち気持ち悪い言葉遣いは
どうにかした方がいい
俺ら友達でもないし先輩後輩でもない
赤の他人なんだから

556:名前は開発中のものです。
23/09/13 10:59:10.85 NhNUwKHN.net
どうもすみません……

557:名前は開発中のものです。
23/09/13 11:08:11.53 droDxID/.net
>>554
俺が昔読んだ本では配列で処理していて
自キャラから見て進行方向にブロックが
ある場合、そのまたひとつ向こう側を
チェックして、何も無い場合ブロックと
自キャラを移動、何かあった場合移動は無効
という仕様だった

558:名前は開発中のものです。
23/09/13 14:09:45.99 HkRVH3vp.net
>>557
ありがとうございます
配列のパズルって案外難しいですよね チャレンジします(*´ω`*)

559:名前は開発中のものです。
23/09/13 14:12:58.06 ATros1XL.net
(*´ω`*)お前質問するときも顔文字使えや?みんな無視してくれるから(*´ω`*)

560:名前は開発中のものです。
23/09/13 22:36:31.19 fiBpMonJ.net
Scope.SetVariable("hoge", (string str) => Console.Write($"Hello, {str}!"));
Engine.Execute("hoge('World')", Scope);
------------------
Console出力 : Hello, World!
↑はIronPythonの例ですが、こんな感じで文字列からインタプリタ的にC#側のオブジェクトを操作したいです
マルチプラットフォームで似たようなことをする方法ってありますか?
クラスが存在する程度に高級であればPythonに拘りはないです

561:名前は開発中のものです。
23/09/14 01:29:36.75 ZfVGpqaa.net
すみません、利用規則についての質問ですが
来年から課金体系が変わるとアナウンスされてますが個人制作のフリゲの扱いは何も変わらないのでしょうか

562:名前は開発中のものです。
23/09/14 02:06:05.54 vnwuY/kN.net
>>561
変わらない


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch