前置き
Unityでターン制の3DRPGを作っています(ポケモンに近い感じです)。プレイヤーが自由に操作できる通常状態(矢印キーなどでどこにでも移動できる状態)から、周囲をさまよっているモンスターに触れる事で戦闘が始まります。戦闘はターン制なので、矢印キーなどでは操作できません(戦う、逃げるなどのコマンド)。
困っている事
戦闘が始まる際、プレイヤーが勝手に動いてしまう(仕様上X軸とZ軸の移動と、全ての軸の回転を止めなければならない)のを防ぐために、Rigidbodyを操作する必要がありました。そこで、前から使っていたキャラクターの情報を入れたList(プレイヤーとは別のオブジェクトにアタッチしている)を利用することにしました。このリストは、シーンが切り替わるたびに、シーン間を移動するので、常にプレイヤーと共に共存しています。このリストにプレイヤーのRigidbodyを入れ、参照しようと思ったのですが、うまくいきませんでした。一応先にコードを貼ります。
Unity
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Linq; 5 6public class CharacterData : MonoBehaviour 7{ 8 public List<CharaList> CharaData = new List<CharaList>(); 9 public List<Rigidbody> EntityRigidBodys = new List<Rigidbody>(); 10 11 [System.Serializable] 12 public struct CharaList 13 { 14 public string name; 15 public string roll; 16 public float STR; 17 public float DEX; 18 public GameObject EntityObjects; 19 public Rigidbody rb; 20 } 21 22 void Start() 23 { 24 CharaData.Add(new CharaList() 25 { 26 name = "Player1", 27 roll = "Player", 28 STR = 10f, 29 DEX = 5f, 30 EntityObjects = GameObject.FindWithTag("Player"), 31 rb = GameObject.FindWithTag("Player").GetComponent<Rigidbody>() 32 }); 33 CharaData.Add(new CharaList() 34 { 35 name = "Boss1", 36 roll = "Boss", 37 STR = 10f, 38 DEX = 10f, 39 EntityObjects = GameObject.FindWithTag("Boss"), 40 rb = GameObject.FindWithTag("Boss").GetComponent<Rigidbody>() 41 }); 42 } 43 44 public void GetAllRigidbody() 45 { 46 EntityRigidBodys = CharaData.FindAll(rb); 47 EntityRigidBodys.constraints = RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotation; 48 } 49}
発生したエラー
Assets/Scripts/Test Data/CharacterData.cs(46,46): error CS0103: The name 'rb' does not exist in the current context Assets/Scripts/Test Data/CharacterData.cs(47,26): error CS1061: 'List<Rigidbody>' does not contain a definition for 'constraints' and no accessible extension method 'constraints' accepting a first argument of type 'List<Rigidbody>' could be found (are you missing a using directive or an assembly reference?)
このコードはGetAllRigidbody()のなかの、CharaData.FindAll()でrbの要素を全検索し、一つ下の行でRigidbodyのプロパティを変更しようとしています。ですが、おそらく私の検索力不足のせいで使い方を間違っている可能性があります。
実現したいこと
ゲームの仕様上、戦闘するキャラクターを事前に決めておくことができないので,Rigidbody取得方法としてはGetComponentしかありません。その条件をクリアした上で、Listで自由に入れ替えができるようにし、そのListの中からRigidbodyを参照できるようにしたいです。ご教授いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/09/10 00:15