前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity 3D 开发《王者荣耀》:英雄移动地图英雄

Unity 3D 开发《王者荣耀》:英雄移动地图英雄

作者头像
iOSDevLog
发布2018-06-21 17:17:31
1.6K0
发布2018-06-21 17:17:31
举报
文章被收录于专栏:iOSDevLogiOSDevLog

地图


map.png

导入地形资源包,拖动一个 5V5 的地图到 Unity 上面,reset 重置地图位置。

导入模型资源包,拖入草,制作成草丛,再 duplicate 3 个,放到红蓝 Buffer 的附近。

拖入敌我双方防御塔,上不同的材质。复制几份,把中路塔放满。

英雄


拖入 Ali 到地图上面,放到河道中间。

新建一个 Animator Controller。添加 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 创建英雄。

代码语言:javascript
复制
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 虚拟摇杆

如果导入报错:

代码语言:javascript
复制
Assets/EasyTouch/Plugins/Editor/HTEditorToolKit.cs(166,13): error CS0571: `UnityEngine.Object.name.set': cannot explicitly call operator or accessor

需要把

代码语言:javascript
复制
myTexture.set_name("Color Texture by Hedgehog Team");

改为:

代码语言:javascript
复制
myTexture.name = "Color Texture by Hedgehog Team";

EasyJoystick.

把 Joystick 交互类型从 Direct(直接) 改为 Event Notification(事件通知)。

  • Joystick axes properties & event

*Interaction type -> Event Notification

MoveController 添加到 Player(amumu) 上面

首先需要创建一个新动画系统,并在 start() 方法中初始化。

代码语言:javascript
复制
    private Animator ani;

    void Start()
    {
        ani = GetComponent<Animator>();
    }

在摇杆运动或者停下的时候,让 Player 运动和待定。

代码语言:javascript
复制
 void OnJoystickMoveEnd(MovingJoystick move)
    {
        if (move.joystickName == "EasyJoystick")
        {
            // GetComponent<Animation>().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<Animation>().CrossFade("run");
            ani.SetInteger("state", AnimState.ATTACK1);
        }
    }

特别要判断当前的 move.joystickName 代码中的和项目里面的名称是否相同。

这时候运行游戏,再控制摇杆,player 是可以运动的。

相机跟随

player 移动的时候,地图没有更新,player 会跑到地图外面,所以我们还要再改进一下,让相机跟随 player 移动。

有两种方法

  1. 第一种是为相机添加脚本,是我们自己编写的脚本。
  2. 第二种是添加标准资源包里面的 SmoothFollow 脚本。

Unity 2018.1.1f1 (64bit) - SampleScene.unity - ArenaOfValor - PC, Mac & Linux Standalone_ _DX11_ 2018_5_23 23_31_42.gif

创建 Camera C# 脚本 CameraFollow.cs:

代码语言:javascript
复制
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 位置移动。

简宝玉写作群日更打卡第 33 天`

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 地图
  • 英雄
    • EasyTouch 虚拟摇杆
      • EasyJoystick.
        • MoveController 添加到 Player(amumu) 上面
      • 相机跟随
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档