【ゲームエンジン】Unity初心者質問スレBuild4
■ このスレッドは過去ログ倉庫に格納されています
ラインの通知みたいな赤い丸に数字が入ってるアイコンってUnityのUIにありましたっけ?
何処かで見た覚えがあるのですがアセットだったかな・・・。 >>97
これ調べてもわからないです
マジでお願いします。 直訳すると、
「RequestBannerが悪いんじゃね?
bannerViewは田舎もんだから、もっと世界を見なくちゃあかんぜよ」
「もうひとつ問題があるっぺ。
HideAdでbannerViewを隠す前にデストローイ!してるべや。
bannerViewを隠してからデストローイ!してもいいけど、
べつにデストローイ!する必要ねぇんじゃね?」
・・・つまり、5行目にstaticを付けなさい、
private static BannerView bannerView;
あとHideAdの中のDestroyはいらないよ、
ってことじゃね?
(補足)RequestBannerメソッドで、毎回bannerViewインスタンスをCreateしちゃってるから
毎回Createしないで、bannerViewをstaticにして、インスタンス作成済みなら作成済みのインスタンスを使いなさい、
ってことだな 学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
PS 虫は宇宙人だよ ttp://x0000.net スクリプトを書く時に使わないusingとかモノビヘイビアとかって皆さん消してますか?
消さないとどの様な弊害があるのでしょうか? >>106
そんな機能あるんですか?
こちらはVS使ってますが使われてないusingはグレーアウトしてる感じです。
モノビヘイビアはコンポーネントを使わなければ消しても問題無いんでしたっけ・・・。
よく解説動画などで使わないので消しましょうみたいな流れがあるので読み込み速度等に影響するのかな?と思いまして。 使わない部分はコンパイラが勝手に無視してくれるので残してようが問題ない。
単にソースが長ったらしくなって読みにくく鳴るから消そうねってだけ。 >>107
VSだけど拡張機能いっぱい入れてるから正確にどれが作用してるかわからんけど
保存時にコード自動フォーマットしてくれる時に消えてるからその辺 パソコンのメモリって8GBでも足りますか
unity動かすためにはこれぐらいで十分ですかね? 最低16ですか
できれば中古で買いたいんですがそうそうないですよね Macのbookシリーズじゃなきゃ、後で差し替え。 いや、unityは大きくなり過ぎてるから足りない。
特にアセットを数個入れるだけでギガ単位でプロジェクト容量が増えてく。 そりゃあ動くよ当然
快適に動かすにはほしいという話
いまメモリ安いし 質問です
2次配列 INT型 (Y3,X10) を宣言したとして
Y0 = {1,2,3,4,5,6,7,8,9,0}
Y1 = {4,5,6,2,3,4,6,7,8,0}
Y2 = {4,2,3,4,5,6,2,8,9,0}
みたいにY軸にまとめて数値を入れたいのですが
どういうふうに記述すればいいですか? 紐状のオーラを体に巻き付けて動きをアシストさせて、身体機能を向上させる、
みたいな演出をしたいのですが、パーティクルで可能でしょうか?
それともBrenderで作るべきでしょうか
紐を巻き付けるという演出上、頂点数がすごいことになるのでそれにさらにアニメーションをつけるとかなり重くなりそうなので
何かもっと軽く作る方法はないものかと 当たり判定の際、相手のパラメータをGetComponentせずに参照するやり方を教えて下さい。
■前提
攻撃側と防御側でコライダーが接触した際、攻撃側の攻撃力を参照して、防御側の防御力と差し引き、防御側のHPを減らしたいです。
コライダーの検知は防御側の当たり判定をつけた子オブジェクトにアタッチしたスクリプトでOnTriggerしています。
防御側のパラメータは、Startで親のパラメータをキャッシュできるのですが、攻撃側のパラメータは都度誰に攻撃されたか変わるので、
collisin..gameObject.GetComponentで相手のスクリプトを取得しています。
しかしGetComponentは重いので接触の度に行うのはパフォーマンスに不安があります。
小ダメージを連続多段ヒットさせる攻撃などは危ない臭いがしています。
しかし、OnTrigger内で相手のパラメータを参照する方法を調べても、GetComponent以外が中々見つからず困っています。 接触時だけなら重くないはずですが。
そうでなければ、全て管理するしかないかと。 ゲームオブジェクトとコンポーネントを紐付けたディクショナリ作って
呼び出し時はそこからコンポーネントを取得するとか 解像度によってPostProcessingのBloomがかなり見た目変わりますけど、皆さんどうやって対処してますか? RPGのスキルの説明文やカードゲームのカードの効果のテキスト部分などは皆さんどうやって管理してますか?
一つ一つをプレハブ化して無理やりやる事も出来るのですが、もう少しスマートな方法が無いものかと模索しています。 rigidbody2dで水泳の蹴伸びみたいな反力を再現したいのですがうまく跳ねてくれません
どうすれば再現できますかね。。。 現在どうなっているのか、そこからどうしたいのかをもっと詳しく書かなきゃ答えられるはずなかろうにw >>129
例えば説明文が「敵に5ダメージ」だとして、
5の部分を変数にしてバフ等の効果によって変更可能にしたい場合どう管理すれば良いのかが思いつきません。
今はひとつひとつを関数にして表示しています。
public string Attack(int playerAttack)
{
var text = $"敵に{playerAttack}ダメージ";
}
こんな関数をたくさん書いたクラスから呼び出してtextに代入する感じです。
理想としては、ScriptableObjectにstring Descriptionを追加してインスペクターに「$"敵に{playerAttack}ダメージ";」の様に書き込めると非常に楽なのですが、記号なども含めてそのまま表示されてしまいました。
インスペクターのフォーム内で変数を使用する方法はあるのでしょうか?
この様に変化するテキストを管理したい場合もエクセルは向いているのでしょうか? >>130
物理挙動の話なら的外れかもしれませんが、
ttps://qiita.com/ryosebach/items/5bd90d4b464b9059f35d
ttps://qiita.com/pixelflag/items/e5ddf0160781170b671b
アニメーションの緩急はEasingと言うみたいです。
解決のヒントになれば良いですが。 質問です
カメラを矢印キーで上下に動くようにしたいのですが…
下のスクリプトにtransform.Translate(0,1f,0)のように書き足してみたのですが、カメラが1f上を写すだけで移動しませんでした。
2Dです。
public GameObject Player;
void Update()
{
Vector3 PlayerPos = Player.transform.position;
transform.position=new Vector3(PlayerPos.x,0,-10);
} >>135
カメラのスクリプトです
このスクリプトだとプレイヤーのx軸を追従するようになってます >>136
なら、合ってるよ。
キャラの座標を毎回カメラに入れてるでしょ。 いや違うだろw
カメラを十字キーで上下だぞ
x座標をプレイヤーポジションに合わせているだけで
入力すらとってないじゃないか よくわかんないから
きちんと書いてくれないか?
x軸はいいからy軸をどうしているのか >>138
一応
if(Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(0,1f,0)
}
のような形でキー入力は入れてみたんですが、これだと上キーを押した時にカメラが1フレーム上に移動するだけでした… >>139
プレイヤーをジャンプさせたときに一緒にカメラが移動してしまうので0にしています
0のままだと動かないそうですが、どう変えればいいのかわからず… 毎フレームy座標が0に戻ってるのでは?
yもプレイヤーに合わせるからなるんじゃないのかな
transform.position.xでx座標だけプレイヤーのx座標にしたらどうだ? ありがとうございます
transform.position.xはどこに入れるのが正しいんでしょうか…
いろいろと試してみたのですがことごとくエラーを吐かれてしまいまして >>142
これやると何故かエラー出るんだよなぁ
var x = Player.transform.position.x;
var y = transform.position.y;
if(Input.GetKey(KeyCode.UpArrow))
y+=1;
else if(Input.GetKey(KeyCode.DownArrow))
y-=1;
transform.position = new Vector3(x,y,-10);
これで >>144
ああああああできました!!
ありがとうございます!! simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0 rigidbodyにおいて、質量(密度?)を不均一にしたい(おきあがりこぼしのように一部は重く、一部は軽いというような)のですがやり方を御教授頂けないでしょうか。 フリーズローテーションとかじゃダメな気がするので
blender等でならオブジェクトのピボット中心点を移動できる
でもrigidbodyをつけるなら形の通りに動くのだろうか
マトリョーシカ(ロシアの人形ね)みたいな卵型を使うとして
オブジェクトを5分割とかにしてみて別々(もとは同じ)のオブジェクトを装備しているような感じにして
fbxで一緒にくっつけて書き出して
メッシュコライダー入れてリジットボディでmassでそれぞれの部位に重さを設定すれば
いけるんじゃないか
物理でバラバラにはならないと思うけどなるなら
blender等で全選択して押し出しでオブジェクトの膜を作って
バラバラにならないように外側を固めるとか
>>148さんが言うような機能は
たしかにblenderとかではウェイトペイントという機能はあるが
あれはボーンにどのくらい追従するかを設定するだけだから違う
無知ですまん UNITYの教科書って本には、
プレファブ作ってスクリプトから生成するとき
GameObject obj=Instantiate(prefab) as GameObject;
と記述するとあるのですが、
これの「as GameObject」付けなくても生成してくれるんですが、
省略してもいいんでしょうか? staticのシングルトンで作ったDataクラスに GameObject型のenemy1を宣言し、
別のスクリプトからプレハブをロードしてインスタンスしたところ、シーン上ではプレハブが表示されたもののなぜかnullエラーが出てしまいます。
同じプレハブをstaticでない通常の変数で宣言してインスタンスするとエラーは出ないのですが何が原因でしょうか?
//========■シングルトンのDataクラス↓
public class Data : MonoBehaviour
{
public static Data btdata = null;
private void Awake()
{
if (btdata == null)
{
btdata = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(this.gameObject);
}
}
public GameObject enemy1 = null;
//========■別のスクリプト↓
GameObject obj = (GameObject)Resources.Load("Enemy_Chinpira");
Data.btdata.enemy1 = (GameObject)Instantiate(obj,new Vector3(0.0f, 0.0f, 0.0f),Quaternion.identity); ←NULLエラーは出る
GameObject hoge = (GameObject)Instantiate(obj, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity); ←こっちだとエラーは起きなかった >>151
シングルトンが不完全
どこよりも先にこいつのawakeが実行されるわけではないのでは? >>151
別のスクリプトのawakeで実行してるとか
※個人の感想
個人的には複数シーンを使うときこのやり方は俺の好みではない >>152
Awake使ってるの今のところここしかないです… >>154
このシングルトンのオブジェクトを
このシングルトンを使うすべてのシーンに
一つ置いてますか?
このシングルトンのawakeが実行されていないと思われるのでスクリプトがあるだけでこのシングルトンのゲームオブジェクトが存在しないのではないかと思う >>156
すみません。テストをしているシーン上にDataをアタッチしたオブジェクトを置かれていませんでした…
シーンに配置したところエラーが出なくなりました。ご指摘ありがとうございます! すいませんもう一つだけ教えてください。ついさっきDataがシーン上にない時に試行錯誤しているうち
シングルトンの public GameObject enemy1 = null; を public staticに変えて、
Data.btdata.enemy1 = ... の部分を Data.enemy1 = ... という記述に変えたことでもエラーが出なくなった事に気づいたのですが、
これは普通のpublicだとbtdataをシーン上に配置してインスタンスしないとアクセスできないけど、
public static だとインスタンス無しでアクセスできる、ということなのでしょうか? >>158
正確にどういうスクリプトになったのか曖昧なので俺にはわからないのでわかりません
staticつけたものはインスタンスとは独立してるからね
インスタンスがいくつでも0個でもstaticは一つ存在する
でもシングルトンのインスタンスを一つ作ることになるけどね
シングルトンの中身の全てにstaticをつけるとかしないから >>159
ありがとうございます。シングルトンの解説をしているサイトでメンバ変数にstaticがあるものとないものがあるのはなんでだろうと思ってたんですが、少し理解できました。 >>149
unity上で部品のように固定する感じですか、ありがとうございます☺ ゲームオブジェクトのプレハブを動的に切り替える事はできないのでしょうか?
共有のゲームオブジェクトを一つ作り、その中に複数のprefabをアタッチしておき、ゲームの状況に応じてprefabを切り替える…ということをやりたいのですが、上手くいきません。
instantiateをするとクローンの別オブジェクトは生成されるのですが、別オブジェクト生成ではなく自分自身のprefabを切り替えたいです >>162
2つ既にくっついてるなら、
gameObject.setactive(false)
で、消しては? >>163
SetActiveの存在をすっかり忘れてました…ありがとうございます アニメーションクリップを作るときに、
imageをまとめてSceneビューにドラッグ&ドロップして作るときと
アニメーションウィンドウに画像をドラッグ&ドロップして作るときとで
アニメーションの速度が全然違うのですが、どうしてでしょうか。
タイムラインの秒数は同じはずなのに速度が全然違います。 3Dのゲームなのですが、避雷針のようなものを設置して、それを中心に一定範囲内で発動した魔法はすべて避雷針に向かってしまい、
実質魔法が無効化される、というシステムを考えています
スフィアコライダを使ってその範囲を作り、接触した魔法を中央の避雷針に飛ぶように軌道修正させようとしましたが、
魔法自体何かに接触すると効果を発動して消えるものであるため、スフィアコライダに接触した時点で消えてしまいました
魔法を無力化する効果自体はこれでも十分ではあるのですが、できれば軌道が変わることで意外な場所に着弾したり、
魔法を受け続けた避雷針が破裂するか何かして周囲に被害をもたらしたりとかしてみたいので、消えてほしくはありません
何か良い方法はありませんでしょうか 無料版unityで作ったアプリをGoogleplayに出して遊んでみたらmade with unityのロゴが出なくなったんですが仕様ですか? >>103
ありがとうございます。
WebViewを表示したときにAdMobを消して
WebViewを消したときにAdMobがまた出るようにしたくて、
まずAdMobのスクリプトで
public static BannerView bannerView;
にして
public void HideBanner()
{
bannerView.Hide();
}
public void ShowBanner()
{
bannerView.Show();
}
を追加して、
WebViewを出すためのボタンを押したときのスクリプトに
AdMob.bannerView.Hide();
を書いたら
WebViewを出すときにAdMobを消すことができました。
(続きます) (続き)
そして、以下のWebViewのスクリプトに
-----------------------------------------------------
void Start()
{
〜 (略)WebViewを表示させる部分 〜
webView.OnShouldClose += (view) =>
{
webView = null;
return true;
};
webView.OnMessageReceived += (view, message) => {
if (message.Path.Equals("close"))
{
Destroy(webView);
webView = null;
}
};
}
void Restart()
{
if (webView != null)
{
webView.Reload();
}
}
-----------------------------------------------------
(続きます) (続き)
自分で色々試してこれを追加すると、
void ShowBanner()
{
if (webView == null)
{
AdMob.bannerView.Show();
}
}
WebViewをバックボタンで消すときにAdMobを再表示させることができたのですが、
もう一度WebViewを出すと、AdMobが消えずに残ったままになってしまいます。
webView == nullがずっと影響してしまうのでしょうか
どうすればいいのか教えてください。 >>172は間違いでした。訂正です。
このUpdateの方を追加すると、
void Update()
{
if (webView == null)
{
AdMob.bannerView.Show();
}
}
>>172のような状態になります。 if (Random.Range(1, 4) == 1 && 2)
{
Debug.Log("三分の二で入る");
}
と書くと
エラー CS0019 演算子 '&&' を 'bool' と 'int' 型のオペランドに適用することはできません
というエラーが出てしまうのですが、これと同じような処理をしたい場合どのように記述すればいいのでしょうか。 >>174
if (Random.Range(1, 4) <3) simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0 キーを押したら平行ライトの角度が変えられるスクリプトで質問したいです。
元のライトの角度が(50,-30,0)とかになっていてたとします。
リセットキーをつけようとQuaternion.identityをつかうと0,0,0
になってしまいます。
もとの(50,-30,0)にもどす(リセット)するにはどうしたらいいでしょうか?
よろしくお願いいたします。
-------------------------------
if (Input.GetKey(KeyCode.U))
{
transform.Rotate(50 * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.I))
{
transform.Rotate(-50 * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.O))
{
transform.Rotate(0, -50 * Time.deltaTime,0);
}
if (Input.GetKey(KeyCode.P))
{
transform.Rotate(0, 50 * Time.deltaTime,0 );
}
if (Input.GetKey(KeyCode.L))
{
transform.rotation = Quaternion.identity;
} >>178
俺は初心者なので詳しいことは知らんが
角度って難しいね
回転(相対変化)じゃなくて角度を指定したいとか
検索しても話がかみ合わない >>178
平行ライトは知らんので使えるか知らんが
eulerAnglesとかlocalEulerAngles ありがとうございます。
いろいろ試して
最後のリセットさせようとする文を
transform.rotation = Quaternion.Euler(50, -30, 0);
にしました。
初期値を自分で書いてそれに戻してるだけですが機能しました。
正しいやり方ではないと思いますが。 >>181
リセット時に向く方向を変数にして、
インスペクタから指定できるようにするとか、
start関数内で現在の向きを変数に格納しておく、
とかにすると使い勝手がいいかもしれません。 位置とスケールは簡単なのに角度になると急に面倒に…
0〜180、0〜 -180、0〜360とかぁ〜 他オブジェクトにつけたスクリプトを参照できるようなスクリプトを書きたいのですがどのように書けばいいんでしょうか…
プレイヤーキャラのスクリプトから向きの情報を得て弾の進行方向を変えるような感じをイメージしているんですが。 >>184
以前自分も全く同じ疑問持ちました
自分的にこのサイトが一番わかりやすかったです
https://htsuda.net/archives/1702 animatorについてなんだけど、3dモデルに他のキャラのアニメーション付けてもちゃんと動いてくれるの?
VRMとかにモーションつける時とか違うキャラの付けてもちゃんと動いてるのが不思議で >>186
ボーンがUnityの指定しているHumanoidの仕様で、ある程度ちゃんとつけられた
キャラなら他から持ってきた動きでも動いてくれると思います。 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ともに高速点滅する >>188自己解決しました。
BをAに被せず、3のオンオフを逆にしたらOKでした >>184です
参照する方法は分かったのですが、弾を発射した後にプレイヤーの向きを変えるとそれに伴って弾の進行方向まで変わってしまうようになりました…
(右に発射したあと左を向くと弾の方向も左に変わってしまう…というような感じです)
発射した時点で進行方向を固定する関数などあれば教えていただきたいです。
>>185
一度は思いつくものの形にするには時間かかりますよね…
レスありがとうございます😊 >>190
角度取得をstartじゃなく、updateにでもいれてるんだろうね。 ゲームにはよくパワーアップやパワーダウンの効果をもつバフ、デバフがあると思います
こういったものというのは、先に計算を行って置き、実数を変更しておくのが一般的なのでしょうか
それとも、効果を発揮する状況になったとき(たとえば攻撃時、攻撃力の値が必要になったとき)に毎回算出するのが一般的なのでしょうか
前者の場合だと計算は完了しているため後は値を参照すればパワーアップ状態での行動に反映でき、負荷が軽くなるとは思うのですが、
パブ、デバフの効果切れの際に、特に乗算等で計算していた場合、パワーアップ中にレベルアップや装備変更などで元の値が変化してしまうと
効果切れの処理のときに元の値が狂ってしまうバグが発生してしまいます
後者の場合だと前述のバグは発生しにくいとは思いますが、攻撃のたびにパワーアップ分を計算しなくてはならず、
簡単な計算とはいえ毎回負荷がかかってしまいます
今作っているのは3Dでリアルタイムで動くRPGのようなもので将来オンライン化を目指していますが、
バグの回避と拡張性の問題から後者の手段を取ろうと思っているのですが、処理負荷がどう響くのか分かりません
とりあえず一般的な手法ならそれなりに実績もあるだろうということで、どちらが一般的でしょうか >>191
Startに入れて実行したら弾が進まなくなりました…
なぜなんでしょうか… >>192
前者でも元の値が変わったときに再計算をはさんでおけばバグは起きないだろうし、攻撃のたびに単純な計算するくらいの負担を気にする必要があるとも思えないです。
攻撃速度が1秒間に100回で複数の敵に多段ヒットしまくる様な特殊なゲームでなければですが。
>>193
方向の決定をStartでして、その方向にupdateで進めればいいんじゃない? scriptを用いて指定オブジェクトの色をGetComponent<Image>().material.color で変更しようとしたところ
指定したオブジェクト以外の色も変更されてしまいます。
指定したオブジェクトのみ変更させたい場合どうしたらよいでしょうか
Default UI Material というのが指定した色になっていました。 >>195
確か、マテリアルカラーはパレットだから、ほかのオブジェクトでも使ってたら変わったよ。
それが嫌なら専用のマテリアルを作るのが1番かな。 返答ありがとうございます。
指定したImageオブジェクト(ほかのオブジェクトも)のmaterialを設定していませんでした。
指定オブジェクトのmaterialを「Sprites-Default」に設定したところ
指定したオブジェクトのみ色を変えることができました。ありがとうございます。 >>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関数の中にプレイヤーの向きの情報が入っているので、弾が常にそれに連動してしまうのはわかるんですが… unity(2D)って、ひょっとしてそれほど画像の大きさは気にしなくていいですか?
カメラサイズとかで調整して、カメラで見えたものがそのまま映像として出る感じ? ■ このスレッドは過去ログ倉庫に格納されています