1、新建unity3d项目,在项目中导入CharacterController包。在游戏中创建Plane作为地面,把Plane的Tag设为Ground。创建Directional light照亮游戏世界。把第三人称控制器放到Plane上面,之后把挂载第三人称的脚本Remove掉,把它的Tag设为Player。

  2、创建LookTargetPos脚本,把它挂载到第三人称控制器上。它的作用是当鼠标左键按下且按下的位置为Plane时,第三人称控制器朝向鼠标按下方向。

using UnityEngine;
using System.Collections;public class LookTargetPos : MonoBehaviour
{public static Vector3 targetPos;//用来保存鼠标点击到地面的位置private bool isMouseDown = false;//判断鼠标左键是否一直按下void Start(){targetPos = this.transform.position;}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){isMouseDown = true;LookAtPos();}else if (Input.GetMouseButtonUp(0)){isMouseDown = false;}//如果鼠标左键一直按下,则一直更新鼠标位置if (isMouseDown == true){LookAtPos();}}void LookAtPos(){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hitinfo;bool isCollider = Physics.Raycast(ray, out hitinfo);//判断鼠标是否点击地面if (isCollider == true && hitinfo.collider.tag == "Ground"){targetPos = hitinfo.point;targetPos.y = this.transform.position.y;this.transform.LookAt(targetPos);}}
}

  3、创建PlayerMove脚本,把它挂载到第三人称控制器上。它的作用是控制第三人称控制器移动到鼠标左键按下的位置。

using UnityEngine;
using System.Collections;public enum Playerstate
{Moveing,Idle
}
public class PlayerMove : MonoBehaviour
{private CharacterController controller;public int speed = 4;private float distance;//用来保存游戏主角和目标点的距离public Playerstate state;//保存游戏主角的状态// Use this for initializationvoid Start(){controller = this.GetComponent<CharacterController>();state = Playerstate.Idle;}// Update is called once per framevoid Update(){Move();}void Move(){distance = Vector3.Distance(this.transform.position, LookTargetPos.targetPos);if(distance>0.05f){controller.SimpleMove(this.transform.forward * speed);state = Playerstate.Moveing;print(distance);}else{state = Playerstate.Idle;}}
}

  4、创建PlayerState脚本,把它挂载到第三人称控制器上。它的作用是控制第三人称控制器动画播放。

using UnityEngine;
using System.Collections;public class PlayerState : MonoBehaviour
{private PlayerMove playerState;private float distance;// Use this for initializationvoid Start(){playerState = this.GetComponent<PlayerMove>();}// Update is called once per framevoid LateUpdate(){//如果游戏主角在移动就播放跑的动画if (playerState.state == Playerstate.Moveing){PlayAnimation("run");}//如果游戏主角在等待就播放站的动画else if (playerState.state == Playerstate.Idle){PlayAnimation("idle");}}void PlayAnimation(string animationName){animation.CrossFade(animationName);}
}

  5、创建CameraFollow脚本,把它挂载到Main Camera上。它的作用是:1、让Main Camera跟随第三人称控制器移动;2、改变Main Camera视角;3、控制Main Camera与第三人称控制器的距离。

using UnityEngine;
using System.Collections;public class CameraFollow : MonoBehaviour
{private Vector3 followPos;//用来保存摄像机和游戏主角的相对位置private GameObject player;public float scrollSpeed = 10;//摄像机拉近的速度private bool isRotating = false;//判断鼠标右键是否按下public float rotateSpeed = 2;//摄像机左右旋转的速度private float distance;//保存摄像机和游戏主角距离// Use this for initializationvoid Start(){player = GameObject.FindGameObjectWithTag("Player");followPos = player.transform.position - this.transform.position;this.transform.LookAt(player.transform.position);}// Update is called once per framevoid Update(){Follow();RotateView();ScrollView();}//使摄像机跟随游戏主角运动void Follow(){this.transform.position = player.transform.position - followPos;}//滑动鼠标滑轮的时候可以改变摄像机与游戏主角的距离void ScrollView(){distance = followPos.magnitude;distance += Input.GetAxis("Mouse ScrollWheel");distance=Mathf.Clamp(distance,2,18);followPos = followPos.normalized * distance;}//按下鼠标右键的时候移动鼠标可以改变摄像机的视角void RotateView(){if(Input.GetMouseButtonDown(1)){isRotating = true;}else if(Input.GetMouseButtonUp(1)){isRotating = false;}if(isRotating){this.transform.RotateAround(player.transform.position, player.transform.up, rotateSpeed * Input.GetAxis("Mouse X"));Vector3 originalPos = this.transform.position;Quaternion originalRotation = this.transform.rotation;this.transform.RotateAround(player.transform.position, this.transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));float x = this.transform.eulerAngles.x;print(x);//限制摄像机旋转的最大,最小位置if(x<10||x>70){this.transform.position = originalPos;this.transform.rotation = originalRotation;}}followPos = player.transform.position - this.transform.position;}
}

  6、完成以后的效果,录屏鼠标看不见了,抱歉了。

unity3d模仿魔兽世界鼠标对游戏操作相关推荐

  1. Unity 进阶 之 简单模仿鼠标交互(场景:手机屏幕当做触摸板Touch Pad,移动鼠标,鼠标确定等操作)

    Unity 进阶 之 简单模仿鼠标交互(场景:手机屏幕当做触摸板Touch Pad,移动鼠标,鼠标确定等操作) 目录 Unity 进阶 之 简单模仿鼠标交互(场景:手机屏幕当做触摸板Touch Pad ...

  2. 远程电脑打游戏鼠标漂移无法操作解决办法

    描述:远程电脑打游戏鼠标漂移无法操作解决办法 步骤: 更换远程软件Parsec

  3. 魔兽世界任务分类及游戏任务系统设计启示

    魔兽世界任务分类及游戏任务系统设计启示 魔兽的任务号称有1500多个,这么多任务,难免有些水分在里面,不过把这些浩瀚如星海的任务分类一下,倒也可以借鉴不少.(由于我练的是部落,所以选部落方向的比较经典 ...

  4. c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏

    使用Unity3D怎么制作一个五子棋游戏 发布时间:2021-04-17 17:56:36 来源:亿速云 阅读:106 作者:Leah 本篇文章为大家展示了使用Unity3D怎么制作一个五子棋游戏,内 ...

  5. 用Unity3D实现智能巡逻兵游戏

    用Unity3D实现智能巡逻兵游戏 项目地址 智能巡逻兵游戏 完成效果图 类图 要求 游戏设计要求: 创建一个地图和若干巡逻兵(使用动画): 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址. ...

  6. Kinect结合Unity3D引擎开发体感游戏(二)

    这篇接着<Kinect结合Unity3D引擎开发体感游戏(一)>,时隔3个月才出这篇,在此期间还有不少机油们,要求出续集,期间在公司那边事情太多,一直帮公司前人做的项目擦屁股,到目前为止, ...

  7. [Kinect]Kinect结合Unity3D引擎开发体感游戏

    最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验也是 ...

  8. DELPHI编模拟鼠标,键盘操作,比键盘鼠标录制软件更强

    打网游朋友都知道,要下载一些录制鼠标键盘的操作,来代替频繁的手工操,但经过笔者测试发现,许多录制鼠标键盘软件,不是收费的,就是暗藏木马,得不偿失.会delphi编程朋友,用下面的代码,DIV自己的小程 ...

  9. 模拟鼠标键盘html,模拟按键操作神器(鼠标键盘模拟操作助手)V2.0.2.1 正式版

    模拟按键操作神器(鼠标键盘模拟操作助手)是一款很优秀好用的由网友自制的模拟按键操作的辅助工具.如果你需要一款好用的键盘模拟软件,小编带来的这款模拟按键操作神器是很不错的选择,功能强大全面,使用后可以帮 ...

最新文章

  1. 【cocos2d-js官方文档】九、cc.loader
  2. cassandra框架模型之二——存储机制 CommitLog MemTable SSTable
  3. PHP扩展开发 - 构建第一个PHP扩展
  4. linux df和du常用命令
  5. Python 下载的 11 种姿势
  6. python简单爬虫代码-python简单爬虫(二)
  7. UNITY开发VR从入门到放弃---VR自学手册
  8. LintCode 52: Next Permutation
  9. Android JNI的调用
  10. [php知识点]PHP伪协议
  11. 计算机应用后期影音制作,影音制作工具(ImTOO Movie Maker)
  12. 中国脑与语言认知领域研究学者
  13. ESP32S3系列--代码执行速度优化(从PSRAM执行代码)
  14. 深度探索c++对象模型(5):ctor、dtor、copy
  15. 达梦体系结构(DM8)_yxy
  16. python echarts城市热力图_python如何画热力图?
  17. 计算机设备管理器不显示网卡,驱动技巧:解决设备管理器中找不到网卡的问题...
  18. nvme命令中prp_Linux nvme驱动分析之块设备层
  19. Spring之配置非自定义Bean
  20. 简单的java实现分解质因数。

热门文章

  1. IDEA2021启动报错Your JRE: 11.0.10+9-b1341.41 amd64 (JetBrains s.r.o.)\jbr libpng warning: iCCP: cHRM
  2. 计算机不能取代老师的英语作文,雅思大作文范文电脑替代老师
  3. latex中连字符、波折号和负号
  4. 慈云桂率计算机,慈云桂:第一台亿次巨型计算机的总设计师
  5. 初中计算机竞赛面试题目及答案,教资面试历年考试题目,试讲+答辩,附解析!【初中信息技术】...
  6. 完成数据的打通-豌豆荚被阿里巴巴收购后的168天
  7. LeetCode 39
  8. 《查理·芒格传》精髓:查理芒格传奇的一生及背后的投资逻辑。
  9. iptables mangle使用
  10. 大数据商机无限 掘金四行业个股