所以我正照常移动相机
public static CameraController Instance{ set; get; }
public Transform lookAt;
public Transform camTransform;
private Camera cam;
public const float Y_ANGLE_MIN = 0.0f;
public const float Y_ANGLE_MAX = 50.0f;
public float distance = 10.0f;
public float currentX = 0.0f;
public float currentY = 0.0f;
public float sensitivityX = 7.0f;
public float sensitivityY = 7.0f;
private void Start(){
Instance = this;
camTransform = transform;
cam = Camera.main;
}
private void Update(){
currentX += InputManager.SecondaryHorizontal ();
currentY += InputManager.SecondaryVertical ();
currentY = Mathf.Clamp (currentY, Y_ANGLE_MIN, Y_ANGLE_MAX);
}
private void LateUpdate(){
Vector3 dir = new Vector3 (0, 0, -distance);
Quaternion rotation = Quaternion.Euler(currentY,currentX,0);
camTransform.position = lookAt.position + rotation * dir;
camTransform.LookAt (lookAt.position);
this.transform.position += Vector3.up;
}
随着相机旋转,我正在旋转播放器
private void Update(){
this.transform.eulerAngles = CameraController.Instance.camTransform.eulerAngles;
}
我希望当我的播放器向左旋转时,按下MainVertical()
(附加到WASD控件和操纵杆X,Y轴)
public static float MainVertical(){
float r = 0.0f;
r += Input.GetAxis ("J_MainVertical");
r += Input.GetAxis ("K_MainVertical");
return Mathf.Clamp (r, -1.0f, 1.0f);
}
将旋转,使玩家朝着forward
方向前进
但是角色继续沿原本的forward
方向前进。
我只能假设问题是,尽管对象的前向轴已更改,但世界空间中的x,y,z并未更改,而这就是MainVertical()
仍在访问的对象
这是我角色移动的代码
private CharacterController controller;
private Animator anim;
//Speed settings
private float walkingSpeed = 5.0f;
private float runningSpeed = 7.5f;
//Jump and gravity settings
private float verticalVelocity;
private float gravity = 14.0f;
private float jumpForce = 10.0f;
private void Start(){
controller = GetComponent<CharacterController> ();
anim = GetComponent<Animator> ();
}
private void Update(){
this.transform.eulerAngles = CameraController.Instance.camTransform.eulerAngles;
Jump ();
Vector3 moveVector = InputManager.MainJoystick ();
moveVector.x = moveVector.x * walkingSpeed;
moveVector.y = verticalVelocity;
moveVector.z = moveVector.z * walkingSpeed;
controller.Move (moveVector * Time.deltaTime);
Vector3 camForward = Vector3.Scale (CameraController.Instance.camTransform.forward, new Vector3 (1, 0, 1)).normalized;
if (moveVector.x != 0 || moveVector.z != 0) {
anim.SetBool ("IsIdle", false);
anim.SetBool ("IsWalking", true);
} else {
anim.SetBool ("IsIdle", true);
anim.SetBool ("IsWalking", false);
}
}
protected void Jump(){
if (controller.isGrounded) {
verticalVelocity = -gravity * Time.deltaTime;
if (InputManager.AButton()) {
anim.SetTrigger ("Jump");
verticalVelocity = jumpForce;
}
} else {
verticalVelocity -= gravity * Time.deltaTime;
//anim.SetTrigger ("Landing");
}
}
}
这是我的输入管理器
// -- Axis
public static float MainHorizontal(){
float r = 0.0f;
r += Input.GetAxis ("J_MainHorizontal");
r += Input.GetAxis ("K_MainHorizontal");
return Mathf.Clamp (r, -1.0f, 1.0f);
}
public static float MainVertical(){
float r = 0.0f;
r += Input.GetAxis ("J_MainVertical");
r += Input.GetAxis ("K_MainVertical");
return Mathf.Clamp (r, -1.0f, 1.0f);
}
public static Vector3 MainJoystick(){
return new Vector3 (MainHorizontal (), 0, MainVertical ());
}
public static float SecondaryHorizontal(){
float r = 0.0f;
r += Input.GetAxis ("J_SecondaryHorizontal");
r += Input.GetAxis ("Mouse X");
return Mathf.Clamp (r, -1.0f, 1.0f);
}
public static float SecondaryVertical(){
float r = 0.0f;
r += Input.GetAxis ("J_SecondaryVertical");
r += Input.GetAxis ("Mouse Y");
return Mathf.Clamp (r, -1.0f, 1.0f);
}
public static Vector3 SecondaryJoystick(){
return new Vector3 (SecondaryHorizontal (), SecondaryVertical (), 0);
}
// -- Buttons
public static bool AButton(){
return Input.GetButtonDown ("A_Button");
}
public static bool BButton(){
return Input.GetButtonDown ("B_Button");
}
public static bool XButton(){
return Input.GetButtonDown ("X_Button");
}
public static bool YButton(){
return Input.GetButtonDown ("Y_Button");
}
答案 0 :(得分:2)
这是正确的:
我只能认为问题是尽管前轴具有 改变了对象在世界空间中的x,y,z不变,并且 多数民众赞成在MainVertical()仍在访问
您使玩家和this.transform
的{{1}}感到困惑-它们是2个完全不同的东西,彼此无关。想象一下FIFA,您有11名足球运动员,每个足球运动员都有自己的Input.GetAxis
,但您仍然只有一名this.transform
尝试一下:
Input.GetAxis
通常,尝试将您的球员代码与输入代码分开-想象一下如何用1个控制器控制11个足球运动员
编辑: https://docs.unity3d.com/ScriptReference/CharacterController.Move.html
中使用的代码