游戏制作之路(22)创建移动的敌人

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caimouse/article/details/82743710

在前面介绍一个角色控制的功能,角色可以走动,也可以跳起来,还可以开火打静止的敌人,不过这样还是不爽,能否创建一些可以移动的敌人呢?本文就来解决这个问题。因此,跟前面一样创建一个胶囊体,然后再创建一个立方体当作鼻子,同样设置它们的父子关系,然后设置胶囊体的位置为(-2.5, 1.5, 18),跟前面同样的方式把鼻子设置为(0, 0.5, 0.5),这样就设置好敌人。如下图:

接着在工程project下面创建一个材料,把它命名为Enemy,如下图:

创建这个材料之后,就可以把材料Enemy拖动场景里的Enemy和ENose了,这时这个敌人就使用这个材料来渲染,不像我们前面的物体,都是采用缺省白色的材料了。这样就可以区分玩家角色和敌人。

敌人创建之后,还有一个问题,敌人怎么样朝着玩家的角色进行行走,这里就涉及向量的计算问题了,我们知道当两个向量进行相减时,就可以计算出来两个向量的点方向。

比如这里a向量减去b向量,就得一个从D指向B的向量,也就是得到任意两个向量的方向关系。因此,敌人朝着玩家角色方向跟踪,就不断地采用玩家的位置向量减去敌人的位置向量,就可以计算出来方向,当敌人向这个方向进行移动,就可以看到敌人跟踪玩家了。因此,搞懂原理之后,就可以来写代码,如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyMovement : MonoBehaviour {

    public float speed = 2.0f;
    public float turnSpeed = 180.0f;

    private CharacterController controller;
    private Transform player;

    // Use this for initialization
    void Start () {
        controller = GetComponent<CharacterController>();
        player = GameObject.FindWithTag("Player").transform;
    }
	
	// Update is called once per frame
	void Update () {
        Vector3 direction = player.position - transform.position;
        direction.y = 0;

        transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(direction), turnSpeed * Time.deltaTime);

        controller.Move(transform.forward * speed * Time.deltaTime);
    }
}

这段代码是EnemyMovement,关联到敌人对象上,当然它也是创建了一个CharacterController组件,把碰撞体都要去掉,鼻子的碰撞体也要去掉。在Start函数里,首先获取本组件的角色组件到controller变量里,通过标签找到玩家角色对象,玩家的角色标签记Player得在这里设置,如下图:

这样就可以找到角色对象保存在player变量里。通过下面这行代码:

 Vector3 direction = player.position - transform.position;

就可以计算玩家所在的方向向量,然后通过Quaternion.RotateTowards转动敌人的方向,让它的鼻子朝着玩家进行移动。

到这里就可以完成敌人的跟踪功能。

单片机编译器之链接器

https://edu.csdn.net/course/detail/8437

比特币源码入门教程

https://edu.csdn.net/course/detail/6998

深入浅出Matplotlib
https://edu.csdn.net/course/detail/6859

深入浅出Numpy
http://edu.csdn.net/course/detail/6149 

Python游戏开发入门

http://edu.csdn.net/course/detail/5690

猜你喜欢

转载自blog.csdn.net/caimouse/article/details/82743710