unity——Survival Shooter:相机&敌人

3.相机

下来我们对相机进行调整,相机即是我们看游戏的角度。我们希望游戏角色是指哪打哪的,所以对相机的位置与角度参数进行调整。

image

十分应该注意的是,在选择Projection的时候,我们要根据需求进行调整:Perspective是透视视角,即我们说的近大远小;orthographic是正交视角,即无论远近都是一样大。在这里我们选择orthographic。

调整好以后我们需要camera时刻跟上我们的角色,这就需要伟大的程序员出现了!我们需要写一个程序来执行。

在Scripts-Camera中新建C# CameraFollow

    public Transform target;
    public float smoothing = 5f; 
    Vector3 offset;

这是变量声明,target是相机要追逐的对象,之后我们在Hierarchy里把他设置为Player。smoothing是相机移动的平滑程度,我们不希望相机是抖动式的追逐玩家,而是像一条绳子一样被拽过去的。所以这里把平滑程度smoothin定义为5。offset是每次的位移量。

void Start()
    {
        offset = transform.position - target.position;
    }

在Start方法中,我们把offset初始化,定义为现在此时此刻需要进行的位移。

void FixedUpdate()
    {
        Vector3 targetCamPos = target.position + offset;
        transform.position = Vector3.Lerp(transform.position, targetCamPos, smoothing * Time.deltaTime);
    }

我们将每次camera将要移动至的位置用一个Vector3类型的targetCamPos进行存储。两个位移点之间的移动我们使用Lerp进行移动。Lerp可以在两个Vector之间以smoothing的速度进行平滑移动。同样,我们不希望他一秒内移动50次,给他乘以DeltaTime。

and its done。

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

public class CameraFollow : MonoBehaviour
{
    public Transform target;
    public float smoothing = 5f; //相机的平滑

    Vector3 offset;

    void Start()
    {
        offset = transform.position - target.position;
    }

    void FixedUpdate()
    {
        Vector3 targetCamPos = target.position + offset;
        transform.position = Vector3.Lerp(transform.position, targetCamPos, smoothing * Time.deltaTime);
    }
	
}

最后我们要将Player拽进target里。这时注意了!之前如果没有把Player的tag设置为Player的话,依旧是找不到的。注意!

最后我们对Player的操作就差不多了,我们可以将Player存为一个预设,直接拖进Prefabs就行。

4.添加敌人

我们要开始设置一个可以干掉的对象了。

首先我们把ZomBunny这个可爱的小家伙扔进Hierarchy。在进行任何操作之前,我们希望当子弹打在它身上的时候,他最好能迸射出一点生命的火花,所以我们先在它下面增加一个粒子效果HitParticles。这个粒子效果和子对象的ZomBunny是平行的。结束了这些之后,我们将ZomBunny设置为可射击的对象,在layer中选择shootable。并改变所有子对象的赋值。

接下来,我们依次增添audio Source,RigiBody,Capsule Collider,Sphere Collider。然后接下来,我们要让这个敌人具有一定的智力,他可以神奇的越过障碍物来找到我们。这时候就需要Nav Mesh Agent。Nav Mesh Agent是一个自动寻路的组件,用途就是他可以根据我们设定的目标自动的移动避开障碍物。通常,我们要将这个agent附加在我们的角色身上,agent是一个圆柱形的结构,我们要对他设定高、直径,如果可以上楼的话还要增加Step Height。最后完成设定之后点击Bake进行烘焙操作,把这些路径烘出来。

完成这些之后,我们就要进行一些程序端的设定了。首先添加EnemyMove的脚本代码:

Transform player;
    //PlayerHealth playerHealth;
    //EnemyHealth enemyHealth;
    UnityEngine.AI.NavMeshAgent nav;

这些是变量声明,首先定义我们的玩家定义一个Transform变量,下面的playerHealth和enemyHealth是之后阶段我们要完成的,暂且不表。接下来要定义神奇的导盲犬,我们的自动寻路的nav。

 void Awake ()
    {
        player = GameObject.FindGameObjectWithTag ("Player").transform;
       // playerHealth = player.GetComponent <PlayerHealth> ();
       // enemyHealth = GetComponent <EnemyHealth> ();
        nav = GetComponent <UnityEngine.AI.NavMeshAgent> ();
    }

我们将player的值赋成有着Player tag的对象。同时将nav初始化。

 void Update ()
    {
       // if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
       // {
            nav.SetDestination (player.position);
       // }
       // else
        //{
        //    nav.enabled = false;
        //}
    }

暂且无需注意那些被注释掉的代码,我们设定nav去自动寻路到player。

到这里为止,我们再打开游戏就可以看到一个始终追着我们跑的小跟屁虫了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值