今回の目標
プレイヤーオブジェクトが衝突したオブジェクトに変わるようにしたい
できなかったやつ
コード
void OnCollisionEnter(Collision collision)
{
// 触れたオブジェクトのMeshFiletrとCollider
MeshFilter otherMeshFilter = collision.gameObject.GetComponent<MeshFilter>();
Collider othercollider = collision.gameObject.GetComponent<Collider>();
string other_name = collision.gameObject.name;
// 現在のオブジェクトのMeshFilterとCollider
MeshFilter playerMeshFilter = player.GetComponent<MeshFilter>();
Collider playercollider = player.GetComponent<Collider>();
if (otherMeshFilter != null && playerMeshFilter != null && other_name != "Plane" && other_name != "Wall") // 床に触れても変更しないようにしておく
{
// プレイヤーのメッシュを触れたオブジェクトのメッシュに変更
playerMeshFilter.mesh = otherMeshFilter.mesh;
// 当たり判定も一緒に
playercollider = othercollider;
}
}
この方法だと描画される絵(多分mesh?)だけ変わってしまい、colliderは変更されなかった;;;カナシイ
解決法
void OnCollisionEnter(Collision collision)
{
// 触れたオブジェクトのMeshFiletrとCollider
MeshFilter otherMeshFilter = collision.gameObject.GetComponent<MeshFilter>();
Collider othercollider = collision.gameObject.GetComponent<Collider>();
string other_name = collision.gameObject.name;
// 現在のオブジェクトのMeshFilterとCollider
MeshFilter playerMeshFilter = player.GetComponent<MeshFilter>();
Collider playercollider = player.GetComponent<Collider>();
if (otherMeshFilter != null && playerMeshFilter != null && other_name != "Plane" && other_name != "Wall") // 床に触れても変更しないようにしておく
{
// プレイヤーのメッシュを触れたオブジェクトのメッシュに変更
// 当たり判定も一緒に
playerMeshFilter.mesh = otherMeshFilter.mesh;
// Colliderの変更
+ Destroy(playercollider);
+ player.AddComponent(othercollider.GetType());
}
playercollider
をDestroy()で削除してplayerオブジェクトにコンポーネントを追加するようにした
最後に
まだunity触り始めて日が浅いので、間違い等あるかと思いますのでどんどん指摘ください🙇