현재 상황 (유니티)
유저
1. Rigidbody를 설정
2. Interpolate, Continuous 설정
벽 :
1. Rigidbody랑 PhysicMaterial를 설정
2. Collision Detection도 Continuous로 설정
3. Static 설정
(새로운 문제)
왜 점프가 안되지??
void Jump2() //사용자의 의도 대로 되는 능동적인 점프
{
if (Input.GetButtonDown("Jump") && !isJump)
{
GetComponent<Rigidbody>().velocity = new Vector3(rigid.velocity.x, jumpForce, rigid.velocity.z);
anim.SetBool("isJump",true);
anim.SetTrigger("doJump");
isJump = true;
}
}
(해결된 문제)
분명히 통과 안해야하는 상황 아닌가??
(해결된 코드)
void Move()
{
vec = new Vector3(-Input.GetAxisRaw("Vertical"), 0, Input.GetAxisRaw("Horizontal")).normalized;
//속력조절
GetComponent<Rigidbody>().velocity = vec * moveSpeed * (isWalk ? 0.3f : 1f);
isWalk = Input.GetButton("Walk");
anim.SetBool("isRun", vec != Vector3.zero);
anim.SetBool("isWalk", isWalk);
}
transform.position 을 쓰니까 당연히 통과가 되는거지. 이거는 rigidbody와 상관없이 좌표를 강제로 변환하는 개념이라서 벽이랑 겹친다면 Rigidbody에 의해 튕겨 나올순 있으나 속도가 조금만 빠르더라도 벽이 통과됨 Rigidbody 의 velocity값을 조정해야 물리연산도 같이 계산되어서 통과가 안됨
transform.position를 사용하는 이상 PhysicMaterial은 큰 의미가 없음 Collision Detection의 Continuous의 설정도 의미 없음 Static 도 의미가 없음
ㄳㄳ 리지드바디랑 포지션을 같이 쓰면 안되네
근데 왜 점프가 안되지?
transform.position = 순간이동임 순간이동 한 자리에 벽이 있던 물이 있던, 그 자리로 강제로 옮기는거라, 물리 판정이 의미가 없음 ㅋㅋ
물리 판정을 받게 하고 싶으면 rigidbody.addforce()를 써줘야 함, 이건 그 방향으로 물체를 미는 느낌이라, 벽이 있으면 막힘
Rigidbody.velocity쓰니까 괜찮네 ㄳㄳ
근데 왜 점프가 안되지?
리지드바디에 프리즈 포지션 체크해둔거 아냐?
y값은 문제없긴함
점프를 이렇게 해봐 rigidbody.addforce(vector3.up * jumppower, forcemode.impulse);
안돼 ㅜㅜㅜ