王者荣耀资源
资源来自网络
链接: https://pan.baidu.com/s/1iNo7MXO1bfNi1rvp6Mc4WQ 密码: h1q6
地图
导入地形资源包,拖动一个 5V5 的地图到 Unity 上面,reset 重置地图位置。
导入模型资源包,拖入草,制作成草丛,再 duplicate 3 个,放到红蓝 Buffer 的附近。
拖入敌我双方防御塔,上不同的材质。复制几份,把中路塔放满。
英雄
拖入 Ali 到地图上面,放到河道中间。
Animator Controller
https://unity3d.com/cn/learn/tutorials/topics/animation/animator-controller
在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能:
- 可以对多个动画进行整合;
- 使用状态机来实现动画的播放和切换;
- 可以实现动画融合和分层播放;
- 可以通过脚本来对动画播放进行深度控制;
Animator组件
我们需要播放动画的角色都需要添加Animator组件,该组件即为我们控制动画的接口。
- Controller:使用的Animator Controller文件。
- Avatar:使用的骨骼文件。
- Apply Root Motion:绑定该组件的GameObject的位置是否可以由动画进行改变(如果存在改变位移的动画)。
- Update Mode:更新模式:Normal表示使用Update进行更新,Animate Physics表示使用FixUpdate进行更新(一般用在和物体有交互的情况下),Unscale Time表示无视timeScale进行更新(一般用在UI动画中)。
- Culling Mode:剔除模式:Always Animate表示即使摄像机看不见也要进行动画播放的更新,Cull Update Transform表示摄像机看不见时停止动画播放但是位置会继续更新,Cull Completely表示摄像机看不见时停止动画的所有更新。
新建一个 Animator Controller
。
发现的有3个默认的状态,这些状态是Unity自动帮我们创建的同时也无法删除:
- Entry:表示当进入当前状态机时的入口,该状态连接的状态会成为进入状态机后的第一个状态;
- Any State:表示任意的状态,其作用是其指向的状态是在任意时刻都可以切换过去的状态;
- Exit:表示退出当前的状态机,如果有任意状态指向该出口,表示可以从指定状态退出当前的状态机;
从资源包里面添加 5 种状态,不知道怎么回事,run 这个状态无法添加,我暂时添加了 idle5, attack1, attack2, apell1, dancel 这 5 种状态。
新建一个 Int
形变量 state
初始值为 0,表示 idle 状态,idle5, attack1, attack2, apell1, dancel 依次为 0-4 这几种状态。
5 种状态之间相互 Make Transition,添加状态变化的条件。
更新: amumu 可以 run,于是我就按 amumu 创建英雄。
public class AnimState : MonoBehaviour
{
public const int IDLE = 0;
public const int RUN = 1;
public const int ATTACK1 = 2;
public const int ATTACK2 = 3;
public const int DANCE = 4;
}
EasyTouch 虚拟摇杆
如果导入报错:
Assets/EasyTouch/Plugins/Editor/HTEditorToolKit.cs(166,13): error CS0571: `UnityEngine.Object.name.set': cannot explicitly call operator or accessor
需要把
myTexture.set_name("Color Texture by Hedgehog Team");
改为:
myTexture.name = "Color Texture by Hedgehog Team";
添加两个 empty object,把EasyTouch 和 EasyJoystick 分别拖上去。
EasyJoystick.
把 Joystick 交互类型从 Direct(直接) 改为 Event Notification(事件通知)。
Joystick axes properties & event
Interaction type -> Event Notification
MoveController
添加到 Player(amumu) 上面
首先需要创建一个新动画系统,并在 start() 方法中初始化。
private Animator ani;
void Start()
{
ani = GetComponent();
}
在摇杆运动或者停下的时候,让 Player
运动和待定。
void OnJoystickMoveEnd(MovingJoystick move)
{
if (move.joystickName == "EasyJoystick")
{
// GetComponent().CrossFade("idle");
ani.SetInteger("state", AnimState.IDLE);
}
}
void OnJoystickMove(MovingJoystick move)
{
Debug.LogError("-------------" + move.joystickName);
if (move.joystickName != "EasyJoystick")
{
return;
}
Debug.LogError("、、、、、、、、、、、、、、、、、-");
float joyPositionX = move.joystickAxis.x;
float joyPositionY = move.joystickAxis.y;
if (joyPositionY != 0 || joyPositionX != 0)
{
//设置角色的朝向(朝向当前坐标+摇杆偏移量)
transform.LookAt(new Vector3(transform.position.x + joyPositionX, transform.position.y, transform.position.z + joyPositionY));
//移动玩家的位置(按朝向位置移动)
transform.Translate(Vector3.forward * Time.deltaTime * 5);
//播放奔跑动画
// GetComponent().CrossFade("run");
ani.SetInteger("state", AnimState.RUN);
}
}
特别要判断当前的
move.joystickName
代码中的和项目里面的名称是否相同。
这时候运行游戏,再控制摇杆,player 是可以运动的。
相机跟随
player 移动的时候,地图没有更新,player 会跑到地图外面,所以我们还要再改进一下,让相机跟随 player 移动。
有两种方法
- 第一种是为相机添加脚本,是我们自己编写的脚本。
- 第二种是添加标准资源包里面的
SmoothFollow
脚本。
创建 Camera C# 脚本 CameraFollow.cs
:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollow : MonoBehaviour {
[SerializeField]
private Transform player;
private float cameraX;
private float cameraZ;
public float y = 10;
public float z = 5;
void Update()
{
if (player)
{
cameraX = player.position.x;
cameraZ = player.position.z;
this.transform.position = new Vector3(cameraX, y, cameraZ + z);
}
}
}
相机的高度 y 保持不变,x 和 z 跟随 player 位置移动。
最好的方法还是使用系统带的 SmoothFollow
脚本。
windows电脑上传到 GitHub,报 403 错误,有时候 GitHub 也访问不了,先用 macOS 上传吧。
在 macOS 上面也可以运行,自动提示把目标从 Windows 切换到 Mac。
明天操纵英雄攻击。
源码:https://github.com/iOSDevLog/ArenaOfValor
简宝玉写作群日更打卡第 33 天