Forum
2019.03.25
케릭터 이동시 회전하기
-
일단 쿼터뷰 방식의 키보드이동 입니다.
여기서 케릭터가 회전을 ... 해야 하는데 .... 어디부분을 추가 해야할지 막막하네요
코드는
-----------------------------------------------------------------------------------
public class DolsePlayerCtrl : MonoBehaviour
{
//스피드 조정 변수
[SerializeField]
private float walkSpeed;
[SerializeField]
private float runSpeed;
private float applySpeed;
//상태변수
private bool isRun = false;
private bool isGround = true;
//땅 착지여부
private CapsuleCollider capsuleCollider;
private Rigidbody myRigid;
// Use this for initialization
void Start()
{
capsuleCollider = GetComponent<CapsuleCollider>();
myRigid = GetComponent<Rigidbody>();
applySpeed = walkSpeed;
}
// Update is called once per frame
void Update()
{
IsGround();
TryRun();
Move();
}
// 지면체크
private void IsGround()
{
isGround = Physics.Raycast(transform.position, Vector3.down, capsuleCollider.bounds.extents.y + 0.1f);
}
//달리기 시도
private void TryRun()
{
if (Input.GetKey(KeyCode.LeftShift))
{
Running();
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
RunningCancle();
}
}
//달리기 실행
private void Running()
{
// 달리기 실행시 달리기 해제
isRun = true;
applySpeed = runSpeed;
}
//달리기 취소
private void RunningCancle()
{
isRun = false;
applySpeed = walkSpeed;
}
//움직임 실행
private void Move()
{
float _moveDirX = Input.GetAxisRaw("Horizontal"); //Horizontal 을 사용하면 좌우 화살표or A,D를 이용한다
float _moverDirZ = Input.GetAxisRaw("Vertical"); // Vertical 사용시 전후. W,S
Vector3 _moveHorizontal = transform.right * _moveDirX;
Vector3 _moveVertical = transform.forward * _moverDirZ;
Vector3 _velocity = (_moveHorizontal + _moveVertical).normalized * applySpeed;
myRigid.MovePosition(transform.position + _velocity * Time.deltaTime);
// if (Input.GetKey(KeyCode.W))
//{
// this.transform.Translate(Vector3.forward * 5.0f * Time.deltaTime);
// }
// if (Input.GetKey(KeyCode.S))
// {
// this.transform.Translate(Vector3.back * 5.0f * Time.deltaTime);
// }
// if (Input.GetKey(KeyCode.A))
// {
// this.transform.Translate(Vector3.left * 5.0f * Time.deltaTime);
// }
// if (Input.GetKey(KeyCode.D))
// {
// this.transform.Translate(Vector3.right * 5.0f * Time.deltaTime);
// }
}
}
--------------------------------------------------------------------------------------
위 코드중 " 움직임실행 " 부분입니다.
다른코드를 가져다 써도.... 이게 카메라가 문제인지.. 화면이 휙휙 돌아가고....
카메라 코드 입니다 -------------------------------------------------
public class FollowCam : MonoBehaviour {
public Transform target;
public float dist = 10.0f;
public float height = 5.0f;
public float smoothRotate = 5.0f;
private Transform tr;
// Use this for initialization
void Start () {
tr = GetComponent<Transform>();
}
// Update is called once per frame
void Update () {
float currYAngle = Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, smoothRotate * Time.deltaTime);
Quaternion rot = Quaternion.Euler(0, currYAngle, 0);
tr.position = target.position - (rot * Vector3.forward * dist) + (Vector3.up * height);
tr.LookAt(target);
}
}
----------------------------------------------------------------------------------
케릭터를 이동시 전후좌우 이동하며 케릭터가 회전을 하게 하려면 무엇을 추가 해야 할까요?
부탁드립니다
- Replies
-
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
//transform.Translate (0f, 0f, h * walkspeed * Time.deltaTime);
//Move
transform.Translate(0f, 0f, v * walkSpeed * Time.deltaTime);
//Turn
transform.Rotate(0f, h * turnSpeed * Time.deltaTime, 0f);
}
케릭이 회전하는게 아니라 화면이 회전을 합니다shjhyojung 2019.03.25 -
캐릭터 의 transform.rotation 값을 바꿔주세요
atshin 2019.03.25
-
플레이어 회전은 잘 되는거같은데요? 카메라가 회전을 안하게하려면
float currYAngle = Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, smoothRotate * Time.deltaSeconds);
Quaternion rot = Quaternion.Euler(0, currYAngle, 0);
이 코드를 지우면 되는거 아닌가요? target이 플레이어 같은데 플레이어 회전각을 따라서 카메라도 돌아버리는 코드로 보여지는데요.gominky 2019.03.25 -
엇. 감사합니다. 코드 지우고 속도 수정하니 화면 안돌아 가네요
이제... 케릭터 이동만 수정하면 될것 같습니다 !
두분 감사합니다 (__)
shjhyojung 2019.03.25
