transform.eulerAngles += dir * rotSpeed * Time.deltaTime;
이렇게 쓰면 eulerAngle 한테 모든걸 맡기는 거임
그러면 아까같은 우리가 원치도 않는 각도 제어가 나오게 된다.
그러니까, EulerAngle 을 직접 우리가 관리 해보자
각도를 관리하기 위해 생성
직접 설정해주기 위해 만든 부분
우리가 직접만들어버리면 360 더하든 뭐하든 상관 없어짐!!
근데 너무 빙글빙글 도니까 , 각도를 조절 해보자!
각도 조절을 위해 Mathf.Clamp 를 사용한 모습
근데 내가 처음에 이렇게 아래를 보게 시작하고싶은데, 플레이하면 그냥 다 바뀌어버림
아까 설정한 값들
이 값들의 초기값이 0 이기 때문에 카메라.rotation 이 (0,0,0) 으로 바뀐다.
이렇게 보고싶은데 시작하면 초기값이라서 0,0 이라 초기화됨!
그러면 mx, my 에 처음 설정해준 값이 들어가있으면 보는 화면상태로 실행 될 것이다!
시작값을 넣어 준 모습
참고
여기서 CamRotate 를 (Object)Cube 에 붙여보면,움직일거임 =>
캐릭터를 만들때, 손으로 캐릭터를 옆으로 돌리면 돌아가는 그 느낌으로 만들 수 있음,
아디다스 매장에서 키오스크같은곳에서 신발 디자인 되어있으면 손으로 돌려보면서 확인하는 것 처럼
큐브의 모서리를 기준으로 회전하는법
큐브를 회전시키면 큐브의 중심이 큐브 안에 있기 때문에 모서리를 기준으로 회전할 수 없다
하지만, 신기한 방법 하나가 있다
현재는 큐브의 중심이 큐브 안에 있는것을 확인 할 수 있다
빈 GameObject 를 만들어서 큐브의 부모로 놓고
pivot 선택해서 부모 위치를 모서리로 옮겨줄려고 하는 모습
pivot 을 선택해서 부모 GameObject 를 모서리로 옮겨주면 됨!
RigidBody
RigidBody 를 사용하면 플레이어가 Cube 에
유니티에서 제공하는 물리로는 제대로된 물리를 표현할 수 없음
멋진효과나 이런것들은, RigidBody 를 이용하면 수정을 할 수가 없음
그래서 Character Controller 를 자주 사용함!
PlayerMove.cs 생성
2D Shooting 에서 한 것처럼 키보드로 움직일 수 있는 Player Script 를 생성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
// 사용자의 입력에 따라 앞뒤좌우 이동하고 싶다.
//필요속성 : 이동속도
//필요속성 ; 이동속도
public float speed = 5;
CharacterController cc;
// Start is called before the first frame update
void Start()
{
cc = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
// 사용자의 입력에 따라 앞뒤좌우 이동하고 싶다.
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 dir = new Vector3(h, 0, v);
// P = P0 +vt
cc.Move(dir * speed * Time.deltaTime);
}
}
CharacterController의 메서드 "Move"
여기서 cc.Move 에 있는 Move 는 Character Controller 에 있는 메소드 Move 를 사용 한 것이다.