2017-10-22 1 views
0

우선 : 나쁜 영어로 죄송합니다. 네덜란드어입니다.플레이어 개체가 회전하는 동안 위치가 변경됩니다.

나는 위아래 키를 사용하여 앞뒤로 이동할 수있는 플레이어 개체를 만들고 오른쪽 및 왼쪽 키로 플레이어를 회전하려고합니다. 그러나 왼쪽 또는 오른쪽 키를 누르면 플레이어의 위치가 바뀌고 특정 지점을 중심으로 회전하는 것처럼 보입니다. 그러나 나는 돌아 서서 할 때처럼 내가 돌아가고 같은 장소에 있어야합니다.

동일한 '이동 스크립트'와 동일한 입력 관리자 설정을 사용하는 다른 작은 프로그램이 있습니다. 저기, 잘 작동하므로 왜 이번엔 작동하지 않습니다 모르겠어요.

이 내 움직임 스크립트이지만,이 스크립트는 다른 프로그램과 잘 작동 : (또한 잘 작동 경우 다른 프로그램과 같은)

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class MoveScript : MonoBehaviour 
{ 

    public float speed = 3f; 
    public float rotate = 50f; 
    private Rigidbody rb; 
    // Update is called once per frame 

    private void Start() 
    { 
     rb = GetComponent<Rigidbody>(); 
    } 
    void Update() 
    { 
     if (Input.GetButton("Up")) 
      transform.Translate(Vector3.forward * speed * Time.deltaTime); 
     if (Input.GetButton("Down")) 
      transform.Translate(-Vector3.forward * speed * Time.deltaTime); 
     if (Input.GetButton("Right")) 
      transform.Rotate(Vector3.up, rotate * Time.deltaTime); 
     if (Input.GetButton("Left")) 
      transform.Rotate(-Vector3.up, rotate * Time.deltaTime); 
     if (gameObject.GetComponent<Rigidbody>().velocity.y < 0.01) 
     { 
      if (Input.GetButtonDown("Jump")) 
       rb.AddForce(0, 225, 0); 
     } 

    } 

} 

InputManager 설정 :

enter image description here

enter image description here

누군가 내 프로그램의 다른 스크린 샷을 원할 경우 언제든지 물론. 스크립트 또는 입력 관리자에없는 경우 문제가 무엇인지 알 수 없습니다.

+0

당신은 * 플레이어 오브젝트의 중심점을 기준으로 * 당신의 회전을 수행하는 또는 예를 들어 그의 (0,0,0) 로컬 좌표를 중심으로 플레이어를 회전시키고 있습니까? 플레이어 모델은 어떻게 정의됩니까? – hacksalot

+0

이제는 지구가 태양을 돌아 다니는 것처럼 특정 지점을 돌고 있지만 지구가 자신의 축을 중심으로 회전하는 것처럼 자신의 축을 중심으로 돌아야합니다. 플레이어 오브젝트는 구/원통/캡슐의 조합 (상위)이며, 상위 플레이어 오브젝트는 강체와 '스크립트 이동'을가집니다. – lakeviking

+0

Transform.Rotate는 기본적으로 로컬 공간에서 회전을 수행합니다. 다른 모든 것들은 동일합니다. 객체의 로컬 (0,0,0)을 중심으로 회전을 수행합니다. 그 점이 플레이어 모델의 지오메트리의 중심이 아니라면, 당신은 당신이 목격하고있는 행동을 볼 수 있습니다. 그렇다면 회전하기 전에 번역을 시도하거나 로컬 좌표를 조정하여 시도 할 필요가 없습니다. 달리 말하자면, 동일한 Y 축을 중심으로 XZ 평면에서 평면 분기를 회전한다고 가정 해 봅시다. 중심점 또는 왼쪽 아래 구석의 (0,0)으로 회전하고 있습니까? – hacksalot

답변

0

영업의 의견에 따라,이 솔루션을 사용하는 것 :

xRotation가와 회전 키 중 하나가 다운 상태 때 초당 회전 할 양의 float입니다
if (Input.GetButton("Right")) 
    transform.localEulerAngles = transform.localEulerAngles + new Vector3(xRotation, 0, 0) * Time.deltaTime; 
if (Input.GetButton("Left")) 
    transform.localEulerAngles = transform.localEulerAngles - new Vector3(xRotation, 0, 0) * Time.deltaTime; 

.

(PS :., 지금은 너무 +를 열고 통일을하지 말고 -가 반전 될 수도 있지만 그런 일이어야한다)

관련 문제