Unityで何かゲームを作りたいんだがね [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>107
シンプルって難しいですよねー
>>108
やっぱりクラスとインタフェースですか
https://www.dropbox.com/s/33p4sfirz0jieb6/Comand.cs?dl=0
とりあえずこんな感じで実装していこうかなと思ってるんですが
継承やらインターフェイスがいまいち理解できてないので使い方があってるかよくわからない ただこの方法だと結局Switch分でどのコマンドのインスタンスを生成するか書かないといけない気がするから気持ち悪いしなんか効率が悪い気がしてるんですよね。
現状たたかうをクリックするとの文字列を取得してswitch文でコマンド決定してるから変わらないんですが
今後コマンドが増えるたびにそのswitch文がどんどん増えること考えると他にいい方法がないか考えないとなと思ってます。 手堅いのはDictionaryで最初にすべて初期化してしまって<string Comand>型で保持して取得する方法がいいかなと思ってるんですが、
たとえばリジェネみたいにターンをまたいで効果があるものについてはメンバ変数としてターン経過を持たせようかなと思っているので、
戦闘に参加するキャラクター分リストを作らないといけなくります。
それもどうなのかなっと思っているけど、正直メモリとかまったくわからないからとりあえずやってみようかなと思います。 とか書いていて思ったのですが状態変更系は付与コマンドと実行コマンドは別になるからあまり気にしなくてもいい気がしてきたのでもちょっと考えてみます。
日記になって申し訳ないですが独り言だと思ってください。
プログラム本当に難しいです 100の論理より1の実践ですね
やってみないとわからん事あるし
とにかく進むのはいいことだと思う
リファクタリングは後でじっくりやればいいと思う >>109
読みやすいコードだったからアレンジしてユニットテストを書いてみた
コマンドの追加とテストが楽なやり方
http://fast-uploader.com/file/7077779562605/
実際使うときの流れはこんな感じかな
【ヒール】の選択時に
type = CommandType.Healをキャッシュ
【対象】の選択時に
targets = new []{target}をキャッシュ
ToDo.Execute(this, targets, type);を発行
全キャラの入力が終わったら
ToDo.Update();をマネージャーで実行 >>115
読みやすいだなんてありがとうございます。
そんなにたいしたことしてないので読みやすいのかもです笑
がんばって読んで参考にさせてもらいます! 列挙型!!
こんなものが合ったんですねーまだまだ勉強不足です。 単体テストの作成方法もすごく勉強になります。
ほんとまだまだ覚えることがたくさんありますね。 foreachの中の(int)がなんなんだろって思ったけどすげえええええってなりました笑
やっぱり人のプログラム見るのって大切ですね。 とりあえず勉強した結果を
https://www.dropbox.com/s/lhfj4uqblzs0dri/Test.cs?dl=0
実は動的にインスタンスを生成したいって書き込んだ段階でリフレクションにはたどり着いたのですが
動作が遅いとのことだったのでちょっと見送ってたんですが最初の初期化の段階でリストにすべてのコマンドを
保持すれば使えそうですね とりあえず目標の動きができるようになりました。後はログ出力です。 とりあえずすべてのキャラがバラバラに動きつつもターンの概念をもって動けてるのでいろいろ実装できそうです
コマンドのクラス化は>>115さんのコードを参考にさせてもらいました!
本当にありがとうございました! >>124
すいませんまだまだゲームとは程遠いですし
スクショ撮ってとか出来るレベルではないので見ても面白くないから人こないですよねー >>125
制作板なので自分としては制作途中のSSは非常に興味あますよ
なのであっちのスレではバシバシあげてます
SSあるとスレが華やかな気がしていいとおもう そうですよねーSS取れるようになるまでがんばります! https://www.dropbox.com/s/zyyt2yuwfkkxulx/TestGame.zip?dl=0
なんとか戦闘のログもいい具合に実装できました。
かなりゲームらしくなってきたのではないでしょうか
ヒールもできるよ。 >>129
は見れました!
>>130
は専ぶらに表示されないなぁ
なんでたろ 結膜炎になって死んでました
とりあえず目が治ったので勉強を進めていきますよ よしここ乗っ取るかなぁ
もう2年も空いてるようだし 今作ってるのの進捗報告にする予定
あとはunity で分からんことあれば一緒に検証するよ モチーフはハンターハンターの軍儀、ニコニコに軍儀作ってみたがあったけど、まったく分からんかった
なのでかなりシンプルにして重ねも二段までにした、駒は足軽、武士、乱破、弓、騎馬、竜騎士、軍師の7種類
「成り」は検討中、重なりを櫓と呼ぶんだが櫓になると動きの幅が増えるのでいらないかなと
動きはまずまず
問題はコンピュータ革の思考ルーチンだなぁ
将棋のみてもようわからん( ノД`)… メッセージ処理を実装中
https://i.gyazo.com/9342a06c1fa301b86ff17a8e00bb83dd.png
スクロールを自作にて
https://imgur.com/euJhVIc
一応標準でScrollViewってのはあるけど微妙に使いにくいんだよね
なので、EventTriggerでBeginDragとDragを手動追加してみた
昨日半日悩んだが、やっと良き感じかな UIはAssetStoreから適当なフレームワーク落としてきたほうが早いし楽
uGUI生で使うのはやってらんない このスクロール自作部分だが、On Become 系を使うための工夫がされててこれにより楽にはみ出ないようにしたんだわ
これがて来たのも、この画面それぞれが独立してて、カメラが複数あるからなのだ
こういうのを試して実装するのこそ作成してる感あって楽しいね!
キット作るのも楽でいいが、バルサから型紙から自作する楽しさがいいね
完全オリジナルだしね 今のところ重さは感じないです
スマホ実機に持っていっても全く大丈夫
因みにメインカメラが、全体盤面
上部メニューにサブカメラ
メッセージカメラ
持ち駒カメラ
駒選択でカメラ3つの計7ですね
当然ながらオーディオリスナーはメインのみ あ、持ち駒カメラは自駒と捕虜駒で2つだから形8だわ
それとシーン違うけど先行決めでも2つ使ってる 土日はリファクタリングでおわた〜
うーんそろそろ真剣にコンピュータ側の思考回路に取り掛かるかなぁ 積み残しは沢山あるが、とりあえずの相手の動きを
https://imgur.com/NkrlOmp
まぁ同じ手を打つだけなので、先行では動かないんだがwww
まさに人工無能
これでもまだ櫓とか取得とかには手を付けてない
むずいお>< コンピュータ側の単騎駒の取得実装
これで単騎だけならまぁ勝負できそうかな、あまり意味ないけど
このゲームはやはり櫓での動きだし
取った駒が味方になるターンまでどうしのぐか
そこらの思考が難しい
あ、まだ味方駒の刺し作ってない、明日はそれやるか
こうやって徐々に形になっていくなぁ
最初の頃から考えると凄いわオレ! うーむ
ちょっとゆにてぃ一週間やってた
明日からまた再開だ そいえばwebgl 初めてやったが日本語が表示されないのには焦った
てかビルドしてから分かる問題はやっかい
これは一応1week に説明あったから良かったけど
ちょっと謎の現象が出たのでチビりそうになった
明日まとめとしてツイッターにでも書いとこ 初心者から誘導されてきました。
C#の調べ物してるのかUnityの調べ物してるのかで分からなくなる2ヶ月目新人です。 簡単に自己紹介。2ヶ月前にunityとプログラミングに触り始めました。
きっかけは仲間内でやってた将棋の拡張ルールの遊びを転勤で離れ離れになったのでネット対戦したいなと思ったからです。 >>162
4ヶ月目だけどわかる
最初にメインクラスを作ったのに遠いクラスから誘導しきれなくて色んな所で処理が始まって必要なデータを何処が持ってるのかわからなくなる新人です >>163
それSteamのテーブルトップシミュレーターで良くない? PCから。基本的なことがわかってないんですが
void Start()
{
Player _player = photonView.Owner;
}
このPlyaerとplyaer と=の先の関係が未だによくわかりません。
Playerっていうクラスの _playerという変数にphotonViewって何かのOwnerという情報を持たせるということ? photonViewの中には色んなものが入っていてOwnerは所有権持ってる人の情報がPlayerという型で入ってる
やってる事はこれと同じで初期化がまとめられてたり型や値の取り出し方が違うだけ
float takasa = 0;
takasa = transform.position.y;
IDE使ってたらその辺の情報はカーソル当てれば出てこないか?
そもそもStart()で動かすとかphoton自体の準備ができてなくてまともに動かないコードな気がするが >>168
Playerの_playerにするのはなぜなんだぜ?
playerだけでもいいような。
IDEは赤い下線が出なきゃおkくらいにしか思ってませんでした。 >>169
そのIDEが設定してるコーディング規約でそうなってるんだろう
変数がローカルなのかプロパティなのかみたいなのが使ってるところを見ただけで判るし混同しにくくなるからバグも減る
動作としては名前なんてどうでもいいけど開発効率を考えるとちゃんとやったほうがいい アンダーバー付けてる変数名はその関数内だけとか、if ブロック内だけとかで使ってるだけとか、まぁ自分ルール >>167
このStart関数はこんな感じ
void Start()
{
Player _player = photonView.Owner;
textName.text = _player.NickName;
if (_player.IsMasterClient) gameObject.name = "Master";
else gameObject.name = "Client";
if (photonView.IsMine)
{
Color _color = srImage.color;
_color.a = 0;
srImage.color = _color;
}
}
_player はただ単にニックネームを取得する為だけのものなのでこの場で宣言してるだけ
本来なら変数は
Player _player ; で宣言して、使う場所で
_player = photonView.Owner; 代入なり参照なりする
メンドイから宣言と同時に値を入れてるってだけの話
で、このスクリプト「PlayerCntrl」はTriangleプレファブに付けてるのね
これはネットワーク繋がった後に生成されてるからphotonViewが使えるわけだ あぁIsMasterClientの判定にも使ってた
その後のIF文のColor宣言はそのブロック内だけしか使ってないでしょ ぶっちゃけ
Player _player = photonView.Owner;
textName.text = _player.NickName;
if (_player.IsMasterClient) gameObject.name = "Master"; else gameObject.name = "Client";
この部分ってわざわざ変数にしなくても
photonView.Owner.NickNameであったり
photonView.Owner.IsMasterClientを直接使っても大丈夫だと思う
しかし次のは無理なんよ
if (photonView.IsMine)
{
Color _color = srImage.color;
_color.a = 0;
srImage.color = _color;
}
これをsrImage.color.a = 0は出来ない
何故かは聞かんといて(* ̄∇ ̄*) ずっとエラーばかりで辛い。unity立ち上げるのも億劫。みんなどうやってこの気持ち乗り越えて来たんだろうか。 そりゃまぁエラーは一個一個潰していくしかないなぁ
自分はエラーなら調べて試してって出来るからまだましだけど
作ってるものを何回もテストしてると飽きてきたりだんだんつまらないと思ってきてモチベが下がる
そんなときはやる気出るまで他のことやる
仕事じゃないし無理してやることもね >>178
エラーはでませんが再生ボタン押しても三角出てこないですね ジフ画像見ての通りで、2つクライアントを、起動しないと、でません
一つだ、確認するには
カラーの部分的はコメントしてください 何をやってるかというと、オンラインでそれぞれの機体を表示してるのだけど
本来なら自分と相手で2つ表示されるのよ
それを自分のは透明にすることで、あたかも1つのオブジェクトを操作しているように見せてるの
アルファ値をいじるとわかります これの元は公式戦のチュートリアルですので
そちらをやるといいかな
ただチュートリアルは3デーなのでそこらは変えてね https://doc-api.photonengine.com/ja-jp/pun/current/class_photon_view.html#ad892c308b04787c06907120e64f6bc03
ここにあるvoid PhotonView.TransferOwnershipを使って出来ないかと思ってたんです。
まずはじめに入室した順に1,2,3・・・とActorNumberをつけることにしました。
public override void OnJoinedRoom()
{
Room myroom = PhotonNetwork.CurrentRoom;
Photon.Realtime.Player player = PhotonNetwork.LocalPlayer;
photonView.TransferOwnership(player.ActorNumber + 1);
これで次に行けると思ったところで、このままだとActorNumber=2がログインするまで
処理を待たないと行けない事に気づいて、これは渡すボタンを作ってそこに貼り付ける
スクリプトなのか?と思ったところが今日まで。
初心者はスクリプトリファレンスに書かれてあることを試すためには
どういうコードを書いておかないと動かないかが分からない。 オーナーシップについてはサンプル作る際には使い方がよくわからんかったので権利をRPC でやりとりしたんだけど
次のとこにやり方っぽいの書いてあったからちと試して見ます
https://doc.photonengine.com/ja-jp/pun/v1/demos-and-tutorials/package-demos/ownership-transfer
オンラインは特に初心者じゃなくても難しいんだけど、まずは紙にどういう処理の流れになるのかを書き出すと良いかと とりあえずOnwerShipを使った方法でサンプル作成してみました
http://whitecats.dip.jp/up/download/1589775513/attach/1589775513.zip
パッケージなのでPhotonを取り込んだ後にインポートしてください
前回は2つobject作成したけど今回は一つのみで出来ました
かなり進歩した感じです
ただ、マニュアルに「OnOwnershipRequest()はシーン/ゲーム内で1回のみにする必要があります。」って書いてあるのが気にはなるんだけど
とりあえず何回クリックしても問題は今のところない感じかなぁ・・・ 動きはこんな感じ
https://imgur.com/X0Ienld
今回は一つのみなので、クライアント一つでも表示はされます
テストするには2つ立ち上げないと意味ないけど
ちなみに、片方が破棄されると残った方が自動でマスターになるようですね
これは便利 考察すると
今回のonwer変更はphotonView.RequestOwnership();で行っているので、上述のは関係ないかもしれない
公式のサンプルから「public void OnOwnershipRequest(object[] viewAndPlayer)」を付けてはいるけど
この関数は呼ばれてないようなので、気にする必要ないかもしれませんね 自分で完全オリジナルはきつい。
先人のファミコンやスーファミやPSとかのレトロゲーをコピ…ていうと聞こえ悪いから、オマージュしたような感じで作ったらいいよ。
できるだけ自分の要素とか入れたらいな。
GBAのエレベーターアクションなんてのもいま作り直しても面白いだろう。
あと、UnityのGit(Source Tree)でプロジェクト管理するとき、除外リストってこれでいいんかな?
https://i.imgur.com/d2fP4Um.png
いろいろイグノアリスト見てくと全部微妙に異なってるから。 >>188
仕事が立て込んでまして、落着いたら見させていただきます、ありがとうございます。 >>189
git やらんからわからんけど、不具合出てないならそれでいいんでないか
>>190
この時期に忙しいのは良いことまずはリアル優先です ただプログラムって少しでも離れると、あれなんだっけ?ってなるから
5分でも時間あれば、エディタ立ち上げてソース見るだけでもやっとくといいよ ユニティー厨が最近湧いてんのかw
あれではプログラムの腕は錆付くだろ
プログラムできんやつが使うツールだな >>192
今自分で書いたコード見返してましたが、まさにそれでした。何をするためにコードを書いてる途中だったか分からなくなってる。
それで作ってもらったサンプルを見るためにpun2インポートしてappidも入れて、packageをインポートしてpc用にビルドしたんですが何も出てこない。
このOwnerLancherとDisCntrlとPlayCntrlを眺めれば分かってくるかもですかね!? 設定値でシーンが規定値になってるかもなので、インポートしたのの中にシーンあるのでそれを設定してね
とりまシーンクリックで見れると思います >>193
最近じゃなくて、ずっとだよ
しかもここunity スレだから
ってunity スレきて何言ってんのぷぷ 色々忘れてて焦る…もう一回チュートリアルとかやり直します。 3歩戻って2歩進んだ感じ。
プログラミングって孤独との戦いな気がしてきた。もちろん分からないことを教えてほしいけどエラーが治らない!ってのを誰かと共有したい。 初心者スレ>>709のトリプルタップなんですが
ad 初心者スレ>>709のトリプルタップなんですが
このコードを使って
2タップ3タップそれぞれの指示を出すには
どういう形になるのでしょうか
サンプル教えてください
お願いします チェックカウントの関数で、スイッチ文で定義するといいかと思うよ
プリントされるでしょ void CheckCount()
{
print(clickCount);
clickCount = 0;
}
ここでプリントしてるから、clickCountを判定にして
switch (clickCount)
case 1:クリック1の処理
case 2:クリック2の処理
という感じ
すまん今スマホなんで微妙だけど、スイッチ文については調べればすぐ出ると思う
色々やってみて
ダメなら明日またパソコンからサンプル上げます >>204
ありがとうございます
クリック判定はなんとかできたみたいなんですが
インターバル処理みたいのが必要ですよね ちなみに現状は最終クリックから0.3秒の間隔で確認しているので
その前に判定したいとか? >>207
すいませんなんか変な勘違いをしてました
いろいろ試したところ、switch構文でダブルとトリプルの判定ができました!
ただ、ダブルタップ後、トリプルタップをするまでのほんの少しの間に
ダブルの方の動作が起きかけて、トリプルタップでトリプルの動作になるといった感じです。
ちなみにこのTapTimeを使う場合、これにどう加えればトリプル判定ができるのでしょうか
両方マスターしておきたいので教えてください。
void Update () {
// double tap
if (isDoubleTapStart){
doubleTapTime += Time.deltaTime;
if (doubleTapTime < 0.2f) {
if (Input.GetMouseButtonDown (0)) {
isDoubleTapStart = false;
ChangeSize (true);
doubleTapTime = 0.0f;
}
} else {
ChangeSize (false);
// reset
isDoubleTapStart = false;
doubleTapTime = 0.0f;
}
} else {
if (Input.GetMouseButtonDown (0)) {
isDoubleTapStart = true;
}
}
} ■ このスレッドは過去ログ倉庫に格納されています