Unity3d中的人物移动

对于第三人称的游戏,主人公身上一般加一个character controller用来控制移动。这时候需要自己模拟重力,让主人公站在地板上。如果用A D控制左右, W S控制前后,那么控制移动代码可以这么写:

public class Move : MonoBehaviour {
    public CharacterController character;
    public float speed;
    // Use this for initialization
    void Start () {
        character = this.GetComponent<CharacterController>();
        speed=1f;
    }

    // Update is called once per frame
    void Update () {
        float horizontal = Input.GetAxis("Horizontal"); //A D 左右
        float vertical = Input.GetAxis("Vertical"); //W S 上 下
        float moveY = 0;
        float gravity = -9.8f;
        moveY = gravity*Time.deltaTime;
        character.Move(new Vector3(horizontal, moveY, vertical) * speed * Time.deltaTime);
    }
}

使用Input.GetAxis方法获取下列默认轴: "Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键(方向键)。horizontal和verical分别是两个介于[-1,1]之间的数。利用这段代码,人物只在xz平面上移动。

移动还可以用transform.Translate方法,或者使用Rigidbody并赋予刚体速度。但有一点要注意,如果移动命令是在Update()函数里面,物体移动时会有抖动情况,因为每一帧时间不固定,移动的距离有长有短。解决这个问题的方法是把移动语句写在FixedUpdate()函数里面,因为该函数每一帧的长度固定。

具体其他移动方法可以看http://www.jianshu.com/p/5653b0be5fd4

时间: 2024-10-05 16:41:17

Unity3d中的人物移动的相关文章

时光煮雨 Unity3D实现2D人物移动-总结篇

系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoTween&Unity Native2D实现 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画 时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率 背景 最近研究Unity3d,2d寻路的实现.所以又一次涉及到了角色坐标位移的问

【吐血推荐】简要分析unity3d中剪不断理还乱的yield

在学习unity3d的时候很容易看到下面这个例子: 1 void Start () { 2 StartCoroutine(Destroy()); 3 } 4 5 IEnumerator Destroy(){ 6 yield return WaitForSeconds(3.0f); 7 Destroy(gameObject); 8 } 这个函数干的事情很简单:调用StartCoroutine函数开启协程,yield等待一段时间后,销毁这个对象:由于是协程在等待,所以不影响主线程操作.一般来说,看到

【转】简要分析unity3d中剪不断理还乱的yield

在学习unity3d的时候很容易看到下面这个例子: 1 void Start () { 2 StartCoroutine(Destroy()); 3 } 4 5 IEnumerator Destroy(){ 6 yield return WaitForSeconds(3.0f); 7 Destroy(gameObject); 8 } 这个函数干的事情很简单:调用StartCoroutine函数开启协程,yield等待一段时间后,销毁这个对象:由于是协程在等待,所以不影响主线程操作.一般来说,看到

简要分析unity3d中剪不断理还乱的yield

在学习unity3d的时候非常easy看到以下这个样例: 1 void Start () { 2 StartCoroutine(Destroy()); 3 } 4 5 IEnumerator Destroy(){ 6 yield return WaitForSeconds(3.0f); 7 Destroy(gameObject); 8 } 这个函数干的事情非常easy:调用StartCoroutine函数开启协程.yield等待一段时间后,销毁这个对象:因为是协程在等待.所以不影响主线程操作.

unity3d中的Quaternion.LookRotation

android开发范例中的第二个粒子,是摇杆操作游戏,模式类似于“迷你高尔”,僵尸包围类型的设计游戏. 其中让我注意到这个函数的使用非常特别:Quaternion.LookRotation. 游戏针对两个平台做了输入配置. 在pc平台上控制人物移动用正常的上下左右按键控制,然而人物的旋转就变成了鼠标位置. 正常情况我们希望东西能够根据指定目标方向移动其实用lookat这个函数就可以了.但这个地方用的方法原比lookat来的更加省事儿. 看看他是怎么获得这个角度的: 1 2 3 4 5 6 7 8

Unity3d中CharacterController的移动和碰撞分析

在Unity3d中系统提供的第一人称视角模型First Person Controller的移动可分为两种: 一.移动transform 这种移动方式为直接对该人物模型的transform属性做位移操作,移动方式为在Update函数中的写法: void Update () { if(Input.GetKey(KeyCode.W)) { transform.Translate(Vector3.forward * Time.deltaTime * speed); } else if(Input.Ge

unity3d中的物体,在Scene窗口中可以看到,而在Game窗口中看不到的原因

unity3d中的物体,在Scene窗口中可以看到,而在Game窗口中看不到的原因: 多半是因为物体所属Layer与照相机的culling mask不一致导致的,或者超出照相机的可视范围. 如果游戏中有多个相机,每个相机都有自己的可视范围和culling mask,物体在移动的过程中,进入不同的相机,其可见性可能是变化的,取决与物体所属Layer与当前相机是否一致

(转)Unity3D中移动物体位置的几种方法

1. 简介 在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale). 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position). 2.1 Transform.Tra

Windows系统Unity3D中的快捷键

[狗刨学习网] Windows系统Unity3D中的快捷键[td] 组合键 键 功能 File 文件 Ctrl   N New Scene 新建场景 Ctrl   O Open Scene 打开场景 Ctrl   S Save Scene 保存 Ctrl Shift S Save Scene as 保存场景为 Ctrl Shift B Build Settings... 编译设置... Ctrl   B Build and run 编译并运行 Edit 编辑 Ctrl   Z Undo 撤消 C