質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

361閲覧

3DアクションRPGでの操作キャラクターの切り替えができない

choco0226

総合スコア0

RPG

RPG (Report Program Generator)とは、IBMの System i(AS/400)サーバ向けのプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2024/02/16 05:58

編集2024/02/16 06:02

実現したいこと

複数いるプレイヤーを切り替え、操作対象のプレイヤーを入力操作によって変更する機能を実装したいと考えています。ですが、課題が多く、アーキテクチャレベルのアイデアを募集したいと思っております。
プレイヤが操作しないキャラクターが自律的に動くので、メインキャラとサブキャラで分けております。

発生している問題・分からないこと

下記図のようにしようかとも思いましたが、スキルという概念があり、このままではAもBもCも全員処理が変わらず、実現が難しいです。
アイデアを模索しておりますので、何卒ご協力いただけるとありがたいです。イメージ説明

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

chatgptにて質問をしましたが、拡張性のないコードしか出てきませんでした

補足

unityのバージョンは2021.3.20f1です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2024/02/16 06:30 編集

正直,文章から話の内容を把握するのが困難に思えます. > 複数いるプレイヤー →「プレイヤー」という何かは複数存在する > 操作対象のプレイヤーを入力操作によって変更 →「プレイヤー」というのは「操作」の対象となる(ここでの「操作」する者とは 誰/何 ?) > プレイヤが操作しないキャラクターが自律的に動く →「キャラクター」というまた別の存在が登場 →「プレイヤ(プレイヤー と同一か?)」は「キャラクター」を操作する > メインキャラ, サブキャラ,スキル →これらの単語の意味や,話との繋がりは全くわからない > このままではAもBもCも全員処理が変わらず →何故「処理が変わらず」という状態になるのかが全くわからない →それ以前に A,B,C とは何なのか? 「プレイヤー」なのか「キャラクター」なのかまた別の何かなのか? > Move関数 →何らかの関数であろうが,その内容は質問者しか知らないわけで,関数名だけ示されても全く意味不明 > chatgptにて質問をしましたが、拡張性のないコードしか出てきませんでした →何らかの「拡張性」を求めている,ということであれば,求めている「拡張性」とは何か? を具体的に述べるべきでは.(あなたが求めている「拡張性」を有しない回答を避けるために)
fana

2024/02/16 06:41

> AもBもCも全員処理が変わらず 雰囲気的にはおそらくコレが困っていることなのだろうと思うのだが, 【「操作」されるのか「自律的に動く」のかというのをどうやって切り替えるのか】という問題と 【処理が変わらない】という問題は 独立した事柄であるように思える(両者の関連性がわからない). 仮に全てが「自律的に動く」のだとしたら,【処理が変わらない】という問題は生じないのであろうか? 生じないとしたらそれは何故か?
choco0226

2024/02/16 08:00

まずここからの話でのプレイヤとは、実際にゲームをプレイする人たちのことで、キャラクタというのはゲーム内でプレイヤが操作を行うことによって動く、攻撃する、アニメーションが流れるといったゲーム内のオブジェクトのことをを指します。言葉足らずだったことは申し訳ございません。 そして、操作対象のプレイヤを変更のところは、操作対象のキャラクタの誤りであり、例えばキャラクタA、B、Cがいるとき、最初プレイヤが操作するのはキャラクタAであり、そこからプレイヤがボタンやキーを押すと操作するキャラクタがAからBやCに変更されます。(この場合の操作とは、WASDで移動、スペースキーで攻撃といった操作対象であるキャラクターを動かすことです。)その際に、操作していない、例えばキャラクタAを操作している場合、残りのBとCはキャラクタAに追従し、敵が現れれば自動的に攻撃を行わせたいです。 プレイヤが操作しているキャラクタ(上記の例で言えばA)のことをメインキャラ、それ以外のキャラクタ(上記の例で言えばB、 C)のことをサブキャラと呼んでいます。そして図の解説ですが、Move関数というのはキャラクタをプレイヤが操作するスクリプト(今のプロジェクトではAddForceを使っております)のことで、メイン変数にはメインキャラを、サブ変数にはサブキャラを代入し、メイン変数.Moveと宣言することで、メイン変数に入っているキャラクタのみのMove関数が実行されるという仕組みを考えています。 そこで、スキルというものが障害になってしまいます。ただ攻撃するだけだとゲームに面白みが出ないので、クールダウンがある、通常の攻撃よりも強い攻撃としてスキルというものを実装しているのですが、仮に上記のMove関数のような方法でSkill関数(スキルを打ち、攻撃の判定を出す関数だと思ってもらって大丈夫です。)を作ると、キャラクタによってスキルが違うので、同じSkill関数を呼び出してしまうと、処理も同じになってしまうのでは?と思いこの質問をいたしました。 拡張性の面については、拡張性のないというところが少し語弊を生んでしまったかもしれません。 これは私の言語能力の問題なのですが、少し説明しにくいので一旦無視していただいて構いません。(1+1=1と答えられている気分と言って伝わればそれでいいのですが、伝わらなければ構いません。) 言葉足らずなところが多く、申し訳ございませんでした。
choco0226

2024/02/16 08:01

長文で大変読みにくくなってしまい申し訳ございません。
fana

2024/02/16 08:48 編集

こちらはわからん点を列挙して問うているだけなので,謝る必要はありません. 話の内容をより分かり易い形にできる/誤記を修正できる 等の場合には,質問文を修正されると良いと思います. 今現在,【 A,B,C や メイン変数,サブ変数 の実装としてどのような「型」を考えているのか?】 という話を質問文にある程度具体的な(私の回答にある程度の)コードの形で示すと良いのではないかと思います. 「処理が変わらない/同じになってしまう」という点はそのへんに根差しているように思えるので. (図や文章だけではそこは伝わらない部分だと思います)
JunSuzukiJapan

2024/02/20 01:55

質問のタグが相応しくなさそうです。 "RPG"というのは、ゲームジャンルのRPGではなく、プログラミング言語のRPGのことなので、この質問には無関係です。タグを消してください。
fana

2024/02/20 02:11

数日間応答がありませんが, > 同じSkill関数を呼び出してしまうと、処理も同じになってしまうのでは? というのは,要は,「見た目が同じ XXX.Skill() みたいな呼び出しコードを書いても個々が別の処理を行うようにするにはどうすればよいのか?」という話なのかと想像します. やり方は複数あるでしょう. 回答では interface を挙げましたが,例えばもっと単純に「Skill() の内部に if とか switch による分岐を設ける」とかでも達成はできるでしょう. まず最も単純な方法でちょっとやってみて,それだと何か問題が生じたならば,その具体的な問題点に焦点を絞った質問などをされると良いのではないでしょうか.
guest

回答1

0

「質問へのコメント」欄にて述べたように,そもそもの話がほとんどわからない状況であるが,
おそらく

  • 複数のゲームキャラクターが同時に場に存在するが,
    各時刻においてプレイヤ(ゲームをプレイする人)の操作入力を受け付ける(=プレイヤに操作される)のはそのうちの何れか1つであり,
    他のゲームキャラクターは自律的に行動する.
  • プレイヤに操作される対象は切り替えることができる.

という話なのだろう,と思う.

Unityの事は全く知らないが,
とりあえず「何か自律行動するゲームキャラクター」というのをものすごく単純に考えると,例えば

C#

1//各ゲームキャラクターはこれを実装する 2interface IGameCharacter 3{ 4 //このメソッドがゲームループから呼ばれるので, 5 //ゲームキャラクター固有の自律的な行動をする. 6 void Move(); 7} 8 9//ゲームキャラクターA 10class GameCharacterA : IGameCharacter 11{ 12 public void Move(){ /*ゲームキャラクターAに固有の行動*/ } 13} 14 15//ゲームキャラクターBやCも同様

みたいな話があれば良いのではなかろうか,とか思う.
(A,B,C を別のclassとして実装するのが良いかどうか等はまた別の話だとして.)

で,この場合,「プレイヤーの操作に応じて動く」にはどうすれば良いのか?

  • Move() が「自律行動」なのであれば,操作対象のオブジェクトに関してはそれを呼ばなければいいよね,という考え方もあり得る.
    (別途「操作」するためのメソッドを設けてそれを呼ぶとか?)
  • Move() の「自律的な行動する」という定義を「行動する」に変える,という方向性も考えられる.
    Move()に何か引数を設けて「操作 or 自律」を指示するのでもいいだろうし,
    別口で「お前は今から操作対象な」とか「お前は今後自律行動しろな」とかいう設定をするのでもよいだろうし.

……くらいの簡素な話を書いておけば,「そういう話じゃねぇよ」とか「それだと〇〇ができねぇから質問してるんだが?」だとかいうような,より具体的な話が出てくるきっかけになるであろうか?

投稿2024/02/16 07:12

編集2024/02/16 07:13
fana

総合スコア11663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

choco0226

2024/02/16 08:04

質問へのコメント欄の場所に詳しく記載させていただきました。 言葉足らずであったことは誠に申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問