Treinamento do projeto--Desenvolvimento de jogo multijogador Unity--Parte quatro

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.
insira a descrição da imagem aqui
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.

Acho que você gosta

Origin blog.csdn.net/qq_53259920/article/details/125113827
Recomendado
Clasificación