X

【ゲームエンジン】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/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完全対応版」を読みましたが、次に読むと良さそうな本があったら教えて下さい。
280くまじょ
垢版 |
2020/04/25(土) 18:16:48.37ID:z5N+YfUG
>>279
それな
俺はunity初心者
座標面倒
キャンバスにイメージとスプライト混在したり一貫性ないなあ
281くまじょ
垢版 |
2020/04/25(土) 18:23:08.63ID:z5N+YfUG
>>279
シーンで見ると大きさが違うのと位置がずれてるのが邪魔で仕方ない

シーンで同じ位置同じ大きさ(見た目のことで座標の数値は違う)にするか

いっそのことシーンでは離れているが実行時に同じにしてみたり
重なってると邪魔なので

キャンバスのインスペクタを弄れば見た目の大きさは揃うよ
座標は-2とかのままがイイみたい
あれはメートルって意味らしい
282くまじょ
垢版 |
2020/04/25(土) 18:23:58.70ID:z5N+YfUG
詳しいことは俺も知りたい
2020/04/25(土) 18:32:34.76ID:Bwa2wt20
>>279
1冊読んで1本作れたなら、漠然とした指南は必要ないかなぁ。
あとは、ネットやるならオンライン系とか、作りたいものに合わせて選ぶだけだよ。
まだ1本も完成させてないなら、本より作り上げることかな。
284279
垢版 |
2020/04/25(土) 20:19:30.59ID:P2OYyiKX
>>280-282
やっぱりわかりづらいですよね
作りながら学んでいくしかないですかね

>>283
いま最初の一本を作ってるところです。
とりあえずわかる範囲で動くものを作ってみることにします。
2020/04/26(日) 17:01:21.87ID:0LPIhU5v
・シーンにオブジェクトAとBを作る
・Bをプレハブ化
・GetComponentを記したスクリプトをBにアタッチ、そのインスペクタ内でAをアタッチ
・いざ実行すると、後者からAが消えておりnullが入ってる

これはどういうカラクリ?
GetComponentで保持できるのは同一シーン内のオブジェクトだけで、
プレハブは別シーン扱いだから不可ってこと?
286名前は開発中のものです。
垢版 |
2020/04/26(日) 20:07:03.91ID:y6nEuqYj
初心者すぎる質問で申し訳ない
自分の街の地図データ(OSM)をUnityに取り込みたい
OSM2World(http://osm2world.org/download/)をダウンロードして
以下の記事を参考に頑張っているのだけど、
https://qiita.com/hiroga/items/8f8496af23c3661f4092
使い方wiki(https://wiki.openstreetmap.org/wiki/JA:OSM2World)に書いてあるGUI操作というものが分からずOSM2World を実行できずにいる
ダウンロードした中にアプリケーションらしきファイルはないし、どうやって実行するのか分からない
2020/04/27(月) 07:09:26.36ID:bdPBx+if
垢付き無視されてて草
2020/04/27(月) 15:39:27.94ID:slOrZu1n
エアプババアこと煖エ聖子さーん!
Unity 触ったこともないくせにググって出てきたブログの内容をパクってスレに書き込まないでくださーい!
2020/04/27(月) 19:31:18.81ID:S31Ss8MO
画面をドラッグしたらそれに合わせて
画面中心に置いてあるキューブのオブジェクトが回転するようにしたのですが、
例外的に画面のUI部分をドラッグしても何も起きないようにしたいです。

試しに画面内にボタンを配置してみますと、
ボタン部分をドラッグしてもキューブは回転しませんでした。

ですが、ボタンではなくスクロールビューを配置しますと、
スクロールビュー内で中身をスクロールさせる際に
キューブも回転してしまいます。

これは何が原因なのでしょうか?

スクロールビュー内でスクロールさせても、
キューブは回転しないようにしたいのですが。。。
290名前は開発中のものです。
垢版 |
2020/04/27(月) 22:29:11.94ID:BsJwJx+j
ローグライクゲームで使われるようなテキストボックスの作り方を教えてください

具体的にはテキストボックスは4行目まで表示可能で
5行以上のテキストは初めに上4行が表示され、時間経過で下4行まで
スライドするようなものです

文字のフォントサイズとスライドの幅の関係がわからず
行数が増えてしまうと文字が見切れてしまうのですが
どうしたらよいでしょうか
2020/04/28(火) 08:42:29.47ID:UBexnHTQ
アセットストアで探すのはダメか?
2020/04/28(火) 08:57:56.02ID:NcdKxY7p
ありよ
293くまじょ
垢版 |
2020/04/28(火) 10:45:18.76ID:9EVv0REZ
UIのTextではなくて
GameObjectの子要素として文字や数字を表示したいときどうするのでしょうか
294帝王
垢版 |
2020/04/28(火) 19:39:00.29ID:+kIsn7nO
TextMeshProとかでできるんじゃないのーー?
(適当)
2020/04/28(火) 20:05:51.71ID:g/IoFmi8
UGUIのイメージをドラッグして移動させたいのですが、
canvasの設定をscreenspace overlayからcameraに変更するとドラッグ中に描画されなくなってしまいます。
パーティクルを前面に表示させるためにcanvasの設定を変えました。

考えられる原因はありますか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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