【ゲームエンジン】Unity初心者質問スレBuild4

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
2020/03/29(日) 19:35:12.24ID:mirhKW7D
ゲームエンジンUnityを楽しむ初心者による初心者の為のスレ
その為「アセットを購入しましょう」「チュートリアルやれ」「ググレカス」等禁止
初心者が親身になって初心者に教える。
又ググレの場合、何のキーワードでググるのか書いてね

●リンク
・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←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
※前スレ
【ゲームエンジン】Unity初心者質問スレBuild3
https://itest.5ch.net/mevius/test/read.cgi/gamedev/1578720539
2020/04/19(日) 07:08:12.21ID:g5SC/sTa
>>178
俺は初心者なので詳しいことは知らんが
角度って難しいね

回転(相対変化)じゃなくて角度を指定したいとか
検索しても話がかみ合わない
2020/04/19(日) 07:17:31.57ID:g5SC/sTa
>>178
平行ライトは知らんので使えるか知らんが
eulerAnglesとかlocalEulerAngles
181178
垢版 |
2020/04/19(日) 09:29:41.76ID:1PPWw4FK
ありがとうございます。
いろいろ試して
最後のリセットさせようとする文を

transform.rotation = Quaternion.Euler(50, -30, 0);

にしました。
初期値を自分で書いてそれに戻してるだけですが機能しました。
正しいやり方ではないと思いますが。
2020/04/19(日) 10:03:59.90ID:VkHE7jHb
>>181
リセット時に向く方向を変数にして、
インスペクタから指定できるようにするとか、
start関数内で現在の向きを変数に格納しておく、
とかにすると使い勝手がいいかもしれません。
2020/04/19(日) 12:03:44.34ID:iMvDFyAq
位置とスケールは簡単なのに角度になると急に面倒に…
0〜180、0〜 -180、0〜360とかぁ〜
184名前は開発中のものです。
垢版 |
2020/04/19(日) 18:44:44.40ID:XRjxy4OE
他オブジェクトにつけたスクリプトを参照できるようなスクリプトを書きたいのですがどのように書けばいいんでしょうか…
プレイヤーキャラのスクリプトから向きの情報を得て弾の進行方向を変えるような感じをイメージしているんですが。
2020/04/19(日) 20:06:29.04ID:+eR6EvBT
>>184
以前自分も全く同じ疑問持ちました
自分的にこのサイトが一番わかりやすかったです
https://htsuda.net/archives/1702
186名前は開発中のものです。
垢版 |
2020/04/19(日) 20:26:54.21ID:NPwmi6aX
animatorについてなんだけど、3dモデルに他のキャラのアニメーション付けてもちゃんと動いてくれるの?
VRMとかにモーションつける時とか違うキャラの付けてもちゃんと動いてるのが不思議で
2020/04/19(日) 23:55:02.39ID:1PPWw4FK
>>186
ボーンがUnityの指定しているHumanoidの仕様で、ある程度ちゃんとつけられた
キャラなら他から持ってきた動きでも動いてくれると思います。
2020/04/20(月) 13:43:13.94ID:u07mKJre
Youtubeの画面下の横長動画プレイヤーみたいなのを作ろうとしているのですが、うまくいきません。

1.空オブジェクト(A)を作成。各種UI Buttonをその子として入れる。
2.別途UI Panelオブジェクト(B)を作成。Aには入れない。
3.Bに「イベントトリガー」コンポーネントをつけ、Pointer EnterでAのSetActiveをONに。Pointer ExitでOFFに。
4.BをAよりも画面手前に置くと、Aのボタンが反応しなくなる
5.BをAよりも画面奥に置くと、AのボタンにマウスーオーバーしたときABともに高速点滅する
2020/04/20(月) 14:32:09.13ID:u07mKJre
>>188自己解決しました。
BをAに被せず、3のオンオフを逆にしたらOKでした
190名前は開発中のものです。
垢版 |
2020/04/20(月) 14:42:58.66ID:zd2flDEV
>>184です
参照する方法は分かったのですが、弾を発射した後にプレイヤーの向きを変えるとそれに伴って弾の進行方向まで変わってしまうようになりました…
(右に発射したあと左を向くと弾の方向も左に変わってしまう…というような感じです)

発射した時点で進行方向を固定する関数などあれば教えていただきたいです。

>>185
一度は思いつくものの形にするには時間かかりますよね…
レスありがとうございます😊
2020/04/20(月) 14:46:13.15ID:7TeDGIGu
>>190
角度取得をstartじゃなく、updateにでもいれてるんだろうね。
2020/04/20(月) 15:01:19.48ID:Z9e9J0rW
ゲームにはよくパワーアップやパワーダウンの効果をもつバフ、デバフがあると思います

こういったものというのは、先に計算を行って置き、実数を変更しておくのが一般的なのでしょうか
それとも、効果を発揮する状況になったとき(たとえば攻撃時、攻撃力の値が必要になったとき)に毎回算出するのが一般的なのでしょうか

前者の場合だと計算は完了しているため後は値を参照すればパワーアップ状態での行動に反映でき、負荷が軽くなるとは思うのですが、
パブ、デバフの効果切れの際に、特に乗算等で計算していた場合、パワーアップ中にレベルアップや装備変更などで元の値が変化してしまうと
効果切れの処理のときに元の値が狂ってしまうバグが発生してしまいます

後者の場合だと前述のバグは発生しにくいとは思いますが、攻撃のたびにパワーアップ分を計算しなくてはならず、
簡単な計算とはいえ毎回負荷がかかってしまいます

今作っているのは3Dでリアルタイムで動くRPGのようなもので将来オンライン化を目指していますが、
バグの回避と拡張性の問題から後者の手段を取ろうと思っているのですが、処理負荷がどう響くのか分かりません

とりあえず一般的な手法ならそれなりに実績もあるだろうということで、どちらが一般的でしょうか
193名前は開発中のものです。
垢版 |
2020/04/20(月) 15:10:33.56ID:zd2flDEV
>>191
Startに入れて実行したら弾が進まなくなりました…
なぜなんでしょうか…
2020/04/20(月) 15:49:24.30ID:BqIKHtjL
>>192
前者でも元の値が変わったときに再計算をはさんでおけばバグは起きないだろうし、攻撃のたびに単純な計算するくらいの負担を気にする必要があるとも思えないです。
攻撃速度が1秒間に100回で複数の敵に多段ヒットしまくる様な特殊なゲームでなければですが。

>>193
方向の決定をStartでして、その方向にupdateで進めればいいんじゃない?
2020/04/20(月) 16:27:38.06ID:hAG3HiSQ
scriptを用いて指定オブジェクトの色をGetComponent<Image>().material.color で変更しようとしたところ
指定したオブジェクト以外の色も変更されてしまいます。
指定したオブジェクトのみ変更させたい場合どうしたらよいでしょうか

Default UI Material というのが指定した色になっていました。
2020/04/20(月) 16:35:21.10ID:7TeDGIGu
>>193
おい!w
関数理解して組んでるのか?
2020/04/20(月) 16:36:35.22ID:7TeDGIGu
>>195
確か、マテリアルカラーはパレットだから、ほかのオブジェクトでも使ってたら変わったよ。
それが嫌なら専用のマテリアルを作るのが1番かな。
2020/04/20(月) 16:46:25.44ID:hAG3HiSQ
返答ありがとうございます。
指定したImageオブジェクト(ほかのオブジェクトも)のmaterialを設定していませんでした。
指定オブジェクトのmaterialを「Sprites-Default」に設定したところ
指定したオブジェクトのみ色を変えることができました。ありがとうございます。
199名前は開発中のものです。
垢版 |
2020/04/20(月) 17:10:09.14ID:zd2flDEV
>>196
GameObject Player;
SpriteRenderer Renderer;

void Update()
{
bool left =Renderer.flipX //左向きのときtrue

if(left==true)
{
transform.Translate(-0.5f,0,0);
}
else
{
transform.Translate(0.5f,0,0);
}

}

というスクリプトをUpdateに入れています
Update関数の中にプレイヤーの向きの情報が入っているので、弾が常にそれに連動してしまうのはわかるんですが…
2020/04/20(月) 17:33:02.98ID:QzIkkg0M
unity(2D)って、ひょっとしてそれほど画像の大きさは気にしなくていいですか?
カメラサイズとかで調整して、カメラで見えたものがそのまま映像として出る感じ?
2020/04/20(月) 17:40:40.58ID:5Q+qVe+b
>>199
leftをメンバ変数にしてstart()で向きを代入すればいい
202名前は開発中のものです。
垢版 |
2020/04/20(月) 17:55:39.99ID:zd2flDEV
>>201
public bool left を文頭に付け加えればメンバ変数になりますか?
それと向きの代入はどのように書けばいいのでしょうか?
2020/04/20(月) 19:41:13.85ID:7TeDGIGu
>>202
そんで、left=render…をスタートにね。
2020/04/20(月) 20:05:15.73ID:vPtvjXeA
インスペクターの変数表示を折りたたみしたくて、
「InspectorFoldoutGroup」というのを見つけたのですが導入方法がわかりません。
やり方教えてほしいです。
2020/04/20(月) 20:50:29.55ID:bEPCXYQk
>>204
Homebrewフォルダを自分のプロジェクトのAssetsに置く

折りたたみを使いたいスクリプトの一番上の部分に
using Pixeye.Unity;
を追加

あとは添付されてる
README.md
見ればわかるはず。
.mdファイルが開けなかったらブラウザにドラッグ&ドロップすれば見れる
206名前は開発中のものです。
垢版 |
2020/04/20(月) 21:03:41.06ID:zd2flDEV
GameObject Player;
SpriteRenderer Renderer;
public float x;
public bool left;

void Start()
{

left = Renderer.flipX;
Player = GameObject.Find("Player");
Renderer = Player.GetComponent<SpriteRenderer>();

if (left == true)
{
x = -0.5f;
}
else
{
x = 0.5f;
}


void Update()
{
transform.Translate(x, 0, 0);
}

とにかく手探りで書いてみました。
実行したところ、やはり弾が生成された地点で止まってしまいます。
どこを直せばいいのでしょうか…
207タワー ◆j2ZL4YtpzY
垢版 |
2020/04/20(月) 21:16:59.91ID:IQn62GFy
>>206
xの値変わって無くないですか?
方向はStart()で決めてるんでその後のxの加算減算はUpdate()内で行えば動きませんか?
2020/04/20(月) 21:28:27.99ID:vPtvjXeA
>>205
おかげさまで導入することができました 
ちなみに自分がひっかかってたのはダウンロードの仕方からわからなかったのですが
サイトの Clone or download → Download ZIP から落とせました。
たぶんダウンロード出来てたとしても導入でつまづいてたと思うので(英語わからない)
助かりました ありがとうございます!
209名前は開発中のものです。
垢版 |
2020/04/20(月) 22:10:13.03ID:zd2flDEV
>>207
Startでxに代入している-0.5fや0.5fは方向を決めるだけのものなんですか?
であればUpdate内にxと書いただけでは動かないのは納得です…
210名前は開発中のものです。
垢版 |
2020/04/20(月) 22:15:09.57ID:j+CwVrdp
>>206
これでどうだ

GameObject Player;
SpriteRenderer Renderer;
public float x;
public bool left;

void Start()
{

Player = GameObject.Find("Player");
Renderer = Player.GetComponent<SpriteRenderer>();
}

void Update()
{
left = Renderer.flipX;

if (left == true)
{
x = -0.5f;
}
else
{
x = 0.5f;
}

transform.Translate(x, 0, 0);
}
}
2020/04/20(月) 22:26:02.98ID:j+CwVrdp
発射後には方向動かしたくないのか 失礼
212名前は開発中のものです。
垢版 |
2020/04/20(月) 22:30:08.28ID:zd2flDEV
>>211
そうなんです!
これだとプレイヤーの向きを変えるたびに弾の方向も変わってしまうんです…
わざわざ書いてくださってありがとうございます
2020/04/20(月) 22:47:15.92ID:7TeDGIGu
>>212
206で動かない?
そもそもこのスクリプトは弾についてますか?
あとxの値が小さすぎるかもしれませんので、おおきくするとか。
214タワー ◆j2ZL4YtpzY
垢版 |
2020/04/20(月) 23:01:34.95ID:IQn62GFy
>>209
あ、分かった二ヶ所です

まずStart()にある
if(left == true)

をUpdate()へ移動

んで加算減算ですが
x = -0.5f
ではなく
x -= 0.5fとx += 0.5f
これならどうだっ!?
2020/04/21(火) 00:16:51.48ID:VK5HUOlH
>>206
GetComponentする前にRendererを参照してるからぬるぽ出てるんじゃないの?
Renderer=の部分をleft=の上に移動してみては
216名前は開発中のものです。
垢版 |
2020/04/21(火) 01:34:28.12ID:TxUS3yyD
>>212
https://imgur.com/lOxmncE
こういう感じ?弾はプレハブをinstantiateで生成してるでいいのか?

GameObject Player;
SpriteRenderer Renderer;
public float x;
public bool left;


void Start()
{
Player = GameObject.Find("Player");
Renderer = Player.GetComponent<SpriteRenderer>();
left = Renderer.flipX;

}

void Update()
{
if (left == true)
{
x = -0.05f;
}
else
{
x = 0.05f;
}
transform.Translate(x, 0, 0);
}
217名前は開発中のものです。
垢版 |
2020/04/21(火) 02:35:32.80ID:eGonr+6D
>>213
このスクリプトは弾についてるやつです
これだと生成された場所で弾が止まってしまいます…
transform.Translate(0.5f,0,0)でいい感じだったので数値はこれでいいはずなんですが…。
218名前は開発中のものです。
垢版 |
2020/04/21(火) 02:39:51.81ID:eGonr+6D
>>214
>>216
お二方ともご丁寧にありがとうございます。
そうですね。弾はInstntiateで生成してます。
試してみます。

>>215
謎エラーが出てたのはこれが原因かもしれません…
完全に見落としてました、ありがとうございます
2020/04/21(火) 07:56:58.30ID:lxHdAL0J
>>217
ほな違うかー。それやと>>206で動くはずやもんな。
なんやろなー、一度update内をtranslate(1,0,0)だけにしてまず動くか試してみぃ。
220名前は開発中のものです。
垢版 |
2020/04/21(火) 10:03:30.31ID:eGonr+6D
>>216
この方のスクリプトで試したところ、理想通りの動きをしてくれるようになりました
>>214さんのスクリプトも試してみようと思います

数日にわたり本当にありがとうございました!
しっかり勉強します…!
221タワー ◆j2ZL4YtpzY
垢版 |
2020/04/21(火) 10:10:06.23ID:NfJnlsa5
>>220
あ〜ごめんなさいtranslateですね、少し勘違いしてたのでお気になさらず
私もまだまだ勉強中なのでお互い頑張りましょう!
2020/04/21(火) 11:36:12.60ID:K2oy6SXi
androidでrun and buildしようとしてgradleでエラーが出る

gradleのアップデートしようにもexportの仕方がわかんねえ…
2020/04/21(火) 22:53:53.72ID:csf8LLL0
使い方がイマイチわからないところがあるので質問させてください

AオブジェクトにスクリプトAを接続
スクリプトAでパブリックGameObject Bを宣言

すると
AオブジェクトのインスペクタにGameObject Bの項目が追加されますが、
スクリプトAのインスペクタにもGameObject Bの項目が追加されています。

AオブジェクトのインスペクタのGameObject Bには他のオブジェクトをドラッグドロップで
接続できますが、
スクリプトAのインスペクタのGameObject Bには同じように接続できません。
None(Game Object)となっています。
特に問題なく想定したとおり動いてるのでいいのですがちょっとだけ気になります。
スクリプトAのインスペクタにはどんな意味があるのでしょうか?
2020/04/21(火) 23:37:01.59ID:UQ97M8GL
>>223
スクリプトAのインスペクタ

というのは、プロジェクトタブ内でスクリプトを選択したときに表示されるもののことでしょうか?
であれば、設定できるのはプロジェクト内にあるゲームオブジェクトだけです。
プロジェクト内にあるプレハブを初期値として持たせておきたい場合はそこで設定するといいと思います。
2020/04/22(水) 01:06:31.31ID:KbfCVKCs
>>224
そうです Projectタブ内のスクリプト選択時に表示されるものです
おっしゃるとおりAssets内のプレファブからならドラッグドロップで登録できました
でもこれって
ゲームオブジェクト選択時に表示されるインスペクタのほうからでもプレファブ登録ってできますよね?
初期値に違いが出るんでしょうか?
2020/04/22(水) 01:27:55.05ID:sLe2iYSZ
スクリプトをアタッチした時点での初期値、という意味です。
2020/04/22(水) 01:43:37.40ID:KbfCVKCs
>>226
すみません 理解力が足りなくてよくわかりません・・・
どういう風な使い方ができるか具体例とかあれば教えていただけないでしょうか?
2020/04/22(水) 02:29:38.60ID:sLe2iYSZ
ただ単純に手間を省ける場合があるってだけです。

例えばプレハブに8割の確率で同じものを使う、という場合で、

100回スクリプトをアタッチしたとします。

初期値が空なら、100回プレハブを設定しなければなりません。

初期値に80回使うプレハブがすでに設定済みなら、
設定するのは20回ですみます。
2020/04/22(水) 07:29:50.06ID:idLW19fL
やばいずっと何言ってるかわかんねえ
2020/04/22(水) 11:29:44.07ID:VQM8R+FC
プレハブについての質問です。
すでに存在するオブジェクトに子としてプレハブを複製しようとしたときの座標がうまく設定できません。
スクリプトではこんな感じ記載しています
------------
ParentObject = GameObject.Find("ParentCanvas"); //すでに用意しているキャンパス
var parent = ParentObject.transform;

// プレハブをGameObject型で取得
GameObject obj = (GameObject)Resources.Load("Prefab");
// プレハブを元に、インスタンスを生成、
Instantiate(obj, new Vector3(1.0f, 1.0f, 0.0f);, Quaternion.identity, parent);

//ローカルポジションの設定
obj.transform.localPosition = new Vector3(100.0f, 100.0f, 0.0f);
----------
結果として子としてプレハブは複製できていますが、座標がローカルではなくワールド座標のほぼ原点に生成されてしまいます。

親のローカル座標に設定するにはどうしたらよいでしょうか?
InstantiateのVectorをローカル座標として設定したい状態です。
2020/04/22(水) 13:03:53.31ID:UU/VXGyk
>>230
最後のlocal posで、100じゃなくて、0.0.0でいいんじ「ないの?
2020/04/22(水) 13:10:28.55ID:VQM8R+FC
>>231
最後のlocalPosition の位置に設定をしたいのですがワールド座標の原点に設定されてしまう状態です
2020/04/22(水) 13:29:09.78ID:sLe2iYSZ
>>230
Instantiate(obj, parent.position + new Vector3(1.0f, 1.0f, 0.0f);, Quaternion.identity, parent);
2020/04/22(水) 13:36:29.55ID:KbfCVKCs
>>228
説明で全くピンとこなかったのですが
実際UNITYで試してみて言葉の意味がようやく理解できました
「スクリプトをアタッチした時点での初期値」
ほんとそのとおりですね 複製するときに使えそうです
ありがとうございます!
235弟子 ◆rZPPjYuxmQ
垢版 |
2020/04/22(水) 13:37:39.18ID:kYRnjPG5
>>225
https://i.gyazo.com/207b420398965fd9452cfd022b133773.png
まずこれがオブジェクトにスクリプトをアタッチし、public変数に設定した例

https://i.gyazo.com/f688367c978ac3282ae36a41985ce9f7.png
こちらがProject欄にあるスクリプトのPublic変数、ここへは「シーン上」のオブジェクトは設定できない

https://i.gyazo.com/0294932ec2ec31d71627a8f9e8bbaa0b.png
こちらが同じスクリプトにPrefabを設定した例、Prefabなら設定できる

まずpublic変数は外部からの設定が出来る変数で、シーンのobjectにアタッチすれば、インスペクタで設定できる。
prefabというのは特殊なオブジェクト。これはシーン上に即反映できるものでシーンに無いスクリプトにもアタッチできる。
という事。
違いは、シーン上にあるものか、そうでないか。シーン上のobjectはProject欄には置けないですうよね?
それがPrefabという事。Prefabの詳細については、公式の説明参照で。

>>230
公式の説明見ると分かると思うけど
https://docs.unity3d.com/ja/current/ScriptReference/Object.Instantiate.html
(2番目の例が分かりやすい)

InstantiateはGameObjectを返すので、位置など設定する場合には、そのオブジェクトを指定する

GameObject obj = (GameObject)Resources.Load("Prefab");
Instantiate(obj, new Vector3(1.0f, 1.0f, 0.0f);, Quaternion.identity, parent);
obj.transform.localPosition = new Vector3(100.0f, 100.0f, 0.0f);
この場合、「obj 」はResourcesにあるObjectで、Instantiateで生成した物ではないです
だからobj.transform.localPositionをしても意味が無い。
公式の例のように返りを指定して
clone = Instantiate(projectile, transform.position, transform.rotation);
それの値をいじります。
clone.velocity = transfor…
2020/04/22(水) 13:54:05.92ID:KbfCVKCs
>>235
詳しい解説ありがとうございます!
参考にして理解を深めたいと思います
2020/04/22(水) 13:54:31.83ID:NXwZj8K9
タッチの差だったな
2020/04/22(水) 14:37:58.42ID:VQM8R+FC
>>233
>>235
返答ありがとうございます。
ローカル座標への設定ができました。ありがとうございます。
239名前は開発中のものです。
垢版 |
2020/04/22(水) 14:44:13.38ID:Fjzhn+DL
サイズが100メガ越えちゃってアップロードできないので
一部のシーンを自サーバに置こうと思うんですが
どうやればいいのでしょうか
2020/04/22(水) 17:24:59.04ID:v683vmMZ
無料のFBX Exporterって無くなったんですか?
241名前は開発中のものです。
垢版 |
2020/04/22(水) 17:54:26.25ID:fzmr7DOF
ゲーム作ってる場合じゃない!
2020/04/23(木) 18:03:45.48ID:h7v1P4FQ
関数名には、スペースと頭を数字にしてはいけないというのを知ったのですが、
「-」短いハイフンを含めても問題ないのでしょうか?
後で不具合が起こることはないでしょうか?
243くまじょ
垢版 |
2020/04/23(木) 18:36:38.32ID:mFtLrFD8
>>242
しては行けないというか
できるの?
2020/04/23(木) 19:54:56.09ID:VZYcAFmQ
エディタに怒られる
2020/04/23(木) 22:11:41.12ID:B+z5addE
Unityが壊れた
AndroidのBild settingのplayerの項目が表示されなくなった
最初は表示されていたのに項目の入力中におかしくなってそれっきり
心当たりがあるとすれば入力中にIMEの入力切り替えがおかしくなって半角入力できなくなっていたことくらい

別のプロジェクトファイルを開いても同じ不具合と同じエラーメッセージが出るからunityのファイルが壊れたのか
一旦アンインストールしてから入れ直した方がいいのかなあ
それとも新バージョンを上書きしていいのか
検索したらELT版?インストールで解決したという話が出てきたけど
二本同時に完成する直前にこれだよ泣きそう
2020/04/23(木) 22:40:39.33ID:YqrHMQSi
基本的な操作がわからないのでしつもんさせてください
関数とかif文とかのカッコ } 
がよく変な位置に行ってしまいます。(うっかり無駄にエンター押したりしてしまう)
DELETEキー長押しでカーソル位置まで動かして戻してるのですが
スマートに戻す方法とかもしありましたら教えてくださいm(_ _)m
2020/04/23(木) 22:47:49.15ID:h7v1P4FQ
アニメーションクリップが複数あるオブジェクトを非表示から表示に切り替えた時に
特定のアニメーションクリップから始めることはスクリプトで出来るでしょうか?
2020/04/23(木) 22:51:56.86ID:KKg8jFzb
>>246
変な位置って具体的にどうなってて理想はどういう風にしたいの
visual studio使ってるんだったら設定いじるかフォーマットの拡張好きなの何か入れるとか
2020/04/23(木) 23:16:57.00ID:YqrHMQSi
具体的に言うとよくこんな感じになってしまいます

if(a==0){ 処理



}

この2パターンが理想です(場合によって使い分けています)
if(a==0){ 処理 }

if(a==1){
処理
}

設定どこをいじればいいんでしょうか?
250名前は開発中のものです。
垢版 |
2020/04/23(木) 23:20:04.38ID:YqrHMQSi
間違えました

この2パターンが理想です(場合によって使い分けています)
if(a==0){ 処理 }

if(a==1){
スペース 処理
スペース }
2020/04/24(金) 02:47:01.33ID:kDHtLuLX
プロジェクト内のフォルダを誤って消してしまい、ゴミ箱から元に戻してもscriptがエラーから戻らない場合は復元出来ないのでしょうか……?
2020/04/24(金) 02:48:12.32ID:kDHtLuLX
拙い文ですみません、試してみて?という感じのアドバイスで良いのでお願いします…
2020/04/24(金) 03:32:53.73ID:Yn/wujOk
submesh単位で分割する方法ないですかね...
http://onoty3d.hatenablog.com/entry/2015/12/09/000000
このスクリプトだとエラーが出て分割できません
2020/04/24(金) 03:52:09.99ID:Yn/wujOk
自己解決
2020/04/24(金) 07:49:35.90ID:mqgYLk8R
>>251
裏で作ってるファイルがあるから、それだけでは何とも。エラーをみながらコツコツと直すしかない。
私だけかもしれんが。
2020/04/24(金) 13:11:03.27ID:TSbisyMR
1日の作業が終わったらプロジェクトフォルダごとバックアップ
NASなんかに保存するのが最高だけど
下手すると年単位の苦労が消し飛ぶから考えた方が良いよ
2020/04/24(金) 13:39:06.03ID:e94QvqHL
自分も一日の終わりにプロジェクトフォルダごとバックアップしてる
Zip圧縮したファイル名の末尾に日付を入れて一定期間保存
大きな変更を加える直前のフォルダは長期保管してる
2020/04/24(金) 15:11:35.58ID:9IIgbh3E
プレハブについての質問です

1つのプレハブに↓のようなスクリプトをセットして複製し動かそうとすると
複製したオブジェクトが1つしか動いてくれません
-------
public class prefabMoveScript : MonoBehaviour {

public static GameObject prefabObject;
public static int iNow, jNow;

public static void move()
{
//位置を乱数で変更
int iNum += Random.Range(-1, 1);
int jNum += Random.Range(-1, 1);
prefabObject.transform.localPosition = new Vector3(iNow , jNow , 0.0f);
}

// Use this for initialization
void Start () {
prefabObject = this.gameObject;

}
}
------
複製したプレハブそれぞれを別々の乱数で動作させたいのですがどのようにしたら良いでしょうか
2020/04/24(金) 15:29:16.14ID:hbCzfYWk
staticじゃなくする
2020/04/24(金) 15:54:14.93ID:9IIgbh3E
すいません一部コードが間違っていました
-------
public class prefabMoveScript : MonoBehaviour {

public static GameObject prefabObject;
public static int iNow, jNow;

public static void move()
{
//位置を乱数で変更
int iNum += Random.Range(-1, 1);
int jNum += Random.Range(-1, 1);
prefabObject.transform.localPosition = new Vector3(iNow + iNum , jNow + jNum , 0.0f);
}

// Use this for initialization
void Start () {
prefabObject = this.gameObject;

}
}
------
staticをつけている変数については、別スクリプトで呼び出して値を代入しているため
staticを外すとエラーが出てしまいます。
2020/04/24(金) 16:51:57.34ID:hbCzfYWk
staticをつけると、その変数は
そのクラスで共通のものになる。

だからこれだと複製したオブジェクト全員が、ある一つのオブジェクトを操作している状態。
2020/04/24(金) 17:53:17.83ID:mqgYLk8R
staticを理解していない?
staticをつけると、簡単に言えばそのワールドで唯一の変数名になる。だから複数から参照操作はできるが、唯一を2つ存在させたら、どっちを参照するかわからんよね?
2020/04/24(金) 17:57:06.91ID:9IIgbh3E
>>261
>>262
staticについて理解できていませんでした。
264弟子
垢版 |
2020/04/24(金) 19:36:00.79ID:X9i2PnLo
>>263

>260のコードで動かすにはこのようにします
多分Staticの使い方というより、prefabの生成に問題あると思います
https://i.gyazo.com/9eea2661448b7a1af4e8291b55adfe25.png
https://imgur.com/dBRzNly

質問は検証できる弟子を指名してね!
2020/04/24(金) 21:22:53.35ID:WKjj9eyG
>>255

>>256

>>257
皆さんありがとうございます、これを教訓にそうすることにします……
2020/04/24(金) 21:26:22.99ID:9IIgbh3E
>>264
わざわざソースまでありがとうございます!
2020/04/25(土) 13:09:23.62ID:c8LTCDvQ
https://youtu.be/clB_Q-4N2mM
アニメーションクリップに効果音を付けて4種類のSEの中からランダムで音が出るようにしているのですが、
二回続けて同じ音が出ないようにする方法はないでしょうか。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ken_furu : MonoBehaviour
{
public AudioClip[] _SE; //SEが4個入っています。

private AudioSource audioSourse;
Animator animator;


void Start()
{
animator = GetComponent<Animator>();
audioSourse = GetComponent<AudioSource>();
}

public void SE()
{
int a = Random.Range(0, 4);
audioSourse.PlayOneShot(_SE[a]);
}

}

このスクリプトを音を鳴らすアニメクリップが付いたオブジェクトにアタッチしています。
二回続けて同じ音が出ないようにする方法があったら教えてください。
https://thuploader.orz.hm/miniup/?mode=dl&;id=7354 プロジェクトファイル
2020/04/25(土) 13:34:15.67ID:Bwa2wt20
aの値を保持して、次の乱数時に比較する
2020/04/25(土) 13:40:39.58ID:2pXFtKle
>>267
色んな方法があると思いますが、
再生する度に再生したSEを除外し、除外されていたSEが存在すれば戻すという処理を入れるのはどうですか?

ランダムのレンジにはLengthやCountが使えますので実装自体は数行済むと思います。
配列をリストにした方が簡単だと思います。
270267
垢版 |
2020/04/25(土) 14:39:00.19ID:c8LTCDvQ
>>268の方法は難しそうだったので
>>269の方法で試してみました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ken_furu : MonoBehaviour
{
//public AudioClip[] _SE;//配列
public List<AudioClip> _SE;//リスト型に変更

private AudioSource audioSourse;
Animator animator;

void Start()
{
animator = GetComponent<Animator>();
audioSourse = GetComponent<AudioSource>();
}
public void SE()
{
int a = Random.Range(0, _SE.Count);//_SE.Count リストの中の要素の個数
audioSourse.PlayOneShot(_SE[a]);
_SE.RemoveAt(a); //一度鳴ったSEを削除
}
}
SEの配列を、リスト型に変更して、一度なったSEを削除するところまでは出来たのですが
消したリストを次のSEを鳴らすときに元に戻すやり方が分かりませんでした。
どうすれば消したリストを元に戻すことができるでしょうか。
2020/04/25(土) 15:01:53.19ID:Bwa2wt20
>>270
嘘だろぉ、おい!w
272くまじょ
垢版 |
2020/04/25(土) 15:23:53.23ID:z5N+YfUG
俺なら前回の覚えておいて
乱数が同じものだったら+1
わずかに乱数に偏りが起こるけど
273くまじょ
垢版 |
2020/04/25(土) 15:30:30.75ID:z5N+YfUG
乱数が選んだものをリストから抜いてリストの最後に追加しておくとか
乱数の範囲は要素数-1で最後の要素(前回選んだもの)を避ける
初回は必ずリストの最後が選ばれないことになるけど
2020/04/25(土) 15:38:16.06ID:DiGw5Kl0
横から失礼します
特定のAudioClipが再生中かどうかを検出するとかってできますか?

例)
if(Audioclip(ジャンプ音)が再生中){  処理 }

みたいなことがやりたいのですが
2020/04/25(土) 15:47:10.29ID:a3TA/N7F
乱数記憶用の変数を用意
初期値は999などの有り得ない数
または一番目に鳴らしたくない音と同じ数

ランダムで出した乱数を変数と比較
もし同じ数字なら+1または-1して処理
(このスクリプトだと3の場合のみ-1)
また乱数(または処理後の数値)を変数に入れる

自分ならこれにするけど何せ初心者なので
もっとスマートなやり方があるならそっちで
2020/04/25(土) 16:04:41.65ID:2pXFtKle
>>273の再生したSEをリストの最後に追加してランダムのレンジに含めないがスマートで実用的かもしれませんね。

+1などで処理すると結局順番に再生されるだけでランダムにならないから質問者の意図する挙動とは違ってしまうんじゃないでしょうか?
277くまじょ
垢版 |
2020/04/25(土) 16:59:40.05ID:z5N+YfUG
>>276
乱数が前回と同じ値だったら
1足して剰余でオーバーラン回避だよ
剰余のこと説明不足だった
278267
垢版 |
2020/04/25(土) 17:19:22.65ID:c8LTCDvQ
皆さんから助言を頂いて有難うございました。
>>273の方のやり方で、ずっと試していました。先ほどエラーが全部消えてやっと動くようになりました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ken_furu : MonoBehaviour
{
public List<AudioClip> _SE;//リスト型 4つのSE
AudioClip DeleteClip; //選ばれて消えたSEを変数に入れる

private AudioSource audioSourse;
Animator animator;

void Start()
{
animator = GetComponent<Animator>();
audioSourse = GetComponent<AudioSource>();
}
public void SE()
{
int a = Random.Range(0, _SE.Count-1);//リストの最後の要素はランダムレンジから外す
audioSourse.PlayOneShot(_SE[a]);//選ばれたSEを鳴らす
AudioClip DeleteClip= _SE[a];//選ばれたSEをDeleteClipの変数に入れる
_SE.RemoveAt(a); //選ばれて鳴ったSEを削除
_SE.Add(DeleteClip); //選ばれて消えたSEをリストの最後に追加
}
}
もしかしたら変な部分があるかもしれませんが、ちゃんと動いているようです。
本当に有難うございました。助かりました。
279名前は開発中のものです。
垢版 |
2020/04/25(土) 17:57:08.46ID:P2OYyiKX
Unityで2Dゲームを作ろうとしていますが、小さい表示枠と大きい表示枠について教えて下さい。

画像をSceneに配置すると小さい枠の中に置いたものが実行時に表示され、座標はたとえば-2〜+2です。
ヒエラルキーからUIのButtonを配置すると大きい枠の中に置かれ、座標は0-1000などの設定した画面サイズの値になります。
2つの座標系があるようなのですが、Sceneで見ると重なっていないのに実行すると上記の2つ枠は重なって表示されるようです。

なんでこんなことになってるんでしょうか?
両者を混在して使ってると実行環境によってずれが生じそうですが大丈夫なんでしょうか?
また「Unityの教科書 Unity 2019完全対応版」を読みましたが、次に読むと良さそうな本があったら教えて下さい。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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