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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

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

Q&A

解決済

1回答

1236閲覧

物を一つだけもつプログラムを実装したい

M.K.I.R

総合スコア13

C#

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

Unity

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

0グッド

0クリップ

投稿2018/09/13 01:15

編集2018/09/13 02:53

前提・実現したいこと

キャラクターが物を持つ際、複数持てなくしたい。
それと、現在は持っているときに二つ目を持とうとすると、交互に持つ・置くを繰り返してしまう。

発生している問題・エラーメッセージ

エラーメッセージというよりかは、条件を変えても変わっていない(自分のやっていることがあまり変わっていないと思う)。

該当のソースコード

void up () { Carrying = 0; Up = 0; Down = 1; //anim.Play("motu"); transform.parent = GameObject.Find("penci_base2").transform; Vector3 PosObj = transform.localPosition; PosObj.y = transform.position.y * 0.05f; transform.localPosition = PosObj; roll = true; if(transform.tag == "Cube") { //GetComponent<BoxCollider>().enabled = false; GetComponent<BoxCollider>().isTrigger = true; } else if(transform.tag == "Sphere") { //GetComponent<SphereCollider>().enabled = false; GetComponent<SphereCollider>().isTrigger = true; } GetComponent<Rigidbody>().useGravity = false; GetComponent<Rigidbody>().isKinematic = true; } void down() { Carrying = 1; Up = 1; Down = 0; transform.parent = null; roll = false; player.GetComponent<PencilBaseMove>().roll = 2; if (transform.tag == "Cube") { //GetComponent<BoxCollider>().enabled = true; GetComponent<BoxCollider>().isTrigger = false; } else if (transform.tag == "Sphere") { //GetComponent<SphereCollider>().enabled = true; GetComponent<SphereCollider>().isTrigger = false; } GetComponent<Rigidbody>().useGravity = true; GetComponent<Rigidbody>().isKinematic = false; } void OnTriggerStay(Collider col) { if (Input.GetButtonDown("Fire3") && col.gameObject.tag == "range") { if (Up == 1 && Down == 0) { if (Carrying == 1) { up(); } } else { if (Carrying == 0) { down(); } } } }

試したこと

int型、bool型での切り替え、range(持つ範囲)をなくす
rangeをなくすのは、その後持ったり置いたりするのに使えなくなってしまうため断念

補足情報(FW/ツールのバージョンなど)

書いた物がオブジェクト化し、それを複数回持つが、一度に複数を持つのをやめたいです。

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

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

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

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

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

torisan

2018/09/13 01:39

アクションゲームか何かですか?それと「現在の状況」と「期待する結果」をもう少し詳細に教えてください。
M.K.I.R

2018/09/13 01:43

操作性が自由なアクションゲームな感じですね。現在の状況としては、持っている状態で他のオブジェクトを持とうとすると、交互で持ち替えしてしまう状態です。期待する結果は、持っているときには他のオブジェクトは持たずに、置くことだけを実行するという状態を作りたいです。 言葉足らずかもしれませんがこのような感じに思っています。
takabosoft

2018/09/13 02:06

UnityならUnityのタグを入れてください。
M.K.I.R

2018/09/13 02:09

申し訳ございませんでした。Unityのタグを入れ忘れていました。質問が初めてなもので不備がありすみません。
takabosoft

2018/09/13 02:45

記事の再編集機能からタグって追加できません?(私は質問したことがないのでできるのかわかりませんが)できるのであれば、そちらで追加し、重複で投稿した記事は削除してください。
M.K.I.R

2018/09/13 02:54

あ、できました。度々のご指摘ありがとうございます。もう一つの方消しておきます。何度もすみませんでした。
guest

回答1

0

ベストアンサー

OnTriggerStay()の中のInput.GetButtonDown("Fire3")が連続してtrueになってしまっている事はありませんか?

すなわち、一度しかボタンを押していないにも関わらずOnTriggerStay()の条件が2度連続で真となってしまうことで、down()の後にup()が呼ばれてしまい、結果的に「置く→持つ」の動作をしてしまっているのではないでしょうか。
これはif (Input.GetButtonDown("Fire3") && col.gameObject.tag == "range")の中にDebug.Log()を置いてみて、1度のボタン押下で2度メッセージが表示されてしまっていないかを確認してください。

もしも2度通ってしまっている場合は、例えばですがアイテムを持ったり離したりするアクションをボタンUPにして、ボタンDOWN受付後のボタンUPを1回だけ受け付けるようにするなどするとどうでしょう

csharp

1 private bool CanAction = false; 2 3 void OnTriggerStay(Collider col) 4 { 5 if (Input.GetButtonDown("Fire3") && col.gameObject.tag == "range") 6 { 7 CanAction = true; 8 } 9 10 if (CanAction && Input.GetButtonUp("Fire3") && col.gameObject.tag == "range") 11 { 12 CanAction = false; 13 if (Up == 1 && Down == 0) 14 { 15 if (Carrying == 1) 16 { 17 up(); 18 } 19 } 20 else 21 { 22 if (Carrying == 0) 23 { 24 down(); 25 } 26 } 27 }

投稿2018/09/13 03:49

TakafumiYuasa

総合スコア124

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

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

M.K.I.R

2018/09/13 04:18

回答ありがとうございます。 該当箇所をDebug.Logで確認したところ二回やってました。gesyutapoさんの通りにやってみたら持つ置くの精度が格段に上がりました。ありがとうございます。 この後も色々参考にしながら試してみたいと思います!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問