c# - 如何更改第三人称控制器动作
问题描述
我正在使用 Unity Standard 资产中的第三人称控制器运动。我想改变运动的方向,比如当我按“W”或“向上箭头键”时它正在向右移动,当我按“D”或“向右箭头键”时它正在向后移动,当我按“S”或“向下箭头键”它向左移动,当我按“A”或“向左箭头键”时它正在向前移动。
运动脚本:
using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
namespace UnityStandardAssets.Characters.ThirdPerson
{
[RequireComponent(typeof (ThirdPersonCharacter))]
public class ThirdPersonUserControl : MonoBehaviour
{
private ThirdPersonCharacter m_Character; // A reference to the ThirdPersonCharacter on the object
private Transform m_Cam; // A reference to the main camera in the scenes transform
private Vector3 m_CamForward; // The current forward direction of the camera
private Vector3 m_Move;
private bool m_Jump; // the world-relative desired move direction, calculated from the camForward and user input.
private void Start()
{
// get the transform of the main camera
if (Camera.main != null)
{
m_Cam = Camera.main.transform;
}
else
{
Debug.LogWarning(
"Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls.", gameObject);
// we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them!
}
// get the third person character ( this should never be null due to require component )
m_Character = GetComponent<ThirdPersonCharacter>();
}
private void Update()
{
if (!m_Jump)
{
m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
}
}
// Fixed update is called in sync with physics
private void FixedUpdate()
{
// read inputs
float h = CrossPlatformInputManager.GetAxis("Horizontal");
float v = CrossPlatformInputManager.GetAxis("Vertical");
bool crouch = Input.GetKey(KeyCode.C);
// calculate move direction to pass to character
if (m_Cam != null)
{
// calculate camera relative direction to move:
m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
m_Move = v*m_CamForward + h*m_Cam.right;
}
else
{
// we use world-relative directions in the case of no main camera
m_Move = v*Vector3.forward + h*Vector3.right;
}
#if !MOBILE_INPUT
// walk speed multiplier
if (Input.GetKey(KeyCode.LeftShift)) m_Move *= 0.5f;
#endif
// pass all parameters to the character control script
m_Character.Move(m_Move, crouch, m_Jump);
m_Jump = false;
}
}
}
谁能告诉我如何改变这些方向
解决方案
找到这部分代码:
float h = CrossPlatformInputManager.GetAxis("Horizontal");
float v = CrossPlatformInputManager.GetAxis("Vertical");
并交换它们:
float v = CrossPlatformInputManager.GetAxis("Horizontal") * -1;
float h = CrossPlatformInputManager.GetAxis("Vertical") * -1;
更新:为了纠正相反的运动方向,我添加了 -1
推荐阅读
- android - dagger2 不提供基础活动注入
- c++ - pow(x,3.0f) 与 x*x*x 的性能?
- java - java.lang.String 无法在 java 中转换为 JSONObject
- amazon-web-services - 使用带有主题 ARN 和电子邮件地址的 AWS Lambda fn 取消订阅 Amazon SNS 主题
- unity3d - AR相机与平面上目标物体的角度信息(度)
- swiftui - 如何在 SwiftUI 中使两个 Text() 视图具有相同的动态字体大小,从而最大化字体大小?
- spring - Spring AspectJ 加载时间编织不适用于 5.3.3 和 Tomcat 9.0.37
- react-native - 如何禁用嵌套在抽屉导航器内的堆栈导航器内的抽屉?
- javascript - 通过 html 在 MySQL 数据库中添加时间
- python - 使用 Selenium Python 自动升级路由器固件