Unity控制角色移动错误问题集合、第一人称视角
来源:互联网 发布:淘宝怎么才能做起来 编辑:程序博客网 时间:2024/06/10 23:22
使用了CharacterContoller造成人物穿透地面无限下坠
解决办法:
1.先添加CharacterContoller控件,这个组件提供了移动功能和碰撞交互,在行走的时候不会穿到墙里面。
2..再给主角对象添加刚体组件(rigidbody)组件,在刚体组件属性设置出,取消Use Gravity选项,并且勾选IsKinematic,使其不受物理影响
第一人称视角控制代码
Unity3D自带了两个角色移动组件第三人称和第一人称,满足基本的学习需求了,下面的代码比官方自带的简单,我是在学习的时候为了理解这些逻辑参考书本写的。
using UnityEngine;using System.Collections;public class Hero : MonoBehaviour { //主角自身属性 public float h_moveSpeed = 3.0f;// 移动速度 public float h_gravity = 2.0f;//重力值 public float h_hp = 10.0f;//主角生命值 CharacterController h_cc;//角色控制器组件 private Transform self_transform; //绑定摄像机 Transform cam_transform;//摄像机transform Vector3 cam_rot;//摄像机旋转角度 float cam_height = 5.0f;//既是赋值给摄像机的Y轴 float cam_forward = 5.0f;//既是赋值给摄像机的Z轴void Start () { self_transform = this.transform; h_cc=this.GetComponent<CharacterController>(); CamStart();} //初始化摄像机位置,与主角关联 void CamStart() { cam_transform = Camera.mainCamera.transform; //因为需要将主角绑定到摄像机,需要将主角的坐标与摄像机关联 Vector3 h_post = self_transform.position;//读取当前主角的坐标 h_post.y += cam_height;//因为摄像机要放在主角的头部,也就是眼睛位置,所以Y坐标要增加一点 cam_transform.position = h_post;//主角坐标与摄像机关联 cam_rot = cam_transform.eulerAngles; Screen.lockCursor = true; }void Update () { if (h_hp <= 0) return; Control();} void OnGUI() { string a = ""; string b = ""; a = "AxisMouse X :" + Input.GetAxis("Mouse X").ToString(); b = "AxisMouse Y :" + Input.GetAxis("Mouse Y").ToString(); GUILayout.Label(a); GUILayout.Label(b); } void Move() { float xm=0, ym=0, zm=0; ym -= h_gravity * Time.deltaTime; if (Input.GetKey(KeyCode.W)) { zm += h_moveSpeed * Time.deltaTime; } if (Input.GetKey(KeyCode.S)) { zm -= h_moveSpeed * Time.deltaTime; } if (Input.GetKey(KeyCode.A)) { xm -= h_moveSpeed * Time.deltaTime; } if (Input.GetKey(KeyCode.D)) { xm += h_moveSpeed * Time.deltaTime; } h_cc.Move(self_transform.TransformDirection(new Vector3(xm, ym, zm))); } void Control() { float rh = Input.GetAxis("Mouse X"); float rv = Input.GetAxis("Mouse Y"); //捕获鼠标转动值,赋值给摄像机的eulerAngles,实现转动 cam_rot.x -= rv; cam_rot.y += rh; cam_transform.eulerAngles = cam_rot; //转动鼠标,视角变化后,保持主角的面向方向与摄像机方向一致 Vector3 camTempRot = cam_transform.eulerAngles; camTempRot.x = 0; camTempRot.z = 0; self_transform.eulerAngles = camTempRot; Move(); //执行移动以后,摄像机位置与主角位置保持一致 Vector3 tempHeroPost = self_transform.position; tempHeroPost.y = cam_height; cam_transform.position = tempHeroPost; }}
- Unity控制角色移动错误问题集合、第一人称视角
- unity 鼠标控制第一人称视角及键盘控制移动
- unity 鼠标控制第一人称视角及键盘控制移动升级版
- Unity 视角 第一人称脚本 MouseLook
- unity第一人称视角mouselook分析
- Unity视角控制和Camera的移动
- Unity 鼠标控制角色移动
- Unity学习之第一人称视角旋转
- Unity第一人称和第三人称视角脚本
- 第一人称视角漫游(unity + 暴风魔镜)
- Unity相机自身围绕(第一人称视角)
- Unity3D 第一人称视角摄像机旋转控制
- Unity中自带的第一人称与第三人称视角之间的切换问题
- unity中简单的角色移动控制
- unity 如何控制摄像机跟随角色移动
- Unity 角色单步移动控制
- 【Unity&角色移动】代码控制重力
- unity学习手记之控制角色移动
- 使用CDT+cygwin调试程序
- js 改变字体颜色
- Visual Studio 绘制白空格的方法
- hdu 1003 Max Sum
- Hadoop format的时候The directory is already locked
- Unity控制角色移动错误问题集合、第一人称视角
- org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs
- Re-installation failed due to different application signatures.
- HDOJ--1075--What Are You Talking About【字典树】
- POJ 2104 —— 平方分割 || 归并树 || 划分树(未完)
- subclipse
- uva 108 Maximum Sum 最大子矩阵和
- FFMPEG详解
- 深入浅出FFMPEG(二) SDK version 0.11