トップページgamedev
1001コメント400KB

【3Dゲームエンジン】Unity質問スレッド10

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2014/06/26(木) 23:02:03.72ID:t35CWy1R
3Dゲームエンジン「Unity」の質問に優しく答えるスレです。

Windows/Mac用。JavaScript/C#/Booといった汎用言語を使用できるのが特徴です。
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他

次スレは>>970を踏んだ方が建てること。ダメなら>>980>>990が建てて下さい。

■前スレ
【3Dゲームエンジン】Unity質問スレッド9
http://peace.2ch.net/test/read.cgi/gamedev/1399506271/

■本スレ
【3Dゲームエンジン】Unity総合スレッド22
http://toro.2ch.net/test/read.cgi/gamedev/1395140574/

■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
 http://www24.atwiki.jp/unity2ch/
●リンク
・Unity(日本公式サイト)
 http://unity3d.com/japan/
・ユーザーガイド&リファレンス
 http://japan.unity3d.com/developer/document/
・チュートリアル
 http://japan.unity3d.com/developer/document/tutorial/
・スクリプトリファレンス
 http://docs-jp.unity3d.com/Documentation/ScriptReference/
・FAQ
 http://answers.unity3d.com/index.html
・MSDN
 http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
0037名前は開発中のものです。2014/06/28(土) 05:59:22.52ID:TXgKbcyL
>>36
Screen座標が取りたいだけならこうやって取れる
Vector3 SpriteScreenPos(Transform targetSprite) {
BoxCollider bc = targetSprite.GetComponent<BoxCollider> ();
Vector3 pt = bc.transform.TransformPoint (bc.center);
pt = UICamera.currentCamera.WorldToScreenPoint(pt);
Debug.Log("PT:"+pt);
return pt;
}
事前条件はUISpriteやUI2DSpriteのtransformを知っている事とそのスプライトにBoxColliderがある事
0038名前は開発中のものです。2014/06/28(土) 07:34:48.44ID:87q0oUAI
>>37
無事座標を取得出来ました。
ありがとうございます!!
0039名前は開発中のものです。2014/06/28(土) 10:13:38.08ID:Yk7bXAg4
unityちゃんのアニメーションのFBXを3DCGツールで開いて編集したいんだけど
できた人いる?
ブレンダーだと再生できないようなんだが
0040名前は開発中のものです。2014/06/28(土) 11:52:31.81ID:LZ7/FrJO
再生ボタン押したあと非アクティブだと一時停止するのをしないようにできる方法はありませんか
0041名前は開発中のものです。2014/06/28(土) 12:25:50.62ID:02xn01kM
>>39
Maya2014では編集できた
0042名前は開発中のものです。2014/06/28(土) 13:08:19.11ID:h58mMhhZ
>>40

アセットをかえばいいと思うよ
0043名前は開発中のものです。2014/06/28(土) 13:34:08.82ID:Yk7bXAg4
>>41
mayaだとできるのか・・・
ブレンダーだと無理なんかな
インポートのFBXは欠陥品なのか
0044名前は開発中のものです。2014/06/28(土) 14:38:51.36ID:g+sRFGLs
RPGで味方のパラメータを管理するマネージャクラスを作りたいんですが
この場合って普通、抽象クラスって作るもんなんですか?
抽象クラス
 ┗(抽象クラス継承)主人公
 ┗(抽象クラス継承)味方キャラ1
 ┗(抽象クラス継承)味方キャラ2

ってするのがいいんですか?セオリー的に

今はDontDestroyOnLoadのマネージャークラス一つだけ作ってシングルトンにして
そのオブジェクト1つに全ての味方のパラメータを乗せてるんですが、こういう管理は問題ありますか?
0045名前は開発中のものです。2014/06/28(土) 14:41:19.59ID:g+sRFGLs
続きです

シングルトンクラス(DontDestroyOnLoad)
 ┗主人公パラメータHP
 ┗主人公パラメータMP
 ┗主人公パラメータSTR・・・・以下略
 ┗味方1パラメータHP
 ┗味方1パラメータMP
 ┗味方1パラメータSTR・・・・以下略
 ┗味方2パラメータHP
 ┗味方2パラメータMP
 ┗味方2パラメータSTR・・・・以下略

今はこうしています
必要な時(戦闘時など)は主人公オブジェクトからこのクラスの
パラメータをリダイレクトで読み込んで使う、という感じにしています
0046名前は開発中のものです。2014/06/28(土) 14:58:34.55ID:h58mMhhZ
>>44
ASSETSTOREでいいのが売ってるよ
0047名前は開発中のものです。2014/06/28(土) 15:50:24.89ID:KY7SHBNC
>>44
ポリモーフィックに使いたいメソッドがあればそれでいい。無ければそうする必要ない
仕様に依るとしか言えない
44に書いた内容だけで継承の是否を判断できる人はいません


シングルトンの方は必然性が感じられない。普通にクラスを実装してインスタンスを作ればいい
無用にグローバルアクセスできるパラメータを増やすのは混乱の元
0048名前は開発中のものです。2014/06/28(土) 17:01:21.42ID:g+sRFGLs
>>47
ありがとうございます
了解しました
0049名前は開発中のものです。2014/06/28(土) 17:06:07.88ID:ClpQhuQb
>>44
そういった実装面での知識はをつけたいなら「Effective C++」 がとても良い。
ほかにもコーディングスタンダードとか、コードデザインの本は色々あるぞ。

グローバルスタンダード的には、
・インターフェース継承はやるけど、クラス継承はなるべくやらない
・まずはコンポジションで表現できないか検討

ってのがセオリー。

セオリーで行けば、
たとえば「体力」「攻撃力」を管理するクラスを作って、各キャラタイプで内臓(コンポジション)
C#なら chara.status.hp = 10 とかで利用。
キャラクターはすべて ICharacter でも作ってIF継承。

じゃないかなぁ。
明確な理由があれば別にセオリーに反して継承してもいいけど、
自分の配下の若い人が継承を使って表現してたら、何で継承したのかは聞くだろうな。
ポリモーフィズム派IFを継承してれば済む話。

継承はコードが読みづらくなるのよ。
0050名前は開発中のものです。2014/06/28(土) 17:11:47.22ID:TXgKbcyL
>>49
そこはGoFのデザインパターンも一緒に勧めるべき
つか>>49の解説自体デザパタ語彙が入ってるって気付いて欲しい感じ

#ちなみに純粋にデザパタ学ぶとUnityのクラスツリーに疑問を抱く事もあるかもしらん
0051名前は開発中のものです。2014/06/28(土) 19:46:49.19ID:g+sRFGLs
>>49
レスありがとうございます。

なんというか、インターフェイスって実体を持てないので変数宣言できませんよね?
なので普通プロパティを使うんですよね(get;set)

この辺りと、RPGにおけるHPなどの仲間共通のパラメータがどのような
実装になるのかイメージが湧きません・・・
HPとかMPって変数に入れるキャラ単位の定数であって処理じゃないので
それをインターフェイスでどのようにすれば・・・と数時間考えてましたが
ちょっと今の私には技術的に難しいようですし、作りたいものもそんな複雑な
ゲームじゃないので、全味方のパラメータをコンテナ化したコンテナクラス一つ作って
各キャラは、そのコンテナにある自分のパラメータを見に行くようにする、という結論に達しました

まだはじめて間もないので今後C#に慣れてきて、インターフェイスとか抽象クラスを
もっと理解できてきたら、処理を変更しようと思います
せっかくアドバイス頂いたのにすみません
0052名前は開発中のものです。2014/06/28(土) 20:55:09.08ID:TXgKbcyL
>>51
public interface IPlayerParty {
int hp { get; set; };
int dex { get; set;};
// bra bra bra
}

public class SomeNPCanForPartyCharacter : MonoBehaviour , IPlayerParty {
// bra bra bra
}

こんなふうに組んでおいて,
public class PlayerCharactor : MonoBehaviour {
private List<IPlayerParty> _partyMember;
}
こんな事をプレイヤーが制御するキャラクタで持っていればパーティメンバーは扱えるよね?
0053名前は開発中のものです。2014/06/28(土) 20:58:56.31ID:LZ7/FrJO
Timeクラスのtimeを目視したいんですが
Debug.Log(Time.time)とかキャストして表示させようとしてもエラーがでます
一体どうなってるんですか
0054名前は開発中のものです。2014/06/28(土) 21:08:22.02ID:13iiBkAp
unityってメソッドの最初の一文字が大文字なのが違和感ありまくり。
あと、変数名も。

最近はこれがスタンダードなの?
おじさん困惑中。
0055名前は開発中のものです。2014/06/28(土) 21:14:30.19ID:TXgKbcyL
>>54
C#文化なんでソコに文句言われても困る。
自分もメソッド名は小文字で始めたいわいと思うけどコーディングルールのMS標準に合わせるとそう成らざるを得ないよ。

Javaだったら非難囂々だよねー
0056名前は開発中のものです。2014/06/28(土) 21:25:06.89ID:LZ7/FrJO
クラス名と同じTimeをスクリプトのファイル名にしてたせいでした
事故解決
0057名前は開発中のものです。2014/06/28(土) 21:30:21.05ID:g+sRFGLs
>>52
ありがとうございます。
正直、そのコードの理解も厳しいので、もうちょっとUnityというか
C#について頑張ってきます

そのコードについての質問はUnityでなくC#の質問になると思うので
ここでの質問は控えます
ありがとうございました
0058名前は開発中のものです。2014/06/28(土) 21:39:39.95ID:1D2Rjobc
え?Javaってメソッドや変数名が小文字なの?キモすぎる

C#に慣れ過ぎだとこれ
0059名前は開発中のものです。2014/06/28(土) 21:40:52.45ID:1D2Rjobc
小文字じゃねえ小文字から始まるの、です
0060名前は開発中のものです。2014/06/28(土) 21:50:15.58ID:GbXFYWlE
あれ、俺変数名やプロパティはパスカルケースじゃなくキャメルでやってた
混ざってたのかw
0061名前は開発中のものです。2014/06/28(土) 22:36:30.61ID:UYHm+SxB
AnimatorのトランジションInspector上でatomicのチェックを外しておくと
複数のトランジションが伸びているステートなら、一方のトランジションを再生中でも中断して他のトランジションに移れるそうですが
移行するトランジション優先度はどうやって指定するのでしょうか
0062名前は開発中のものです。2014/06/28(土) 22:37:37.38ID:ClpQhuQb
>>57
ほかの人が答えてくれてた。

今は、コードデザインに興味を持つ若手が非常に不足してます。
将来のメインプログラマ不足につながってしまうので、ぜひ頑張ってくれー。
0063名前は開発中のものです。2014/06/28(土) 22:43:40.91ID:h58mMhhZ
>>61
ASSETをかえばできるんじゃないでしょうか
0064名前は開発中のものです。2014/06/28(土) 23:14:23.88ID:LZ7/FrJO
これ何時間くらい勉強すればUniのスクリプトマスターできる?
まだtransformとかtimeとかグラビチィとかLookAtとかのレベルなんだけど
0065名前は開発中のものです。2014/06/28(土) 23:38:07.68ID:ClpQhuQb
ゲームプログラマは、かかっても1週間もあれば自由に使えるようになるな。
後は調べながらだよ。
0066名前は開発中のものです。2014/06/28(土) 23:58:38.04ID:g+sRFGLs
>>64
プログラム全くやった事ないド素人で、1日2時間くらいやって
今3週間目くらいですけど、上手なプログラムとかやり方を選ばなければ
ウインドウ処理以外のRPGの基本処理はできるようになりました

ウインドウ(UI)処理(NGUI)はほんと意味が分からない・・・
unityのスクリプトよりNGUIを使えるか、という方がはるかに不安です
0067名前は開発中のものです。2014/06/29(日) 00:07:22.26ID:j0JGUa9n
ライブラリはひと月もあればだいたい把握できるだろうけど
それができるようになるレベルまでには、全力でやる気注げても2年くらいはかかりそう
全力が続かず散発的に触ってたらさらにもりもり時間かかりそう
0068名前は開発中のものです。2014/06/29(日) 01:28:06.84ID:xlD1U1/P
>>66
アセットを買えばプログラムの知識はいりませんよ
0069名前は開発中のものです。2014/06/29(日) 01:38:41.87ID:sLVZnAPY
>>55
MSのコーティング規約かー。なるほど。
Java専門だったけど、郷に入っては郷に従え。MSコーディング規約に合わせるべさ。
0070名前は開発中のものです。2014/06/29(日) 02:13:04.41ID:PBgWw+BZ
オブジェクトの回転がむずい
0071名前は開発中のものです。2014/06/29(日) 02:18:13.46ID:xlD1U1/P
>>70
アセットを買うと回転も簡単だよ
0072612014/06/29(日) 02:50:01.03ID:V0nwOHaK
自己解決しました
これマニュアルに載ってない気が・・・
0073名前は開発中のものです。2014/06/29(日) 09:31:00.80ID:sLVZnAPY
>>72
どう解決したのか、わたし気になります!
0074名前は開発中のものです。2014/06/29(日) 18:39:51.50ID:V0nwOHaK
アニメーションステートのInspectorにTransitionのリストがあって
遷移先はリストの上にあるものが優先される(Atomicを外したTransitionを再生中の時のみ)
リストはドラッグ&ドロップで入れ替えられる

メカニムでキャラの動き制御するなら結構重要だと思うんだけどマニュアルにも載ってないしググっても出ない
0075名前は開発中のものです。2014/06/29(日) 18:42:12.58ID:4QjtsUPR
>>74
アセットストアで検索したらいいと思いますよ
0076名前は開発中のものです。2014/06/29(日) 18:47:37.07ID:tXtNTezB
ここは「氷菓」のウンカス、チタンダエルを愛でるスレです。

★チタンダエル (CV:くぱぁマン子)
成り上がりチョン名家のひとつ、剛毛恥嘆惰毛の一匹。
普段は黒々としたウンコだが、一度興味をひかれる男に出会うと
その細く吊り上がった瞳を濁らせて劣情の権化と化す、性欲旺盛なビッチ。
決まり文句は「わたし、痔になります」。
0077名前は開発中のものです。2014/06/29(日) 20:24:40.34ID:BwfVhPXR
シーン遷移時にフェードアウトさせてるんですが、
フェードアウト中に他のボタン、例えば前のシーンに戻るボタンや別ステージへ移動するボタンを無効にしたいです。
現在は一つ一つにpublicなboolをつけてシーン遷移時に全てfalseする方法をとっています。
もっと簡潔な方法あったらお願いします。
0078名前は開発中のものです。2014/06/29(日) 20:59:25.18ID:4QjtsUPR
>>77
アセットを買うのが一番簡潔な方法ですよ
0079名前は開発中のものです。2014/06/29(日) 22:19:39.43ID:9oDHnJ4j
>>77
NGUIなら不可視の全画面のWidget作ってコリダーを付けておき一番手前に置いておけば良いだけ
0080名前は開発中のものです。2014/06/29(日) 22:55:19.03ID:BwfVhPXR
>>79
unityの2dでやってます。
コライダー付きのゲームオブジェクトをフェード前に配置する感じにしてみます。
ありがとう。
0081名前は開発中のものです。2014/06/29(日) 23:27:23.66ID:9oDHnJ4j
>>80
基本はUIイベントに到達するまえにタップやクリックを食って捨てるだけなので、ButtonMaskとか言うオブジェクトをヒエラルキーのTopLevelに置いておいてそれをSetActiveでOn,Offするのが楽かもね
GameObject mask = GameObject.Find("/ButtonMask"); で持ってくる感じ
0082名前は開発中のものです。2014/06/29(日) 23:38:39.13ID:BwfVhPXR
>>81
やり方まで書いてもらってどうもありがとうございます。
これでやってみます。
0083名前は開発中のものです。2014/06/30(月) 01:08:56.97ID:1W4uEawq
NGUIのUIって普通にインスタンスで呼び出し→Destroyで消去
していいんですよね?

「スペースキー押すとUIをInstantiateで表示し、表示した状態で
もう一回スペースキーを押すとDestroyでUI消去する」という処理を作りました

結果は、表示は問題ないのですがスペースキーを押してもUIが消えない
事があります。
正確には、消えたり消えなかったりという感じです。
スペースキー連打してたら消えるのですが・・・。

そのUI表示時にスペースキー押してUIを消そうとした時、デバッグのエラーに
「Destroying GameObjects immediately is not permitted during physics trigger
/contact, animation event callbacks or OnValidate. You must use Destroy instead.」
というエラーメッセージが必ず出ます

何が悪いんでしょうか?(もしかしてNGUIのUIはDestroyしたらダメなんですか?)
0084名前は開発中のものです。2014/06/30(月) 01:12:17.67ID:i9hyodfO
>>74
なるほど、ありがとん!
0085名前は開発中のものです。2014/06/30(月) 01:35:52.30ID:mwLmwaX9
>>83
簡単に書くとNGUIのイベントの中で自分をDestroy してはいけませんって事
もしすぐにぶちこわしたいのなら
gameObject.SetActive(false);
で非表示にしてから
StartCoroutine("DeleyedDestroy");
みたいにコルーチンを呼び出して
IEnumerator DeleyedDestroy() {
yield return null;
Destroy(gameObject);
}
と1フレーム遅くに破壊しないと駄目
0086名前は開発中のものです。2014/06/30(月) 01:45:56.31ID:A3spulFo
俺は親のPanelにSendMessageするなりメソッド直接呼ぶなりしてDestroyしてる
そういうエラーは出てないからこれでいいはず…いいよね?
0087名前は開発中のものです。2014/06/30(月) 01:59:32.14ID:gCDT1VPE
>>75
それ質問じゃないですよアセットおじさん
0088名前は開発中のものです。2014/06/30(月) 02:04:49.85ID:Q4WnWElN
>>87
Assetを購入すれば質問になりますよ
0089名前は開発中のものです。2014/06/30(月) 02:17:23.83ID:1W4uEawq
>>85-86
ありがとうございます。

NGUIって、普通に文章を表示する、ボタンを付けるという
凝った使い方しない場合はNGUI -> Scripts内のスクリプトって
弄る必要ないですか?
インスペクタだけ弄ってれば一般的なUI機能は使えますか?
0090名前は開発中のものです。2014/06/30(月) 02:28:54.98ID:mwLmwaX9
>>89
Assets/NGUI/Scripts/*/*.csの事?
余程特殊(継承したクラスで継承元のprotectでない変数見たいとか)な事しないかぎり普通変更しないよ
0091名前は開発中のものです。2014/06/30(月) 02:30:18.33ID:1W4uEawq
>>90
はい、その事です

通常はやはりインスペクタで調整するのですね
ありがとうございました。
0092名前は開発中のものです。2014/06/30(月) 02:51:01.55ID:1W4uEawq
すみません、>>85を実行してみたのですがやはり同じエラーが出て
すんなりとはUIが消えてくれません。
デバッグ見るとNGUITools.csの

static public void DestroyImmediate (UnityEngine.Object obj)
{
  if (obj != null)
  {
    ★if (Application.isEditor) UnityEngine.Object.DestroyImmediate(obj);
    else UnityEngine.Object.Destroy(obj);
  }
}

★でエラーが出ていました。
これはNGUIどうのではなく、UIの呼び出し条件、もしくは消去条件のif文あたりが
問題あるのでしょうか?
0093名前は開発中のものです。2014/06/30(月) 02:56:27.05ID:Q4WnWElN
>>92
Assetを購入することでエラーも出なくなりますよ
0094名前は開発中のものです。2014/06/30(月) 04:27:24.95ID:PlJB/HNp
このレベルの人間がアプリ作る時代だもんな
Unityは罪深いソフトだよ
0095名前は開発中のものです。2014/06/30(月) 06:06:06.66ID:xbMO5WXk
裾野が広がるのはいいことだけど
何でもかんでも質問する人には困るよな

ヒントもらったら自分で何とかしろ
0096名前は開発中のものです。2014/06/30(月) 06:26:37.61ID:PlJB/HNp
教えて君はダメだな
0097名前は開発中のものです。2014/06/30(月) 09:08:37.35ID:A3spulFo
とりあえずNGUIを入れ直した方がいいんじゃないか
0098名前は開発中のものです。2014/06/30(月) 09:22:50.74ID:PtdaEyYt
敵をtransform.LookAtでこちらを向かせ
transform.forwardでこっちに向かって来るというようにしたいのですが、
床に沈んでしまいます。

colliderの調整、rigidbodyのconstraintsのfreeze positionのYにはチェックを入れています。
床に沈まないようにするためにはどのようにすればよろしいのでしょうか?
0099982014/06/30(月) 09:32:55.86ID:PtdaEyYt
>>98
自己解決いたしました。
ありがとうございます。
0100名前は開発中のものです。2014/06/30(月) 12:04:32.92ID:tC9m33Xe
◎2chスレッド勢いランキングサイトリスト◎

★+ニュース板
・ 2NN (推薦)
・ 2chTimes
★+ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
★+ニュース板その他
・ Desktop2ch
・ 記者別一覧
★全板
・ 全板縦断勢いランキング (推薦)
・ スレッドランキング総合ランキング
・ ログ速
★全板実況込み
・ 2勢 (推薦)
・ READ2CH
・ i-ikioi

※ 要タイトル名検索
※ 2chブラウザ併用推奨
0101名前は開発中のものです。2014/06/30(月) 14:20:06.55ID:ALw2LC0O
アセットを買おうとしたらガムロードに誘導されたんですが
ここはPayPalは使えないんでしょうか?
アセットストアから買ったほうがいい?常に最新ではないみたいだけど
0102名前は開発中のものです。2014/06/30(月) 19:35:37.91ID:UQ1OJf+x
maかfbxからライトのデータを取り込むことってできますかね
ライティングはunity内で調整するしかない?
0103名前は開発中のものです。2014/06/30(月) 19:40:15.99ID:MG2Qxsma
>>102
アセットを買えばできるとおもいますよ
0104名前は開発中のものです。2014/06/30(月) 21:54:47.32ID:mwLmwaX9
>>92
遅延評価しても駄目って事?(遅延評価の意味わかんないとちょっと論外)
エラーが自分を起点にしている呼び出しの中でImmidiate(即時)のDestroyは駄目って言う事を理解している?

ゲーム用のUIコードをUnity以外で書いた事あればすぐに何が悪いかわかるんだけど、コレは説明が難しいかもしらん。
0105名前は開発中のものです。2014/06/30(月) 22:42:41.46ID:1W4uEawq
>>104
すみません、ゲーム制作した事ないので初心者です・・・
完全に知識不足のようなので、とりあえずこの問題は後回しにしようと思います
ボタン連打すれば一応、閉じる事はできるのでゲーム進行不能になるわけではないですし

>エラーが自分を起点にしている呼び出しの中でImmidiate(即時)のDestroyは駄目って言う事を理解している?
半分は理解しているつもりです
「自分を起点」というところがちょっと理解できてないです
0106名前は開発中のものです。2014/06/30(月) 23:03:48.33ID:PlJB/HNp
あきらめろん
0107名前は開発中のものです。2014/06/30(月) 23:07:26.15ID:mwLmwaX9
>>105
ボタンスクリプトのイベント拾ってその中でDestroy呼んでるのが駄目って事(発生元と消失が一緒)
そうなってない?
0108名前は開発中のものです。2014/06/30(月) 23:08:14.89ID:MG2Qxsma
>>105
アセットを買えばそんなの気にしなくてすむよ
0109名前は開発中のものです。2014/06/30(月) 23:38:22.83ID:1W4uEawq
>>107
なるほど
でも発生元はオブジェクトAのInstantiateで消す時は
同じオブジェクトA内で>>85ですね

Instantiateしてからオ同じブジェクトAでDestroyしても
発生元と消失が同じとなるんでしょうか
0110852014/07/01(火) 03:55:59.52ID:nHreHfmg
>>109
そりゃ君の書いたコードに依存してるので僕からは何とも言えない。
どうしても添削して欲しいならどこかでコードを晒す以外に無いよ。
0111名前は開発中のものです。2014/07/01(火) 11:11:04.26ID:85UR2RLR
javascriptで作業しています。

"open_switch"が"false"の場合
"motion_00"を再生します。
2秒したら再生としたいのですが、
下記のように書くとエラーが出てしまいます。
どのように書けばよいでしょうか。。。
宜しくお願いいたします。

var obj:GameObject;
var script:window_control;
function Start () {
if(!obj){
obj=GameObject.FindGameObjectWithTag("untagget");
}
script=obj.GetComponent("window_control");
}
function Update () {
if(script.open_switch==true){
animation.Play("motion_01");
}
else{
yield WaitForSeconds(2.0);
animation.Play("motion_00");
}
}
0112名前は開発中のものです。2014/07/01(火) 11:12:58.80ID:85UR2RLR
111 です。
説明が足りませんでした。
2秒後ということで、
”yield WaitForSeconds(2.0);”と書くとエラーがでます。
こちらを書かないと、実行可能です。
宜しくお願いします。
0113名前は開発中のものです。2014/07/01(火) 12:14:02.96ID:wmLFBxvR
天安門事件
0114名前は開発中のものです。2014/07/01(火) 12:30:14.74ID:pEsB09th
そのyieldはどこに制御を返してるんだよ
0115名前は開発中のものです。2014/07/01(火) 13:33:09.43ID:SbtrGu4q
>>110
// ==================
// コリジョン
// 機能:プレイヤーヒット時に会話UIメソッドをコールする
// ==================
void OnCollisionStay2D ( Collision2D col ){

 // 衝突相手がプレイヤー
 if(col.gameObject.tag == "Player")
 {
  if(GameObject.FindWithTag ("UI") == null &&
  PlayerFlag == 1) //PlayerFlagは操作プレイヤー側のフラグ。プレイヤーがボタンを押した場合にON
  {
    // 会話UI表示メソッド
    Kaiwa();
  }

 if(GameObject.FindWithTag ("UI") != null &&
  PlayerFlag == 0) //UI表示時にプレイヤーが再度ボタンを押した場合にクリア
  {
    // 会話UI消去メソッド
    KaiwaDel();
  }
 }
}
0116名前は開発中のものです。2014/07/01(火) 13:51:18.75ID:SbtrGu4q
続きです

// =================================================
// 会話UI表示メソッド
// =================================================
void Kaiwa (){

  // 会話ウィンドウ表示
  Instantiate(Resources.Load("6.prefabs/UI_1"), windowPos, Quaternion.identity);
}

// =================================================
// 会話UI消去メソッド(開始)
// =================================================
void KaiwaDel (){

  // UIを非アクティブ
  GameObject.FindWithTag("UI").SetActive(false);

  // 消去メソッド本体コール
  StartCoroutine("DelMessage");
  }

IEnumerator DelMessage (){

  yield return null;
  Destroy(GameObject.FindWithTag("UI"));
}

というコードをコリジョンされる側に書いています(される側毎に別メッセージを表示するため)
何かおかしな箇所などありますでしょうか
0117名前は開発中のものです。2014/07/01(火) 18:34:44.20ID:6DDxUZVh
つか・・・もうそろそみんなGitHub使おうよ
0118名前は開発中のものです。2014/07/01(火) 19:36:17.39ID:85UR2RLR
>>114
"yield"は、このスクリプトが
当てはめられている、ゲームオブジェクトに流れているモーション
”if”部分の”motion_00”
を2秒待って、次のモーションを流したいと考えています

まだ勉強初めたばかりで、上手く伝えられず申し訳ないです。
また"yield"を使わないでも、制御できるなら、
その手法も教えていただけるとありがたいです。
0119名前は開発中のものです。2014/07/01(火) 19:37:02.27ID:nHreHfmg
>>116
そのコードだけ見てる分には原因がつかめないね。
エラーが起きたときのスタックトレース(コンソールでエラーをクリックして表示される詳細)も付けてくれると少しは見えてくるかもしれない。
0120名前は開発中のものです。2014/07/01(火) 19:37:45.45ID:nHreHfmg
>>118
void Updateの中でyieldしちゃだめじゃないのかな
0121名前は開発中のものです。2014/07/01(火) 19:53:51.32ID:SbtrGu4q
>>119
レスありがとうございます。こちらになります。
http://i.imgur.com/TPLQJEH.png

もしかしてコードの問題ではなく、NGUIで構成したUIオブジェクトの作り方に
問題があるんでしょうか
正直、一つのサイトだけでは意味不明だったので色んなサイトを参考にして
つぎはぎのような感じで作ったので・・・

UI_1:子を含めた全ての管理(詳細は理解できていません)
Camera:UIのみを映すカメラ(画面に対する位置はこれで決める?)
Sprite:UIの背景画像オブジェクト(画面に対するUI本体の大きさとかはここで決める?)
Label:UIに表示する文字であるフォントオブジェクト(フォントの種類や大きさはここで決める)

という認識で作りました。
0122名前は開発中のものです。2014/07/01(火) 19:59:02.35ID:ld0xYEoC
>>120
多分これ
例えばhanteiって関数を作って、update内を移植
でupdate内でhanteiを実行する
0123名前は開発中のものです。2014/07/01(火) 22:38:10.43ID:85UR2RLR
>>122
アドバイスありがとうございます。
ちなみに、2秒後に("motion_00")を再生させるには、
具体的にはどのように関数を入れればよいでしょうか。。。
宜しくお願いします。

var obj:GameObject;
var script:window_control;
function Start () {
if(!obj){
obj=GameObject.FindGameObjectWithTag("untagget");
}
script=obj.GetComponent("window_control");
}
function Update () {
if(script.open_switch==true){
animation.Play("motion_01");
}
else{
yield WaitForSeconds(2.0);
animation.Play("motion_00");
}
}
0124名前は開発中のものです。2014/07/02(水) 00:39:34.86ID:QoBd/2mX
>>123
具体的に言うとアセットを買えばいいと思うよ
0125名前は開発中のものです。2014/07/02(水) 00:47:38.76ID:pKyuPS5V
どうやったら2秒後に特定の処理を走らせるか なんて
誰が書いても大して変わらないし初心者には良い練習問題だと思うけどな
0126名前は開発中のものです。2014/07/02(水) 01:17:15.93ID:N3YXxu3x
>>123
この辺とかは参考になると思う
ttp://gamesonytablet.blogspot.jp/2012/12/unity.html

とりあえずコピペすれば動くコードよこせとかやってちゃ
進歩はない。
0127名前は開発中のものです。2014/07/02(水) 01:37:55.46ID:wjodTEe/
>>123
function Update () {

  if(script.open_switch==true)
  {
    animation.Play("motion_01");
  }
  else
  {
    yield StartCoroutine("Wait");
  }
}

function Wait () {

  yield WaitForSeconds(2.0);
  animation.Play("motion_00");
}

これでいけるのでは?
私も上で質問しまくってる初心者ですしCSで書いてるので
保証できませんが今コンパイルしたらエラーは出ませんでした。
yield StartCoroutine("Wait");はWait();でもいいのかもしれません
JSはStartCoroutineでコールしなくてもいいような記述がありましたので
0128名前は開発中のものです。2014/07/02(水) 01:39:58.83ID:N3YXxu3x
それでも多分動くけど延々コルーチン呼び出すよねw
0129名前は開発中のものです。2014/07/02(水) 01:44:47.69ID:wjodTEe/
script.open_switchをtrueにしなければそうなりますが
恐らく判定を省略しているのでは?
私も全部は行数オーバーで1回でレスできないので略す事が多いので・・・
0130名前は開発中のものです。2014/07/02(水) 02:03:19.53ID:N3YXxu3x
でもscript.open_switchをtrueに戻しちゃうと即
animation.Play("motion01");
が効いてmotion00は1フレームだけしか再生されなからな〜。

まぁきっと色々省略してるんだよなw
0131名前は開発中のものです。2014/07/02(水) 04:51:39.34ID:uZr6i5PP
C#とjsどっちで書いたらいいんよ
差はあるんか?
0132名前は開発中のものです。2014/07/02(水) 05:08:09.00ID:QoBd/2mX
>>131
アセットを購入すると差がなくなったりすると思います
0133名前は開発中のものです。2014/07/02(水) 05:09:48.86ID:VPrZ3A9M
まあC#だろうな
0134名前は開発中のものです。2014/07/02(水) 07:24:57.54ID:Q9Mkocfr
処理速度の差はないという話は何度か出た
あとこのての話は、回答者の自分が好きな言語を勧めてくる展開になるので決着はない。

Booこそ至高。
0135名前は開発中のものです。2014/07/02(水) 08:06:04.92ID:EWc2yUWa
黄色い本にはUnityはJスクが一番効率が良くなるように作られてるとか書いてあったな
俺は単に読み慣れてるからC#
0136名前は開発中のものです。2014/07/02(水) 13:08:50.30ID:uZr6i5PP
C#で攻めるぜありがとう
■ このスレッドは過去ログ倉庫に格納されています