RPG类游戏主角移动的代码

原创 2016年09月27日 10:27:11

本来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

游戏源代码RPG 游戏

  • 2017年09月03日 13:16
  • 7.07MB
  • 下载

完整的RPG游戏源代码

  • 2008年10月04日 17:00
  • 356KB
  • 下载

一个简单的rpg游戏代码

  • 2013年07月09日 09:21
  • 67KB
  • 下载

一个RPG游戏源代码

  • 2002年09月19日 00:00
  • 703KB
  • 下载

java版RPG游戏源代码

  • 2015年11月06日 00:01
  • 18.04MB
  • 下载

cocos2d-x完整RPG游戏源代码(配套资源)

  • 2016年08月09日 14:28
  • 44.25MB
  • 下载

Unity3d中CharacterController的移动和碰撞分析

在Unity3d中系统提供的第一人称视角模型First Person Controller的移动可分为两种: 一.移动transform   这种移动方式为直接对该人物模型的tra...
  • WNNSCNS
  • WNNSCNS
  • 2015-04-03 09:18:38
  • 3670

Unity开发-玩家行走-CharacterControl,Rigibody,Transform控制行走实践

行走是rpg游戏中十分基础的功能,但是小白在处理的时候却又很容易犯错误,这一节,我将梳理一些行走代码的细节,希望遇到问题的小伙伴可以有所收获。 在unity中,控制人物移动的大体上来说,有如...
  • buctyyzyn
  • buctyyzyn
  • 2018-04-01 17:10:53
  • 21

Unity3D 利用character controller控制人物在场景中移动和利用Navmesh Agent设置人物自动寻路

考虑碰撞的情况下控制人物的行走在考虑碰撞的情况下,控制人物在场景中移动一般有两种方法,一种是利用刚体Rigidbody,然后通过施加力或者改变速度来控制人物的移动,另外一种方法就是利用unity自带的...
  • gcs6564157
  • gcs6564157
  • 2017-02-07 19:35:17
  • 3223

Unity角色控制器CharacterController的简单介绍

角色控制器(CharacterController): 首先,角色控制器没有碰撞效果,这是和刚体的区别,不像刚体可以给其力 如果想使人物移动,直接复制官方文本中的CharacterControll...
  • qq_30454411
  • qq_30454411
  • 2018-01-23 14:43:26
  • 615
收藏助手
不良信息举报
您举报文章:RPG类游戏主角移动的代码
举报原因:
原因补充:

(最多只允许输入30个字)