Unity3D 冲锋效果.角色拖尾效果

《魔兽世界》,本人最喜欢的网络游戏,如果你玩过战士,你一定对战士的冲锋非常熟悉,现在接触 Unity3D,因为最近用到了刀光、拖尾特效,所以就想做一个类似战士的冲锋效果,在本场景用到的拖尾效果可以查看我的另一篇文章,里面有详细的介绍,刀光效果来自 Unity3D Assets 商店,只是把原作者的例子代码整理了一下,变得非常简单实用的类。

最终效果如下:

先来搭建我们的场景,如图:

然后给角色的模型添加一个空对象,并且加上 MeshRender,并且设置好材质为 WeaponTrail,另外给这个空对象添加 WeaponTrail.cs 对象,设置好相关属性,如图:

下面的代码是修改另一篇文章的 TrailsBladeMaster.cs 类,新的代码如下:

复制代码

代码如下:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[AddComponentMenu("PocketRPG/Blade Master")]
public class TrailsBladeMaster : MonoBehaviour
{
/// <summary>
/// 拖尾效果
/// </summary>
public WeaponTrail weaponSwipe;
public AnimationClip idleClip;
public AnimationClip runClip;
/// <summary>
/// 移动速度
/// </summary>
public float speed = 20.0f;
public Camera mainCamera;
private Animation animation;
protected TrailsAnimationController animationController;
protected CharacterController characterController;
/// <summary>
/// 运行状态
/// </summary>
private bool isMoving = false;
/// <summary>
/// 目标位置
/// </summary>
private Vector3 targetPosition;
/// <summary>
/// 移动向量
/// </summary>
private Vector3 moveDirection;
protected void Awake ()
{
this.animation = this.GetComponent<Animation> ();
this.animationController = this.GetComponent<TrailsAnimationController> ();
this.characterController = this.GetComponent<CharacterController> ();
this.animation.CrossFade (this.idleClip.name);
}
protected void Start ()
{
if (this.weaponSwipe != null) this.animationController.AddTrail (this.weaponSwipe);
}
protected void Update ()
{
if (!this.isMoving && Input.GetMouseButtonDown(0))
{
this.targetPosition = this.GetWorldPosition();
if(this.targetPosition != Vector3.zero)
{
this.isMoving = true;
this.moveDirection = (this.targetPosition - this.transform.position).normalized * this.speed;
this.transform.rotation = Quaternion.LookRotation(new Vector3(this.moveDirection.x, 0f, this.moveDirection.z));
this.animation.CrossFade(this.runClip.name);
if(this.weaponSwipe != null) this.weaponSwipe.StartTrail(1f, 0f);
}
}
if (this.isMoving)
{
if(!this.IsArrivePosition())
{
this.characterController.Move(this.moveDirection * Time.deltaTime);
}
else
{
this.animation.CrossFade(this.idleClip.name);
if(this.weaponSwipe != null) this.weaponSwipe.ClearTrail();
this.transform.position = this.targetPosition;
this.isMoving = false;
}
}
}
/// <summary>
/// 验证是否到达目标地点
/// </summary>
/// <returns><c>true</c> if this instance is arrive position; otherwise, <c>false</c>.</returns>
private bool IsArrivePosition()
{
Vector3 currentDirection = (this.targetPosition - this.transform.position).normalized;
if (this.CalculateNormalized (currentDirection) == this.CalculateNormalized (this.moveDirection) * -1)
{
return true;
}
return false;
}
/// <summary>
/// 规范化比较向量
/// </summary>
/// <returns>The normalized.</returns>
/// <param name="direction">Direction.</param>
private Vector3 CalculateNormalized(Vector3 direction)
{
Vector3 value = Vector3.zero;
value.x = direction.x > 0 ? 1 : -1;
value.z = direction.z > 0 ? 1 : -1;
return value;
}
/// <summary>
/// 获取世界位置
/// </summary>
/// <returns>The world position.</returns>
private Vector3 GetWorldPosition()
{
Ray ray = this.mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit raycastHit;
if(Physics.Raycast(ray, out raycastHit))
{
if(raycastHit.collider.gameObject.name == "Terrain")
{
return raycastHit.point;
}
}
return Vector3.zero;
}
}

最后给角色对象挂载 TrailsAnimationController.cs 组件以及 TrailsBladeMaster.cs 组件,同时还需要添加一个角色控制器(CharacterController),因为我们用这个来驱动角色移动,如图:

最后运行可以查看效果,点击地形,角色向目标点移动,并带有拖尾效果。

百度网盘下载地下:http://pan.baidu.com/s/1hqeiREO 密码: t41j

(0)

相关推荐

  • premiere视频怎么添加缩放拖尾效果?

    premiere中想要制作一个缩放拖尾的效果,该怎么制作这个效果呢?下面我们就来看看详细的教程. 1.新建项目,导入素 2.选择缩放拖尾效果. 3.将效果添加在图片头. 4.将效果添加在图片间. 5. ...

  • 取消Windows7鼠标拖尾效果

    当少数用户装好Windows7系统后晃动鼠标会有拖尾现象,刚开始以为是鼠标有问题,于是换了个鼠标试试,结果换上去还是拖尾现象,这下看来不是鼠标的问题了. 步骤/方法 01 点击"开始&quo ...

  • 如何解决电脑的鼠标指针的拖尾阴影问题

    我们在使用电脑鼠标的时候,发现鼠标出现了拖尾效果,对我们的使用体验有较大影响,今天就跟大家介绍一下电脑的鼠标指针的拖尾阴影问题的具体解决方法.1. 我们打开电脑后,在桌面左下角点击开始图标,接着点击控 ...

  • PS制作拖尾文字效果

    很多物体运动上的时候就会产生拖尾的效果,自然文字也会产生拖尾的效果,那么我们来看看在PS中怎么制作文字拖尾的效果吧! 操作方法 01 首先,新建一个图层,并双击将其改成可编辑的图层. 02 然后,选择 ...

  • PicsArt怎么给照片添加运动拖影效果?

    PicsArt运动拖影效果如何制作.相信大家发朋友圈照片是都需要先用一些应用处理一些照片吧,今天小编就给大家带来了一个可以炫爆朋友圈的新技能,就是利用PicsArt制作出运动拖影效果的照片,那么具体要 ...

  • jquery-ui怎样实现拖拽效果

    拖拽效果在网页中还算比较常见,今天我就来分享一下jquery-ui怎样实现拖拽效果. 操作方法 01 第一步,在HTML中界面引入jquery和jquery-ui,注意jquery一定要jquery- ...

  • 新手如何拍好延时夜景车灯拖尾?

    延时拖尾拍摄对于小白来说是很难把握的一项技能,下面就给大家带来夜景车灯拖尾的傻瓜教程. 操作方法 01 准备你的相机,最好是单反,将下图的旋钮调整到Tv(快门优先), 这个选项可以让你只控制快门,其他 ...

  • AE文字特效制作方法:[1]文字拖尾舞动

    这是一种文字由远及近的拖尾运动效果. 操作方法 01 打开AE,输入文字如下. 02 点开文字图层的小三角形,选择Animate→Position 03 然后找到Add →Rotation 04 打开 ...

  • AU如何设置效果预设?audition效果预设怎么设置

    在audition中,有软件内置的效果预设,我们也可以自己去设置效果预设的. 操作方法 01 新建多轨道会话,把音频拖到音频轨道中 02 选中音频,我们再打开效果组的剪辑效果面板 03 在右侧的小三角 ...