///マス生成 static public MapTrout create(List <Arg> aChip) { MapTrout tTrout = MyBehaviour.create <MapTrout>(); List <Arg> tMasDataList = new List <Arg>(); //マスのタイル情報リスト MapAttributeBehaviour tAttributeBehaviour = tTrout.gameObject.AddComponent <MapAttributeBehaviour>(); //マップ属性 tAttributeBehaviour.setAttribute(MapBehaviourAttribute.Attribute.none); //マップ属性の初期値をnoneに設定 //マスのタイル情報を読んでリストに foreach (Arg tData in aChip) { Arg tMasData = loadMasData(tData.get <string>("file"), tData.get <int>("x"), tData.get <int>("y")); tMasData.set("file", tData.get <string>("file")); tMasDataList.Add(tMasData); //マップ属性を重ねる tAttributeBehaviour.mAttribute.pile(tMasData.get <string>("attribute")); } //画像設定 ChildSprite.addSpriteObject(tTrout.gameObject, new Arg(new Dictionary <string, object>() { { "pile", tMasDataList } }), kDirPath); //collider設定 if (tAttributeBehaviour.mAttribute.attribute != MapBehaviourAttribute.Attribute.flat && tAttributeBehaviour.mAttribute.attribute != MapBehaviourAttribute.Attribute.none) { BoxCollider2D tBox = tTrout.gameObject.AddComponent <BoxCollider2D>(); tBox.size = new Vector2(1, 1); } return(tTrout); }
///引数の距離だけ移動できるか(ColliderがBoxCollider2dであること前提) private MapPassType confirmPassBy(Vector2 aVector) { BoxCollider2D tBox = (BoxCollider2D)mCollider; //当たり判定をとる Collider2D[] tColliders = Physics2D.OverlapBoxAll( new Vector2(tBox.bounds.center.x + aVector.x, tBox.bounds.center.y + aVector.y), tBox.size, 0); bool tStopFlag = false; //当たったcolliderの確認 foreach (Collider2D tCollider in tColliders) { if (tCollider == tBox) { continue; //自分のcollider } MapAttributeBehaviour tAttributeBehaviour = tCollider.gameObject.GetComponent <MapAttributeBehaviour>(); if (tAttributeBehaviour == null) { continue; } //衝突した相手にマップ属性なし(通過してOK) MapPassType tPassType = tAttributeBehaviour.confirmPassType(mMyAttributeBehaviour); //通過不可 if (tPassType == MapPassType.collision) { return(MapPassType.collision); } //停止 if (tPassType == MapPassType.stop) { tStopFlag = true; } } return((tStopFlag) ? MapPassType.stop : MapPassType.passing); }
//colliderの通過を許可するか public MapPassType confirmPassType(MapAttributeBehaviour aBehaviour) { if (mStayEvent == null) { if (Physics2D.IsTouching(aBehaviour.GetComponents <Collider2D>()[0], this.GetComponents <Collider2D>()[0])) { return(MapPassType.passing);//stayイベントがない かつ 既に接触している → 通過可 } } if (equal(aBehaviour.gameObject, mTrigger)) { return((MapPassType)Enum.Parse(typeof(MapPassType), mTrigger.get <string>("passType"), true)); } else { return(MapPassType.passing); } }
///引数のマップ属性が自分を通過できるか virtual public MapPassType confirmPassType(MapAttributeBehaviour aBehaviour) { if (mAttribute.getAttributeType() == MapBehaviourAttribute.AttributeType.mapEvent) { //自分がeventのcolliderの時 return(gameObject.GetComponent <MapEventTrigger>().confirmPassType(aBehaviour)); } else { //自分がeventのcollider以外の時 if (aBehaviour.mAttribute.canPass(mAttribute)) { return(MapPassType.passing); } else { return(MapPassType.collision); } } }
private void Awake() { mCollider = gameObject.GetComponents <Collider2D>()[0]; mMyAttributeBehaviour = gameObject.GetComponent <MapAttributeBehaviour>(); }