Movimento do personagem na produção do jogo (2)
análise
Da última vez, explicamos principalmente alguns problemas e ideias encontradas no processo de desenvolvimento do jogo, principalmente sobre como usar o teclado para controlar o movimento dos personagens. É controlado principalmente por corpo rígido e transfrom.
Desta vez, falamos principalmente sobre outra forma de movimento do personagem.
Corpo Principal
Conteúdo 1
Este método é um método de consulta e resumo da Internet, e também é um tipo de controle por meio do teclado. É usado principalmente para controlar o movimento do personagem por meio do controlador de personagem. Para controle de personagem, como limitação a inclinação máxima do personagem subindo, a altura do degrau, etc., isso é equivalente ao componente Nav, que geralmente é usado para IA homem-máquina.
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
//不考虑重力作用
//characterController.Move(new Vector3(horizontal,0,vertical) * Time.deltaTime *moveSpeed);
O acima usa principalmente um controlador para realizar o movimento dos personagens. Especificamente, você pode experimentar o efeito, porque não está envolvido no projeto, portanto não está no teste.
Conteúdo 2: Método de controle de movimento do personagem – controle do mouse
Desta vez, explicamos o controle do mouse, que é usado principalmente para o controle de movimento do personagem do quarto jogo.
E quanto ao controle do mouse?
Consideramos principalmente dois aspectos. Primeiro, como determinar o ponto de clique do mouse. Segundo,
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//主要通过一个射线来实现位置的确定,而人物的走动主要是通过nav自动寻路来完成的。需要设置人物的行走,可以行走的最大坡度以及可以迈出的最大高度。
if (Physics.Raycast(ray,out hitInfo))
{
//切换鼠标贴图,根据不同的触碰类型点击出现不同的指针贴纸
switch (hitInfo.collider.gameObject.tag)
{
case "Ground":
//设置移动的指针类型
Cursor.SetCursor(target, new Vector2(16, 16), CursorMode.Auto);
break;
case "Enemy":
//设置移动的指针类型
Cursor.SetCursor(attack, new Vector2(16, 16), CursorMode.Auto);
break;
}
}
transform.LookAt(target.transform);//转向移动目标
controle do mouse
public event Action<Vector3> onMouseClicked;//获取一个event事件
public event Action<GameObject> onEnemyClicked;//点击物体的事件
//鼠标控制
void MouseControll()
{
if(Input.GetMouseButtonDown(0) && hitInfo.collider != null)//按下了鼠标左键,并且射线有碰撞焦点
{
if (hitInfo.collider.gameObject.CompareTag("Ground"))
{
onMouseClicked?.Invoke(hitInfo.point);
}
if (hitInfo.collider.gameObject.CompareTag("Enemy"))
{
onEnemyClicked?.Invoke(hitInfo.collider.gameObject);
}
}
}
Adicionar método ao mouse
MouseManager.Instance.onMouseClicked += MoveToTarget;//添加订阅的方法
MouseManager.Instance.onEnemyClicked += EventAttack;//添加攻击的方法
método moveToTarget
public void MoveToTarget(Vector3 target)//参数保存一致
{
StopAllCoroutines();//打断移向目标
agent.isStopped = false; //重新设置可以移动
agent.destination = target;//将 位置定位到这里
}
Quanto ao método de ataque, não está envolvido aqui, então não vamos falar sobre isso.
O acima é o controlador de navegação deste personagem, que inclui tipo, velocidade, velocidade angular, aceleração, desvio de obstáculos, altura e alcance dos obstáculos que podem ser cruzados, etc.
Resumir
Através deste compartilhamento, falei principalmente sobre os dois métodos restantes de controle do personagem. Embora não sejam tão usados quanto os dois anteriores, eles também são muito comuns em jogos.