ぶつからない位置に移動しても、当たり判定が出てしまう

前提

Unityの2Dプロジェクトで簡易的な手押し相撲のゲームを作っています。

playerオブジェクトとenemyオブジェクトが互いにぶつかるようにタグで当たり判定をしていてます。
Playerスクリプトはplayerオブジェクトに付加していて、Enemyスクリプトはenemyオブジェクトに付加しています。
EnemyスクリプトはPlayerスクリプトと同じ動きをenum State caseで自動で動くようにしています。

playerオブジェクトにPlayerMeタグを付加し、enemyオブジェクトにEnemyタグを付加しています。

EnemyスクリプトにもPlayerとの当たり判定が出るように下記のように記述しています。
( private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.tag == "PlayerMe")
{
if(transform.position.x < 0.5)
{
Debug.Log("チェック");
}
}
})

実現したいこと

スクリプト上のAvoidでplayerオブジェクトの初期位置をenemyオブジェクトとぶつからない位置に移動したら、enemyオブジェクトと当たり判定が出ないようにしたい。

発生している問題

スクリプト上のAvoidでplayerオブジェクトの座標を初期位置(-1.5f, 0.5f, 0)からenemyオブジェクトとぶつからない位置(-1.5f, 2.0f, 0)へ移動させたにも関わらず、Enemyスクリプトの当たり判定が出てしまう。

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private float timer; public float startPosition; public float staryPosition; public float endPoint; GameObject enemy; Rigidbody2D rigidbody; GameObject player; // Start is called before the first frame update void Start() { enemy = GameObject.Find("Enemy"); startPosition = transform.position.x; staryPosition = transform.position.y; rigidbody = GetComponent<Rigidbody2D>(); player = GameObject.Find("Player"); } // Update is called once per frame void Update() { Challenge(); Avoid(); Retry(); } private void OnTriggerEnter2D(Collider2D collision) { if(collision.gameObject.tag == "Enemy") { if(transform.position.x > 0.5f) { Debug.Log("ぶつかったよ"); enemy.transform.Rotate(new Vector3(0, 0, -10)); ScrollEnd(); } else { ScrollEnd(); } } } void Challenge() { if(Input.GetKeyDown("space")) { Debug.Log("OK"); rigidbody.velocity = new Vector3(1.5f, 0f, 0f) * 3; } } void Retry() { if(Input.GetKey(KeyCode.A)) { Vector3 v = new Vector3(-1.5f, 0.5f, 0f); transform.position = v; transform.Translate(0, -1 * Time.deltaTime, 0); } } void Avoid() { if(Input.GetKey(KeyCode.R)) { Vector3 v = new Vector3(-1.5f, 2.0f, 0f); transform.position = v; } } void ScrollEnd() { Vector3 v = new Vector3(-1.5f, 0.5f, 0f); transform.position = v; rigidbody.velocity = Vector3.zero; } private void FixedUpdate() { if(transform.position.x >= 2.1f) { ScrollEnd(); } if(transform.position.y >= 1.9f) { ScrollEnd(); } } }

試したこと

①初期位置(-1.5f, 0.5f, 0f)を(-1.5f, 2.0f, 0f)に変更すると、当たり判定が出なくなる。
②Enemyスクリプトのタグでの当たり判定の条件を取り除いて,Avoid関数で初期位置(-1.5f, 0.5f, 0f)をぶつからない位置(-1.5f, 2.0f, 0f)に変更しても当たり判定が出てしまう。

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

playerのScale(1, 1, 1)position(-1.5, 0.5, 0)
enemyのScale(1, 1, 1)position(2.2, 0.5, 0)
EnemyスクリプトにはPlayerスクリプトと同じ動きをenmuのStateで分けて自動で動くようにしています。
playerとenemyには両方ともRigidbody2DとBoxCollider2Dを付加していて、
IsTrigger,Simulatedにチェックを入れていて、Kinematicにしています。
playerのBoxColliderはゲームオブジェクトと同じ大きさになっています。
enemyのBoxColliderはゲームオブジェクトと同じ大きさになっています。
enemyとplayerオブジェクトが動いている時はBoxCollider2Dは両方ともオブジェクトと同じ大きさでオブジェクトの動きに合わせて同じく動いています。

コメントを投稿

0 コメント