马上注册,加入CGJOY,让你轻松玩转CGJOY。
您需要 登录 才可以下载或查看,没有帐号?立即注册
×
今天呢我跟大家一起分享一下 RPG 的制作心得因为我也是新手 所以呢发出来大家 一起 指点 和 批评 那么我看了好多 类似的教程 所以就自学了几天 今天我就开始献丑啦
首先 我们需要个场景 需要素材的话 可以加这个qq群 390835120来下载
很漂亮的场景那么我们开始吧 第一天呢 我们就来把 主角的移动控制来实现下吧 首先将模型的人物模型Rig的动画模式改成Generic 我们 用这个来新版动画状态机来
控制人物的动画
创建一个动画控制器将所用的动画都拖进去因为今天只是讲移动控制所以我们将 2个 idle run 跑 和 傻站着 是互相切换 所以我们互相连接 我们还需要一个bool 变量控制 起名就叫 move move=true 的是 切到跑 move=false 是傻站着 然后将改弄好的控制器 拖到角色上的Animator
这一步弄好了我们先放一边 因为我们需要 点击地面哪里 角色就移动到哪里 所以我们要用 到 nav mesh 用这个需要烘焙地形 选着 地面 还要 地面上的障碍物 我们来烘焙
烘焙好后给角色 加一个NavMeshAgent 组件 弄好后 终于到了 写脚本的时刻啦 思路是这样的 我们建立一根射线 点击时候 射线出来 射线 于地面碰撞的时候的 碰撞点 就是我们角色要去的位置
脚本如下
- using UnityEngine;
- using System.Collections;
- public class PlayMove : MonoBehaviour {
- private Animator anim;
- private NavMeshAgent nav;
- private LayerMask mask = -1;
- RaycastHit hit;
- void Start () {
- anim = gameObject.GetComponent<Animator>();
- nav=gameObject.GetComponent<NavMeshAgent>();
- anim.SetBool("move", false);
- mask = LayerMask.GetMask("ground");
- }
-
-
- void Update () {
- if (Input.GetMouseButtonDown(0))
- {
- move();
- }
- distance();
- }
- void move()
- {
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
-
- if (Physics.Raycast(ray, out hit,100,mask))
- {
- nav.SetDestination(hit.point);
- anim.SetBool("move", true);
- }
-
- }
- void distance()
- {
- if ((transform.position - hit.point).sqrMagnitude<0.1f)
- {
-
- anim.SetBool("move", false);
- }
- }
- }
复制代码
|