脚踏实地,给自己一个更好的生活

写来以后要用的时候能方便高效点

RPG类游戏主角移动的代码

本来RPG类游戏主角移动的代码没什么特别,

这里要指出的是在使用character.simpleMove(moveSpeed * transform.TransformDirection(new Vector3(0, 0, 1)))

来移动,但是当角色在斜坡上由于角色角度的变化而会出现方向改变不能直接到达目的地的问题。这个问题

我尝试了好多方法,但是由于自己判断不准确,好久都没有解决。所以找到视频的解决办法后这里记录一下。

下面是代码,红色部分为斜坡方向问题的解决方案:

using UnityEngine;
using System.Collections;

public class CharacterMove : MonoBehaviour
{

    bool mousePressing;
    CharacterController player;
    public float moveSpeed;
    public GameObject clickEffect;
    float preDistance;
    //表示是否按下鼠标
    bool pressingMouse;
    Vector3 targetPos;


    // Use this for initialization
    void Start()
    {
      
        targetPos = transform.position;
        player = GetComponent<CharacterController>();
    }

  

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            pressingMouse = true;
            ShowClickEfx();
        }



        if (Input.GetMouseButtonUp(0))
        {
            pressingMouse = false;
        }

        Move();


    }

    private void Move()
    {

        if (pressingMouse)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo))
            {
                if (hitInfo.collider.tag == GameTags.ground)
                {

                    pressingMouse = true;
                    targetPos = hitInfo.point;
                    targetPos.y = transform.position.y;
                }
            }
            transform.LookAt(targetPos);


        }
        if (Vector3.Distance(targetPos, transform.position) > 0.5)
        {
            player.SimpleMove(moveSpeed * transform.TransformDirection(new Vector3(0, 0, 1)));
            CharacterState._instance.animstate = AnimState.Run;
            CharacterAnim.Instance.PlayAnim();
            <span style="color:#ff6666;">targetPos.y = transform.position.y;
            transform.LookAt(targetPos);</span>
           
        }




        if (Vector3.Distance(targetPos, transform.position) < 0.5)
        {
            CharacterState._instance.animstate = AnimState.Idle;
            CharacterAnim.Instance.PlayAnim();
        }

    }

    private void ShowClickEfx()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hitInfo;
        if (Physics.Raycast(ray, out hitInfo))
        {
            if (hitInfo.collider.tag == GameTags.ground)
            {
                GameObject.Instantiate(clickEffect, hitInfo.point + new Vector3(0, 0.05f, 0), Quaternion.identity);

            }

        }
    }
}
    

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/W1095471150/article/details/52678309
文章标签: 斜坡移动
个人分类: 一些小细节
上一篇角色选择界面角色与鼠标的旋转交互
下一篇Unity设置鼠标指针图片
想对作者说点什么? 我来说一句

一个RPG游戏代码

2002年09月19日 703KB 下载

完整的RPG游戏代码

2008年10月04日 356KB 下载

RPG文字游戏源码

2016年05月06日 16.75MB 下载

java版RPG游戏代码

2015年11月06日 18.04MB 下载

游戏代码RPG 游戏

2017年09月03日 7.07MB 下载

没有更多推荐了,返回首页

关闭
关闭