PlayerMove脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public enum State
{Idle,Walk
}public class PlayerMove : MonoBehaviour
{public float speed = 1;private PlayerDir dir;private CharacterController controller;public State playerState;public bool isMoving = false;// Start is called before the first frame updatevoid Start(){dir = this.transform.GetComponent<PlayerDir>();controller = this.GetComponent<CharacterController>();playerState = State.Idle;}// Update is called once per framevoid Update(){float distance = Vector3.Distance(dir.TargetPosition, transform.position);if (distance > 0.3f){isMoving = true;controller.SimpleMove(transform.forward * speed);playerState = State.Walk;}else{isMoving = false;playerState = State.Idle;}}
}

PlayerDir玩家朝向问题

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerDir : MonoBehaviour
{public GameObject effect_Click;// Start is called before the first frame updateprivate bool isMoving = false;//表示鼠标是否按下private Vector3 targetPosition = Vector3.zero;private PlayerMove playerMove;public Vector3 TargetPosition{get{return targetPosition;}}private Vector3 targetMousePositon;void Start(){targetPosition = transform.position;playerMove = this.GetComponent<PlayerMove>();Debug.Log(UICamera.mainCamera.name);}// Update is called once per framevoid Update(){if(Input.GetMouseButtonDown(0)&&!UICamera.isOverUI){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitInfo;bool isCollider = Physics.Raycast(ray, out hitInfo);if(isCollider&&hitInfo.collider.tag==Tags.Ground){isMoving = true;LookAtTarget(hitInfo.point);ShowClickEffect(hitInfo.point);}}if(Input.GetMouseButtonUp(0)){isMoving = false;}if(isMoving){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitInfo;bool isCollider = Physics.Raycast(ray, out hitInfo);if (isCollider && hitInfo.collider.tag == Tags.Ground){LookAtTarget(hitInfo.point);}}else{if(playerMove.isMoving){LookAtTarget(targetPosition);}}}void ShowClickEffect(Vector3 hitPoint){hitPoint = new Vector3(hitPoint.x, hitPoint.y + 0.1f, hitPoint.z);GameObject.Instantiate(effect_Click, hitPoint, Quaternion.identity);}void LookAtTarget(Vector3 hitPoint){targetPosition = hitPoint;targetPosition.y = this.transform.position.y;targetPosition = new Vector3(TargetPosition.x, TargetPosition.y, TargetPosition.z);this.transform.LookAt(targetPosition);}
}

PlayerAnimation脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerAnimation : MonoBehaviour
{private PlayerMove move;private Animation animations;// Start is called before the first frame updatevoid Start(){move = this.GetComponent<PlayerMove>();animations = GetComponent<Animation>();}// Update is called once per framevoid LateUpdate(){if(move.playerState==State.Idle){PlayAnim("Sword-Idle");}else if(move.playerState==State.Walk){PlayAnim("Sword-Walk");}}void PlayAnim(string animName){animations.CrossFade(animName);}
}

相机跟随的脚本

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FollowPlayer : MonoBehaviour
{private Transform player;// Start is called before the first frame updateprivate Vector3 offsetPosition;public float distance = 0;public float scrollSpeed = 10;private bool isRotating;public float rotateSpeed = 2;void Start(){player = GameObject.FindGameObjectWithTag(Tags.player).transform;transform.LookAt(player);offsetPosition = transform.position - player.position;}// Update is called once per framevoid Update(){transform.position = player.position + offsetPosition;RotateView();ScrollView();}private void RotateView(){Input.GetAxis("Mouse X");Input.GetAxis("Mouse Y");if(Input.GetMouseButtonDown(1)){isRotating = true;}if(Input.GetMouseButtonUp(1)){isRotating = false;}if(isRotating){transform.RotateAround(player.position, Vector3.up, rotateSpeed * Input.GetAxis("Mouse X"));Vector3 originalPos = transform.position;Quaternion originalRotation = transform.rotation;transform.RotateAround(player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));float x = transform.eulerAngles.x;// x = Mathf.Clamp(x, 10, 80);// transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);if(x<10||x>80){transform.position = originalPos;transform.rotation = originalRotation;}}offsetPosition = transform.position - player.position;}void ScrollView(){print(Input.GetAxis("Mouse ScrollWheel"));distance = offsetPosition.magnitude;distance += Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;distance = Mathf.Clamp(distance, 2, 18);offsetPosition = offsetPosition.normalized * distance;}
}

制作RPG游戏的部分核心代码分析相关推荐

  1. Python——利用pygame模块制作RPG游戏(一)

    利用pygame模块制作RPG游戏(一) 需要用到的第三方库:pygame 一.构造游戏的基本框架 1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等. 图片均用png格式,音乐音效均用o ...

  2. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  3. Java 线程池框架核心代码分析

    转载自 Java 线程池框架核心代码分析 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executo ...

  4. 关于《机器学习实战》中创建决策树的核心代码分析

       关于<机器学习实战>中创建决策树的核心代码分析                 SIAT  nyk          2017年10月21日星期六 一.源码内容 def create ...

  5. 微信公众号抢现金红包活动的核心代码分析(asp.net C#)

    今年春节微信抢红包,我想各位都还记得.最近很多商家也在使用公众号给粉丝发红包,做营销活动.吸粉活动或者是反馈老用户等. 我们作为第3方开发者,就义不容辞的来给这些商家服务了.首先我们得会使用程序来写抢 ...

  6. unity3d制作RPG游戏系列(4)——UI界面

    个人博客文章链接:http://www.huqj.top/article?id=161 游戏中除了3d场景以外,UI界面也是很重要的一部分,例如主角的头像.血条.背包.按钮等. 下面是myrpg中的简 ...

  7. Unity制作RPG游戏——相机的设计与实现

    本文将详细介绍Player的相机设计,不适用任何插件,如何制作类似RPG游戏的相机. 首先,设置正确的Hierarchy层级关系:将camPos的position和euler传递给Main Camer ...

  8. unity3d制作RPG游戏系列(1)——介绍

    个人博客文章链接:http://www.huqj.top/article?id=158 最近闲来无事,玩了几天的u3d,做了个简单的rpg游戏,打算把制作的过程还有一些坑从头到尾记录一下,本身做游戏只 ...

  9. Leaf(美团分布式ID生成服务)核心代码分析

    上一篇文章我们讲了几种常见的分布式唯一ID生成方案,今天我们再来讲一下由美团开源的Leaf框架,这个框架集成了两种最适合生产环境使用的方式 第一种方式是:Leaf Segment 这种方式其实跟我们之 ...

  10. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

最新文章

  1. Raid mdadm lvm
  2. 计算机视觉--GIST特征及其MATLAB代码实现
  3. MySql 服务名无效
  4. 漫步最优化四十五——矩阵S的生成
  5. (90)FPGA仿真计数器激励
  6. 写个自己用的jdbc 简单框架
  7. go程序设计语言-前言
  8. HTTP有哪些特点?
  9. 解决fences2.01在win8.1的状态下无法移动桌面图标问题
  10. 计算机二级电子表格开根号函数,教你如何用函数方式在excel中开根号
  11. VOA 2009年11月23日 星期一 这里是美国——感恩节对美国人来说意味着什么
  12. 鸡先还是蛋先,当然有答案
  13. 物流是如何用计算机管理的,物流管理期末复习题
  14. 使用 SAP UI5 绘制 Business Rule Control
  15. MATLAB读取网页内链接,Matlab使用urlread()读取网页乱码问题
  16. vmlinux 反汇编_看vmlinux的符号信息
  17. vue中的this.$el
  18. SG-UAP平台 : MX框架总结
  19. Mac下修复Node版本不正确的问题
  20. 100寸大屏幕的影院观感 神画Q1智能影院了解一下

热门文章

  1. 保存为UTF-8格式的Txt文件
  2. 基于Android的物流管理系统设计与实现(含论文)
  3. 柔性机械臂_机械臂位置控制概述
  4. php kindeditor远程图片上传,KindEditor远程跨域上传的实现
  5. 电视卡众说纷纭(二):2007年度市面常见电视卡软硬件性能
  6. win7家庭版计算机桌面,Win7 home basic家庭普通版显示桌面图标的方法
  7. 昂达v811升级到4.22d之后shell可以使用root权限操控文件系统
  8. ffmpeg学习日记11-使用ffmpeg将视频格式转换为视频编码h264格式
  9. 码农神器集 - 序 (程序员实用工具集)
  10. Scala基本类型及操作、程序控制结构