0
나는 나의 FPS 문자 이동하려면이 코드를 사용다른 앞으로, 뒤로 및 기총 소사 속도
CharacterController controller;
void Awake()
{
reference = new GameObject().transform;
}
void Update()
{
controller.Move (moveDirection * Time.deltaTime);
reference.eulerAngles = new Vector3(0, mycamera.eulerAngles.y, 0);
forward = reference.forward;
right = new Vector3(forward.z, 0, -forward.x);
float hor = Input.GetAxisRaw("Horizontal");
float ver = Input.GetAxisRaw("Vertical");
targetDirection = (hor * right) + (ver * forward);
targetDirection = targetDirection.normalized;
targetVelocity = targetDirection;
if (inputDetected)
{
targetVelocity *= speed;
moveDirection.z = targetVelocity.z;
moveDirection.x = targetVelocity.x;
}
}
이 잘 작동을하지만, 내 캐릭터가 다른 뒤로 기대하고 기총 소사 속도를 갖고 싶어. 나는 targetVelocity.x *= speed1;
과 targetVelocity.z *= speed2;
을 시도했지만 작동하지 않았다. 마우스를 움직이면 앞쪽 키를 누를 때 캐릭터는 더 이상 앞으로 나아 가지 않습니다.
감사합니다 그래서. 'targetDirection = targetDirection.normalized;도 제거해야 작동합니다. 왜 이것이 최선의 해결책이 아니라고 말합니까? 단점은 무엇입니까? – binoculars
@binoculars 혼란을 가져 주어서 유감스럽게도, 필자는 필연적으로 기본 버전이 아니라는 것을 의미하지는 않았다. 더 최적의 솔루션을 위해 나는 (테스트되지 않은) 방향으로 생각하고있다. \t \t var forwardMultiplier = 1f; \t var sideMultiplier = .8f; \t var backwardMultiplier = .3f; \t var inputVector = transform.rotation * new Vector3 (hor, 0, ver); \t var forward = transform.forward; \t var dotResult = Vector3.Dot (inputVector.normalized, forward); \t var speedMultiplier = (dotResult> = 0)? Mathf.Lerp (sideMultiplier, forwardMultiplier, dotResult) : Mathf.Lerp (backwardMultiplier, sideMultiplier, dotResult); – bramve