プレイヤーのスクリプト
レイでの判定分け レイヤー使用
void OnCollisionStay(Collision col)
{
if (Physics.Linecast(m_charaRay.position, m_charaRay.position + Vector3.down, LayerMask.GetMask("Ground")))
{
m_isGroundCollider = true;
}
else if(Physics.Linecast(m_charaRay.position, m_charaRay.position + Vector3.down,LayerMask.GetMask("MoveGround")))
{
m_isGroundCollider = true;
gameObject.transform.SetParent(col.transform);//親子関係を設定
}
else
{
m_isGroundCollider = false;
gameObject.transform.SetParent(null);//親子関係を外す
}
}
※注意点
プレイヤーでの移動方法で挙動が変わってくるので現在は
transform.positionを操作している
Vector3 moveDir = Vector3.zero;
if (Input.GetKey(KeyCode.W))
{
moveDir += forwardDir;
}
if (Input.GetKey(KeyCode.S))
{
moveDir -= forwardDir;
}
if (Input.GetKey(KeyCode.D))
{
moveDir.z += m_moveSpeed;
}
if (Input.GetKey(KeyCode.A))
{
moveDir.z -= m_moveSpeed;
}
//トランスフォームで移動させたら移動する床でも子オブジェクト状態でも移動できる
if (moveDir.sqrMagnitude > Mathf.Epsilon)
{
transform.position += moveDir;
}