1,前言
敌方坦克的脚本参考自–这位博主
2,步骤
2.1,新建Cube
新建一个Cube,并命名为EnemyTank
然后给EnemyTank添加Box Collider和刚体属性
注意:这里的Tag和Mass暂时不用理会
2.2,添加模型
然后将本地的敌方坦克的模型添加给EnemyTank,并调整一下模型和Cube的位置。
我这里的坦克模型是从Asset Store下载的
2.3,挂载脚本
然后将脚本挂载到EnemyTank上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyTankController : MonoBehaviour
{
/**
* Debug.DrawLine:在场景视图中绘制一条线段,从字面上理解这个应该是只有调试环境的时候才会生效,真正游戏里边是看不到的。
* GameObject.FindGameObjectWithTag:获取带有指定标记的游戏对象。
* Quaternion.LookRotation:求两点间旋转的四元数。
* Quaternion.Slerp:在两个旋转四元数中做差值,用来做旋转的过渡效果。
* Time.deltaTime:获取上一帧到当前所经过的时间,单位毫秒
*/
///
/// 移动速度
///
public float MoveSpeed = 4;
///
/// 旋转速度
///
public float RotateSpeed = 3;
//玩家控制的坦克
private Transform m_TargetTransform;
//敌人坦克
private Transform m_SelfTransform;
void Awake()
{
var player = GameObject.FindGameObjectWithTag("Player");
m_TargetTransform = player.transform;
//这里的transform是坦克的初始的位置
m_SelfTransform = transform;
// print("transform is : "+transform);
}
void Update()
{
//调试场景中画一条线,从敌人坦克开始,到玩家坦克技术,红色
Debug.DrawLine(m_SelfTransform.position, m_TargetTransform.position, Color.red);
//求得两物体之间旋转的角度 两点间旋转的四元数
var lookRotation = Quaternion.LookRotation(m_TargetTransform.position - m_SelfTransform.position);
//地方坦克旋转的角度
m_SelfTransform.rotation = Quaternion.Slerp(m_SelfTransform.rotation, lookRotation, RotateSpeed * Time.deltaTime);
//当距离小于50的时候,敌方坦克不再靠近
if (Vector3.Distance(transform.position, m_TargetTransform.position) >= 50f)
{
//改变敌方坦克位置,从而使敌方坦克移动
m_SelfTransform.position += m_SelfTransform.forward * MoveSpeed * Time.deltaTime;
}
}
}
注意:这个脚本有时候会让坦克无脑"怼墙",意思是坦克会沿着玩家的方向笔直前进,如果前进路线上有障碍物,就会怼墙。
2.4,细节调整
接下来就是细节的调整,依旧是调整一下EnemyTank的Box Collider的形状大小,使之刚好包裹坦克模型
调整完之后,在Asset下新建一个目录叫做Prefabs,专门用来存储Prefab(预制体),然后将我们暂时做好的只会移动的敌方坦克(EnemyTank)拖到Prefabs目录中就会自动变成一个预制体了,方便我们后续的开发。
未完待续…