平动和转动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class instance : MonoBehaviour
{

public float moveSpeed = 10f;
public float turnSpeed = 50f;
private void Update()//update是每帧更新的函数
{
if(Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * moveSpeed*Time.deltaTime);
}
//translate是平移,vector3是一个三维数组,forward代表(0,0,1)
//deltatime是两帧之间的时间间隔
//没有使用 Time.deltaTime 的问题
//如果你只是使用 moveSpeed 来移动物体,而不使用 Time.deltaTime,
//物体每帧的移动量将是恒定的.如果帧率提高,物体移动的频率就会增加
//移动速度就会变快;如果帧率降低,物体的移动频率减小,移动速度就会变慢.
//使用 Time.deltaTime
//通过乘以 Time.deltaTime,可以保证物体每秒的移动量保持一致,不受帧率影响.
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up,turnSpeed*Time.deltaTime);
}
//rotate是旋转,vector3.up表示(0,1,0),这里是转动的轴
}
}

摄像机的平滑跟随和视角锁定

1
2
3
4
5
6
7
8
9
10
11
12
[SerializeField] Transform target;
[SerializeField] Vector3 offset;
[SerializeField] float transitionSpeed = 2;

private void LateUpdate()
{
if (target != null)
{
Vector3 targetPos = target.position + offset;
transform.position = Vector3.Lerp(transform.position, targetPos, transitionSpeed * Time.deltaTime);
}
}

1
2
3
4
5
public Transform target;
private void Update()
{
transform.LookAt(target);
}

两种对摄像头的设置
第一种是摄像机的平滑跟随,第二种是视角锁定(摄像机不动,只转动)

GetAxis

UnityInput Manager 中,Positive ButtonNegative Button 是用来处理轴输入(axis input)的.当你配置诸如 "Horizontal""Vertical" 这样代表方向或动作的输入轴时,这两个按钮起到了重要的作用.

轴输入(Axis Input)简介

Unity 中的轴输入通常用来处理类似于左右、上下移动这样的操作.输入轴是一种 模拟输入,而不是简单的二元按键(开/关).例如:

  • "Horizontal" 轴可以映射到 A/D 键或 左/右 方向键,表示横向移动.
  • "Vertical" 轴可以映射到 W/S 键或 上/下 方向键,表示纵向移动.

这些轴输入返回的值在 -1 到 1 之间,用来表示不同的方向或强度.

Positive ButtonNegative Button 的作用

  • Positive Button 是用来指定当你按下该按钮时,输入轴返回正向值(如 1).例如,”D” 键或右方向键通常用作 Positive Button,它会让角色向右移动.
  • Negative Button 是用来指定当你按下该按钮时,输入轴返回负向值(如 -1).例如,”A” 键或左方向键通常用作 Negative Button,它会让角色向左移动.

示例:Horizontal 轴配置

假设我们在 Input Manager 中配置了一个名为 "Horizontal" 的输入轴.常见的设置可能是这样的:

  • Name: Horizontal
  • Negative Button: A (或 Left Arrow)
  • Positive Button: D (或 Right Arrow)
  • Gravity: 3
  • Dead: 0.001
  • Sensitivity: 3
  • Type: Key or Mouse Button
  • Axis: X axis

工作原理

  1. 当你按下 Positive Button(比如 "D" 键),Input.GetAxis("Horizontal") 会返回一个正值,接近 1.
  2. 当你按下 Negative Button(比如 "A" 键),Input.GetAxis("Horizontal") 会返回一个负值,接近 -1.
  3. 如果没有按下任何按钮,Input.GetAxis("Horizontal") 将返回 0,表示没有水平输入.

为什么使用 Positive 和 Negative 按钮?

它们的主要作用是提供一种简便的方式来处理方向性输入.例如,移动角色时,可以根据返回的轴值决定角色的移动方向:

  • 如果 Input.GetAxis("Horizontal") 返回正值(如 1),角色向右移动.
  • 如果返回负值(如 -1),角色向左移动.

示例:检测水平轴输入并移动角色

1
2
3
4
5
void Update()
{
float move = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * move * Time.deltaTime * speed);
}
  • 如果玩家按下 “D”右方向键Positive Button),move 会变成正值,角色向右移动.
  • 如果玩家按下 “A”左方向键Negative Button),move 会变成负值,角色向左移动.

配置解释

  • Gravity: 控制按键松开后,轴值回到零的速度.数值越大,返回到 0 的速度越快.
  • Sensitivity: 控制按键按下时,轴值从 0 加速到 1(或 -1)的速度.数值越大,响应越快.
  • Dead: 一个小阈值,避免微小输入造成意外响应.小于该值的输入会被视为 0.

总结

  • Positive Button:用于正方向的输入,通常映射为右/上方向键或控制器的正向输入.
  • Negative Button:用于负方向的输入,通常映射为左/下方向键或控制器的反向输入.
  • 它们是用于控制方向性输入的核心元素,特别是在控制角色移动时.