X



【3Dゲームエンジン】Unity質問スレッド32
■ このスレッドは過去ログ倉庫に格納されています
0001名無し@キムチ
垢版 |
2017/10/30(月) 05:05:35.00ID:xnHTCaF3
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他

次スレは>>950以降にできるだけ早く(できれば回答者が回答した後にでも余裕を持って)建てて下さい。

■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/

●リンク
・Unity(日本公式サイト)
http://unity3d.com/jp
・マニュアル
 http://docs.unity3d.com/ja/current/Manual/index.html
・チュートリアル
 http://unity3d.com/jp/learn/tutorials
・スクリプトリファレンス
 http://docs.unity3d.com/ja/current/ScriptReference/index.html
・FAQ
 http://unity3d.com/jp/unity/faq
・MSDN
 http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。

前スレ
【3Dゲームエンジン】Unity質問スレッド31
https://mevius.5ch.net/test/read.cgi/gamedev/1504366121/
0788名無し@キムチ
垢版 |
2017/12/11(月) 19:16:57.23ID:bqjs8mgU
>>785
初心者とはそんな難しいもののことではない。
単純にビギナーのことだ。
0790名前は開発中のものです。
垢版 |
2017/12/11(月) 19:32:44.82ID:T/JrBtRm
>>788
ビギナーは英語で初心者という意味
>初心者とはそんな難しいもののことではない。
>単純に初心者のことだ。
自分の発言が情けないほど意味不明になると思わない?
基礎を学ばずにいるとこうやって無能を晒し恥をかくだけ
分かりやすい例になってくれてありがとう!
0793名前は開発中のものです。
垢版 |
2017/12/11(月) 20:52:55.52ID:u584Mmdp
>>785
では質問、外部サイトの情報をスクレイピングして情報を抽出するゲームを作成しています。
読み出すサイトの文字コードに合わせてSystem.Text.Encodingクラスを用いて変換しているのですが、エディタ上で動かすと正しく動きますが、実機にビルドするとsjisやeucjpなどでエラーとなります。これは何故でしょうか?
0794名前は開発中のものです。
垢版 |
2017/12/11(月) 21:01:24.21ID:u584Mmdp
さて>>793の答え合わせだ。
スタンドアロンプレイヤーはデフォルトでI18n.dllとI18n.CJK.dllを内包しないから、これらをアセット内にぶち込めば解決するが正解な
どうせ質問がちょっと知識や経験が必要な領域になると皆スルーして俺しか答えなくなるんだから仲良くしとけ

>>784
それはヒエラルキー構造もスクリプトも変更する必要はなく、パーティクルのSimulation Spaceを変えるだけで実現可能だよ
エミッタ(=ParticleSystem)自体はどちらであっても車本体の子オブジェクトにして問題ない
0795名前は開発中のものです。
垢版 |
2017/12/11(月) 21:03:22.24ID:wTfFWu/6
2.5dのコマンドRPG作るのにplaymakerって使えますかね?
ターン制の処理をこれにさせたいのですが買おうか迷ってます。
0797名前は開発中のものです。
垢版 |
2017/12/11(月) 21:08:29.22ID:7N8aCxOe
785は滑稽だな
リテラシに慣れていないと、公式マニュアルを読んでも、キーワードを聞いても全く頭に入ってこない人もいる
一般的に言って誰にも苦手な分野はある。例えば日本の役所手続きが良い例
適性が無いとの非難があるかもしれないが、本来、道具は、適性とは無関係に操れるものであるべき
ところで自由競争戦力スキルへの適応を2chで強要するのは傲慢無恥・視野偏狭で滑稽である(プ
0799名前は開発中のものです。
垢版 |
2017/12/11(月) 21:15:59.64ID:L0Sd+qXD
趣味なんて出来なくても死ぬわけじゃないし、
乗れもしない一輪車に勝手に跨って勝手に傷だらけになってるだけじゃない
怪我と弁当は自分持ちで頼むよ
0800名前は開発中のものです。
垢版 |
2017/12/11(月) 22:02:19.01ID:SkZjimvo
詳しい人が降臨しているようなので質問!

角速度
Rigidbody.angularVelocity = new Vector3(a, b, c)
による回転を1秒間行った場合の、

向き(角変位)
Rigidbody.rotation
を、あらかじめ計算でQuaternionを求めておきたいのですが、

Rigidbody.rotation = Quaternion.AngleAxis(angle, axis)
で入力する場合、
float angle = いくつ?
Vector3 axis = いくつ?
に設定すれば良いのでしょうか??

普段は実際に時間をかけて回転させるのですが、
ショートカット入力によって、瞬間的に向き変更したためです。

普段は速度velocityで移動させていたのを、
瞬間的に位置positionで変位させるのと同じ感じです。
0801名前は開発中のものです。
垢版 |
2017/12/11(月) 23:16:52.47ID:T/JrBtRm
初心者は基礎勉強を習得した後に応用問題などで躓く者
無能は怠慢で基礎勉強をせずに全てに躓く者
そして自分は初心者だと勘違いしてる者
無能と初心者は全然違う

初心者には教えるが怠け者なだけの無能には教えたくはないって人が多いと思う
質問する気になれないなんて者は来なくていいと思う
そいつが消えた所でそいつが困るだけでこっちは何も困らない
どうぞ勝手にお帰り下さいなんじゃないかな?
ましてや自分は初心者だから教えてもらって当たり前なんて思ってる勘違いには特に

悔しいなら無能をやめて初心者になり
教えたい人が思わず教えてやりたくなるような質問したら?
0802名前は開発中のものです。
垢版 |
2017/12/11(月) 23:21:47.98ID:T/JrBtRm
>>794
質問ではなく相手を試す問題だと見抜かれてスルーされた事にそろそろ気づこうか

>>797
悪いが発言内容が超明後日方向でずれてるから
0803名前は開発中のものです。
垢版 |
2017/12/11(月) 23:28:43.27ID:T/JrBtRm
>>794>>797の2人は俺の考えに反対やら滑稽やらなら
ニセ初心者のしょーもない今までの質問全てに全部答えてあげてないと
俺そういう場面見てないんだけど
今も俺にレスするよりそっちが先とおもうけど未処理の物が沢山あるよ
明日からもずっと頼むよお2人さん
俺の考えに反対で反論してくるのはそういうことだから
0805名前は開発中のものです。
垢版 |
2017/12/12(火) 00:07:46.96ID:yWI4yO+J
まさかツッパリが足りずに弱音を吐いて「大目に見てくださいよ〜〜〜><」とか懇願してるわけじゃあるまいな
0807名前は開発中のものです。
垢版 |
2017/12/12(火) 00:29:29.52ID:K5+QKreg
>>800
偉そうに講釈垂れてる人が大勢いるのにこれにレスがつかないの酷すぎないか…

キッチリ1秒後なら

var r = Mathf.Rad2Deg;
Rigidbody.rotation *= Quaternion.Euler(a * r, b * r, c * r);

でどないでしょ
0809名前は開発中のものです。
垢版 |
2017/12/12(火) 02:09:47.10ID:s3bcy12n
@angle = Vector3(a, b, c).magnitude * Mathf.Rad2Deg

3Dの場合、angularVelocityは、rad/秒で入力するので、
a,b,cはrad/秒で入れているはずだから、
angleは度での入力になるため、
* Mathf.Rad2Degで、rad→度の変換が必要ですね

Aaxis = Vector3(a, b. c).normalized

これをQuaternion.AngleAxisに入れると、1秒後の回転状態になります
試してみて下さい

Quaternion.Eulerは、
Z軸回転→X軸回転→Y軸回転の連結回転になるので、
計算結果が、角速度での回転状態と合わないですよ

angularVelocityは全軸同時回転ですから
回転ベクトル=回転角 * 回転軸ベクトル
で計算しないとダメなはず
0811名前は開発中のものです。
垢版 |
2017/12/12(火) 04:00:52.95ID:kM1br0bK
>>794
"unity shiftjis error"でぐぐって一番上に出てくる内容コピってどやってんじゃねーよw
仰られてる知識や経験は、その問題に関してはとくに必要なさそうです
0813名前は開発中のものです。
垢版 |
2017/12/12(火) 07:26:11.46ID:OlgvJzEy
>>811
うん、そのドヤ顔を期待してたw
全く待たずに回答投下してるのに顔真っ赤でスルーされた事に気づけとか書いてる奴がいたのには驚いたが

だかな、この質問俺が数年前過去スレに質問して回答が得られなかった質問なんだわ、その後自己解決して方法も書いたはず
2017年4月のそのTIPS見て、同じようなことで困ってる奴多かったんだなと懐かしく思った記憶がある

>>800
すまん、昨日は撒き餌撒いて寝てしまったので見てなかった
回答はついてる様なので省略するが、物理エンジンで動かす場合、摩擦やら他のオブジェクトとの衝突やらで結果がズレる可能性があることには注意な
0814名前は開発中のものです。
垢版 |
2017/12/12(火) 07:26:33.24ID:yWI4yO+J
仕様奴隷「俺はこんなにも素晴らしい奴隷なんだ!もっと俺をこき使ってくれぇええ!!」(ドヤァアアア!!!)
0815名前は開発中のものです。
垢版 |
2017/12/12(火) 07:29:16.97ID:QJDJOOiE
レベルデザインに使えるツール教えてください
アセットでもいいです
0818名前は開発中のものです。
垢版 |
2017/12/12(火) 09:37:16.36ID:QJDJOOiE
>>817
アセットのセットみたいなのがほしいです
フリーで
0819名前は開発中のものです。
垢版 |
2017/12/12(火) 10:39:07.71ID:qFAu6kJp
アセットじゃないけどスケッチアップなんてどうだい?
CADツールだけどUnityでそのままスケッチアップ形式のファイルを読み込むことができるんだ

そしてウェアハウスっていうUnityでいうアセットストアのようなところで他人の作ったオブジェクトをダウンロードできるんだ

ただし無償版でどこまでできるか把握してないから
気になったら調べてごらんよ
0820名前は開発中のものです。
垢版 |
2017/12/12(火) 11:37:29.41ID:V4vKOuq6
VS for Macでコーディングしている人いる?
予測コーディングが効かなかったり、最近のアプデで日本語入力がリアルタイムで表示されなくなったり、子音の入力が反応悪かったり
色々ボロボロで進捗やばいんだけどMacでの開発に向いてるテキストエディタ何か無いかしら?
0823名前は開発中のものです。
垢版 |
2017/12/12(火) 17:04:49.48ID:SinzmT6m
VS codeを使うといい
for macは対応が不完全なゴミだがcodeはmacでも完璧に使える
金払ってもいいならRider
0825名前は開発中のものです。
垢版 |
2017/12/12(火) 18:36:56.62ID:w86KIWp6
>>807 >>808
>>809
ありがとうございます!
両方やってみました

Quaternion Q;
Vector3 axis, Vdeg, Vrad;
float angle, t;
Rigidbody rb;

void Start () {
 rb = GetComponent < Rigidbody > ();
 Vdeg = new Vector3(45, 30, 0);
 Vrad = new Vector3(45, 30, 0) * Mathf.Deg2Rad;
 Q = rb.rotation;
}
0826名前は開発中のものです。
垢版 |
2017/12/12(火) 18:37:14.48ID:w86KIWp6
void FixedUpdate () {
 t = Time.time;
 if (t == 0) {
  rb.angularVelocity = Vrad;
 } else if (t == 1.0f) {
  Debug.Log ("t=" + t);
  Debug.Log ("angularVelocity:" + rb.rotation.eulerAngles);
  rb.angularVelocity = Vector3.zero;

  //angle = Vrad.magnitude * Mathf.Rad2Deg;
  //axis = Vrad.normalized

  angle = Vdeg.magnitude;
  axis = Vdeg.normalized;

  rb.rotation = Quaternion.AngleAxis (angle, axis);
  Debug.Log ("AngleAxis:" + rb.rotation.eulerAngles);

  rb.rotation = Quaternion.Euler(Vdeg);
  Debug.Log ("Euler1:" + rb.rotation.eulerAngles);

  rb.rotation = Q * Quaternion.Euler(Vdeg);
  Debug.Log ("Euler2:" + rb.rotation.eulerAngles);

  rb.rotation = Quaternion.Euler(Vdeg) * Q;
  Debug.Log ("Euler3:" + rb.rotation.eulerAngles);
 }
}
0827名前は開発中のものです。
垢版 |
2017/12/12(火) 18:41:32.25ID:w86KIWp6
結果です!

angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad
を入力すると、

@angularVelocity:Vector3(42.4, 37.4, 15.0)
 1秒ピッタリで止めるには、FixedUpdate内でないとダメのようですね

 Invoke("Stop", 1.0f)で呼び出すと、
 angularVelocity:Vector3(43.1, 38.6, 15.7)と
 1フレーム分くらいの遅延が生じる模様・・・

AAngleAxis:Vector3(42.4, 37.4, 15.0)

BEuler1:Vector3(45, 30, 0)

CEuler2:Vector3(45, 30, 0)

DEuler3:Vector3(45, 30, 0)

angularVelocityをEulerでQuaternionに入れちゃうと、
角速度による回転結果のQuaternionと少し違うようです・・・
AngleAxisでQuaternionに入れる方が正しいみたいですね
0828名前は開発中のものです。
垢版 |
2017/12/12(火) 18:52:30.96ID:w86KIWp6
>>816

回転が勝手に減速する話は本当ですか?
AngularDrag = 0にしてない・・・とかではなくて??

RigidbodyをangularVelocityやAddTorqueで回転させて、
1秒ごとにangularVelocityを表示させても、
回転速度は落ちてないようなのですが・・・
0829名前は開発中のものです。
垢版 |
2017/12/12(火) 20:43:24.56ID:s3bcy12n
>>826

RigidbodyもRigidbody2Dも、
LinearDragは0が初期値だけど、
AngularDragは0.05が初期値なのが、
気に入らないということでは?
0830名前は開発中のものです。
垢版 |
2017/12/12(火) 20:43:27.01ID:WuPRAOqq
今までモーションは、簡単だからmmdで作ってたけどx軸とy軸の計算違うような……
blenderに乗り換えた方がいいのだろうか。
0833名無し@キムチ
垢版 |
2017/12/12(火) 21:17:33.27ID:pZVPZZmh
>>832
Blenderには気を付けたほうがいい
Blender上では問題なくモーションしてても、unityに取り込んで動かすと、手が体に食い込んだりしているから。
何度か行ったり来たりする必要があるw
0834名前は開発中のものです。
垢版 |
2017/12/12(火) 22:25:16.08ID:oOD9NLJB
blender でもやっぱり同じようなこと起きると思うよ
表現力に不満がないならMMDにしとき
0836名前は開発中のものです。
垢版 |
2017/12/13(水) 00:01:44.95ID:/jokcbje
>>827

最初の回転状態が、
rotatiin =Quaternion.identityであれば、

1: rotation = Quaternion

2: rotation = rotation * Quaternion

3: rotation = Quaternion * rotation

1-3は全て同じ結果になります。

position = Vector3.zeroの場合、

1: position = Vector3

2: position = position + Vector3

1-2が同じ結果なのと一緒です。
0837名前は開発中のものです。
垢版 |
2017/12/13(水) 00:07:16.00ID:/jokcbje
rotationの場合も、positionの場合も、

1は、角変位や位置の絶対指定、
2-3は、角変位や位置の相対指定です。

rotatiin =Quaternion.identityでない場合、
position = Vector3.zeroでない場合、

1と、2-3で、結果が変わってきます。

しかも、rotationの場合、

2: rotation * Quaternionと
3: Quaternion * rotationでも、結果が変わってきます。

追加するQuaternionによる角変位の回転軸を、
transform軸を基準にした回転にする場合は2になり、
キャンバスのVector3軸を基準にした回転にする場合は3になります。
0838名前は開発中のものです。
垢版 |
2017/12/13(水) 00:35:37.82ID:/jokcbje
>>825-827
Invokeが呼び出しの際に1フレーム遅れるとわかっているのであれば、
1フレーム前の時間で呼び出させば大丈夫ですよ。

void Start () {
 rb.angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad;
 Invoke ("Stop", 1 - Time.fixedDeltaTime); ←1フレーム前に呼び出し
}

void Stop () {
 Debug.Log ("1秒後のrotation:" + rb.rotation.eulerAngles);
 rb.angularVelocity = Vector3.zero;
}

「1秒後のrotation:Vector3(42.4, 37.4, 15.0)」が出ましたよ。
>>809の方法で求めた場合と一致する値です。

rb.angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad
angle = (rb.angularVelocity).magnitude * Mathf.Rad2Deg

V = new Vector3(45, 30, 0)
angle = V.magnitudeでも同じ結果になります。
0843名前は開発中のものです。
垢版 |
2017/12/13(水) 19:11:19.37ID:6lJsdJ22
transformのposition, rotation, scaleって、
なんでtransform.position,transform.rotation,transform.lossyscale
になっていて、transform.scaleじゃないの??
0845名前は開発中のものです。
垢版 |
2017/12/13(水) 19:54:49.63ID:IotT1rVx
>>844
ツイッター
FacebookのUnity寄り合い所
あとはリアルのイベント
ゲームジャムやエンジニア向け勉強会に参加して交流、名刺交換、SNS垢の相互フォローなどすれば簡単に知り合いは増える
ちゃんと進捗をSNS上で報告すれば質問とかも答えてもらえる
イベントを探すならdoorkeeper、atnd、peatix
0846名前は開発中のものです。
垢版 |
2017/12/13(水) 20:48:15.04ID:/jokcbje
>>843

transform.lossyscale = Vector3.Scale(transform.parent.localscale, transform.localscale)
つまり
 transform.lossyscale.x = transform.parent.localscale.x * transform.localscale.x
 transform.lossyscale.y = transform.parent.localscale.y * transform.localscale.y
 transform.lossyscale.z = transform.parent.localscale.z * transform.localscale.z

localscaleは、インスペクター上で設定するスケールで、
lossyScaleは、自分のlocalscaleと親のlocalscaleの各成分の積になってます。

本当のscaleは、回転が入ると、Vector3ではなくて、3×3行列になってしまいます。

lossyScaleの場合は、回転前のスケールで、Vector3で表せるからだと思います。
0848名前は開発中のものです。
垢版 |
2017/12/13(水) 22:56:29.30ID:/jokcbje
Unityでは、アフィン変換を行う4×4行列であるMatrix4x4が、
TRS(Vector3 position, Quaternion rotation, Vector3 lossy scale)
によって構成されていて、
スケーリング→回転→移動の順に適用するようにしています。

最初にスケーリングを行うことで、
3×3行列の対角成分しか使わず、Vector3で済みます。

RigidbodyのinertiaTensorも一緒で、
本来は3×3行列が必要な慣性モーメントテンソルを、
慣性主軸系に限定することで、対角成分しか使わず、
Vector3の主慣性モーメントで済むようにしています。
0850名前は開発中のものです。
垢版 |
2017/12/13(水) 23:04:15.99ID:bbkFRctl
神になった気分だ。
スキルアップした今、どんなジャンルの仮想世界を作れと言われても
その詳細さえ教えてもらえれば
一瞬でどんなデータ構造/アルゴリズムで作ればいいかや
どんなデザインパターンを使えばいいかが
一瞬で頭にひらめき、スラスラとコードを書きはじめることができ、
予期せぬバグとかがなければ短期間でそのソフトやツールを一人で作る自信がある。

この予期せぬバグとはふだん使ってない昔やったプログラミング言語の細かい文法関連のことだけで
それはすぐ見直してカンを取り戻せばいいから全く問題ない。
0854名前は開発中のものです。
垢版 |
2017/12/14(木) 00:23:40.49ID:AuQKwcV0
>>853

そうですね。
parentがrootとは限らないので、parentのlossyscaleじゃないとダメですね。
末枝側へ変換が累積していきますから。

親オブジェクト-子オブジェクトの2者関係だと、
親オブジェクトのlossyscale = localscaleなので、両方localscaleで大丈夫ですけど。

親オブジェクト-子オブジェクト-孫オブジェクトの3者関係だと、
孫オブジェクトの親オブジェクトである子オブジェクトのlossyscaleは、
親オブジェクトのlocalscale * 子オブジェクトのlocalscaleになってますから、

孫オブジェクトのlossyscale
= 子オブジェクトのlossyscale * 孫オブジェクトのlocalscale
= (親オブジェクトのlossyscale * 子オブジェクトのlocalscale) * 孫オブジェクトのlocalscale
= 親オブジェクトのlocalscale * 子オブジェクトのlocalscale * 孫オブジェクトのlocalscale

>>852

仕事じゃなくて学問の方で。

うっかりしてましたが、UnityはCamelCaseだから、localScale,lossyScaleが正しいのでしたね。
0855名前は開発中のものです。
垢版 |
2017/12/14(木) 00:33:15.69ID:AuQKwcV0
Scaleの積は、Vector3の各成分とVector3の各成分の積なので、
Vector3 * Vevtor3 は定義されていないから、
Vector3.Scale(Vector3, Vevtor3) という演算ですね。
いわゆる、アダマール積(シューア積,要素積)です。

Unityでは、アダマール積の逆関数が定義されていないので、
自分でVector3.Scaleの逆関数を定義するか、
アダマール積の逆数を自分で定義する必要がありますね。
0856名前は開発中のものです。
垢版 |
2017/12/14(木) 02:05:43.30ID:tWpTkhe5
Vuforiaを使ってAR作りたいのですが実行するとマーカーは認識するもののカメラの映像が映らずに画面が黒くなります
誰か分かる方いらっしゃいますか...?
0858名前は開発中のものです。
垢版 |
2017/12/14(木) 08:46:47.19ID:xj1b5N68
>>857
専門学校出身だったら行列の回転だとかをQuaternionとかでも適用して使えるんだろなー

という煽りレス
0859名前は開発中のものです。
垢版 |
2017/12/14(木) 11:08:53.86ID:X1xy6sbZ
plus一ヶ月契約でもエッセンシャルパック2つってもらえますか?
あるいは契約し続けないと使えなくなる感じかな
0862名前は開発中のものです。
垢版 |
2017/12/14(木) 15:25:57.18ID:UIHENBZT
数学難しいですね
でも大丈夫!UNITYにはアセットが有りますよ!
アセットを購入しましょう!
0866名前は開発中のものです。
垢版 |
2017/12/14(木) 20:39:20.26ID:AuQKwcV0
>>865

移動と回転とスケーリングができるように、
アフィン変換行列になっているからです。

Matrix4x4.TRS(position, rotation, scale)
で4×4行列に入力できますが、

出力する時は、
Vector3 = Matrix4x4.MultiplyVector(Vector3)
によって、Vector3で入力して、
Vector3で出力できるようになっています。
0868名前は開発中のものです。
垢版 |
2017/12/14(木) 21:30:51.37ID:AuQKwcV0
>>858

回転行列MでベクトルV0を回転させて、ベクトルVにするには、
Z軸で30度回転する場合は、

Quaternion Q = Quaternion.Euler (0, 0, 30);
Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one);
Vector3 V0 = new Vector3(1, 2, 3);
Vector3 V = M.MultiplyVector (V0);

これを、QuaternionとVector3の演算で行うと、

Quaternion Q = Quaternion.Euler (0, 0, 30);
Vector3 V0 = new Vector3(1, 2, 3);
Vector3 V = Q * V0;
0869名前は開発中のものです。
垢版 |
2017/12/14(木) 21:32:41.20ID:AuQKwcV0
Matrix4x4 M = Matrix4x4.TRS (Vector2.zero, Q, Vector2.one);
は間違いで、

Matrix4x4 M = Matrix4x4.TRS (Vector3.zero, Q, Vector3.one);
が正しいです。
0870名前は開発中のものです。
垢版 |
2017/12/14(木) 21:45:36.22ID:AuQKwcV0
>>858

Quaternion QでベクトルV0を回転させて、ベクトルVにするには、
Z軸で30度回転する場合は、

Quaternion Q = Quaternion.Euler (0, 0, 30);

Vector3 V0 = new Vector3(1, 2, 3);

Quaternion Qv0 = Quaternion.identity;
Qv0.Set(V0.x, V0.y, V0.z, 0);

Quaternion Qv = Q * Qv0 * Quaternion.Inverse (Q);

Vector3 V = new Vector3(Qv.x, Qv.y, Qv.z);

こちらが、本来のQuaternion積でベクトルを回転させる方法です。

Unityでは、この面倒くさいQuaternion積の演算が、
「Quaternion * Vector3」だけでできるようになっています。
0871名前は開発中のものです。
垢版 |
2017/12/14(木) 21:55:15.62ID:AuQKwcV0
Vector3 = Quaternion * Vector3
は、行列積を意識していると思われます。

Vector3 = Matrix3x3 * Vector3
としたいところですが、
UnityにはMatrix3x3は用意されていません。
(3×3行列の乗算では、回転とスケーリングしかできないからです)

Vector4 = new Vector4(Vector3, 1) で4次元ベクトルにしてから、
Vector4 = Matrix4x4 * Vector4 で計算して、
Vector3 = (Vector3)Vector4 で3次元ベクトルへ戻す必要があります。

最初に、Vector4 = (Vector4)Vector3 と手抜きをしてはいけません。
Vector4 = new Vector4(Vector3, 0) で代入されると、
アフィン変換の「移動」が乗算されなくなります。
0872名前は開発中のものです。
垢版 |
2017/12/14(木) 23:49:37.69ID:zts/k6NY
行列なんか意識しないでも3dゲーム作れるようになったんだからすごい時代だよね
結構まえからだけど
0876名前は開発中のものです。
垢版 |
2017/12/15(金) 11:35:10.31ID:a5awPS/6
>>874
半額だったんでplusを年契約の年払いしたよ
売り上げ1千万以上なのに。
たかだか1万円ぐらいを月払いする奴いるの?
0877名前は開発中のものです。
垢版 |
2017/12/15(金) 12:38:14.64ID:c63jfGrC
物理演算系の解説を希望!

C#の経験あっても、そもそも物理演算は別物な気がする・・・

物理演算は、2Dと3Dで若干仕様が違うし、なかなか体系的に物理演算を解説しているサイトも少ない
せいぜい、velocityとAddForce止まりが多い

重力設定や衝突判定をUnityにまかせてしまうには、物理演算を使用するのが手っ取り早いんだけど、
物理演算だと、これまでのグラフィックス操作的な、プログラミングメソッドがあまり使えない
(基本的に、positionやrotationを直接いじらないほうが良いみたい)
0878名前は開発中のものです。
垢版 |
2017/12/15(金) 12:46:53.83ID:bN2Y1bPS
アイテムを所持していればお化けを倒せるというシステムにしようと思っています。
それでそのアイテムを十字架の画像にしようと思っているのですが、日本人だったらアイコン見ただけで何となく意味が分かるだろうと思うのですが、海外の人でも抵抗なくスッと理解されるんでしょうか?
0881名前は開発中のものです。
垢版 |
2017/12/15(金) 16:32:05.45ID:kzY3QNw/
>>878
ゲームデザインにもよるけど

そのアイテムの効果とお化けとの相互関係が分かるような物なら多分大丈夫かなぁ アイテム説明とかも結構重要だけども。
0883名前は開発中のものです。
垢版 |
2017/12/15(金) 20:05:01.07ID:c63jfGrC
transform.LookAtだと、どうしてもオブジェクトのforward軸が対象を向いちゃう
そうじゃなくて、オブジェクトのup軸を対象に向けたいんだけど、一体どうすれば・・・?

transform.LookAtでオブジェクトのforward軸を対象に向けて、
その後にtransform.Rotateでx軸で90度して、up軸をforwardへ向けているんだけど、
2段階になっちゃって、無駄が多いし、その瞬間動作が表示されちゃう

オブジェクトとtransform軸の対応を変更できれば、
オブジェクトのup軸方向を、forward軸に設定したいんだけど・・・
0884名前は開発中のものです。
垢版 |
2017/12/15(金) 20:51:06.18ID:PCtIHB7r
おぶじえくを最初から傾けておくか、小オブジェクトで対応するか、いくらでも方法あるだろうね。
ルックアット使わずにやるのも有りだし。
0885名前は開発中のものです。
垢版 |
2017/12/15(金) 23:29:48.61ID:nw+wySXa
>>883
目標の座標をVector3 targetとすると、

transform.right = targetでいけませんか?

transform.LookAt(target) は、
transform.forward = target と同じになるはずです。
0886名前は開発中のものです。
垢版 |
2017/12/15(金) 23:37:17.53ID:nw+wySXa
もっとも汎用性のある方法は、
向き(transform.rotation)を、
向けたい軸(Vector3.right)を向かせたい相手(target)へ向ける回転
Quaternion.FromToRotation にしてしまう方法かと思います。

transform.rotation = Quaternion.FromToRotation(Vector3.right, target)
になります。

例えば、左側をtargetに向けたい場合、
Vector3.right を、- Vector3.right に変更します。
(Vector3.right = - target でも勿論できます)

ただ、Vector3.oneをtargetに向ける回転は、
transform軸への代入ではできず、
上記の汎用法を使うのが良いと思います。
0887名前は開発中のものです。
垢版 |
2017/12/15(金) 23:38:56.71ID:nw+wySXa
>>883

読み間違えました。
up軸を向けるのでしたね。

@transform.up = target

Atransform.rotation = Quaternion.FromToRotation(Vector3.up, target)
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況