Unity3D角色控制器通过脚本设置速度?

Posted

技术标签:

【中文标题】Unity3D角色控制器通过脚本设置速度?【英文标题】:Unity3D Character Controller set speed through script? 【发布时间】:2016-05-17 03:23:16 【问题描述】:

如何在Void FixedUpdate 中设置前进和后退的速度?或者有没有更好的方法来做到这一点?不过我需要使用角色控制器。

using UnityEngine;
using System.Collections;

public class CharacterControllerz : MonoBehaviour 

public float speed;
private CharacterController playerController;

void Start()

    playerController = GetComponent<CharacterController>();


void Update()



void FixedUpdate()

    if (Input.GetKey("right"))
    
        playerController.Move (Vector3.forward);
        Debug.Log ("RIGHT");
    
    if (Input.GetKey("left"))
    
        playerController.Move (Vector3.back);
        Debug.Log ("LEFT");
           

    playerController.Move (Vector3.left);


【问题讨论】:

您的游戏对象是否只有一个 CharacterController 或 FPC 脚本? 这是检查员的样子:prntscr.com/a048dt。 Speed float 根本没有被使用,所以不用担心。 好的,请问您为什么不用Unity标准资源(其中包括CC和FPC)? 角色控制器有那么难用吗?我只希望我的角色在按下按钮时左右移动并始终向前。它是无尽的跑步者。我来看看标准资产。 【参考方案1】:
        public float speed = 5f;
        public float jumpStrenght = 8f;
        public float gravity = 20f;
        private Vector3 moveDirections = new Vector3();
        private Vector3 inputs = new Vector3();

        void FixedUpdate()
        
            CharacterController cc = GetComponent<CharacterController>();
            if (cc.isGrounded) 
            
                if (Input.GetKey("right"))
                    inputs.z = 1;
                if (Input.GetKey("left"))
                    inputs.z = -1;
                if (Input.GetKey("up"))
                    inputs.y = jumpStrenght;
                moveDirections = transform.TransformDirection(inputs.x, 0, inputs.z) * speed;                    
            

            moveDirections.y = inputs.y - gravity;
            cc.Move(moveDirections * Time.deltaTime);
        

我认为这就是您想要的,但您可能必须切换轴。

编辑:为什么要使用 TransformDirection?因为我们想要将对象移动到不应该与对象旋转相关的方向上。

【讨论】:

您应该将 GetComponent 放在 Start 中,这样它只会执行一次。您也可以使用 Input.GetAxis 而不是检查左右(顺便说一句,如果/否则如果,如果你向左走,你就不会向右走)。最后,您的 y 轴被阻尼两次,因为您将 y 值乘以 deltaTime 两次。我猜你想模糊导致文档的轨道:)。 这只是一个示例函数,当他使用get key时,这个函数也使用它(请在检查答案之前阅读问题)。 好的,您能解释一下 TransformDirection 的作用以及为什么在这里使用它吗?为什么不使用 transform.forward 代替。应该在常见问题解答中解释他的答案。此外,你的重力不会被应用,因为只有在接地时,这个家伙才会​​飞。 我还应该解释为什么我使用 Vector3 而不是 Vector2 进行移动,或者为什么使用浮动而不是加倍?..... 不,你现在很好。进行了两三个编辑,但最终你做到了。你不是自己做的,但很好。您可能会获得声望奖励。下一次,当有人只是想帮助你时,你应该只听听(我真的只是想改善你的答案,否则我可能会否决它),并在你明显表现出缺乏编码信心时避免聪明的语气和知识。我们随时为您提供帮助。

以上是关于Unity3D角色控制器通过脚本设置速度?的主要内容,如果未能解决你的问题,请参考以下文章

unity3D中如何通过脚本控制粒子初始速度?

unity3d 有个官方的车的例子 速度为啥乘2.23693629?

关于unity3D 5.0角色控制器 不可导入 请问为何

Scanvenger游戏制作笔记Unity3D控制角色吃食物

unity3d 怎么用脚本控制播放制定音乐文件

请问Unity3D中,第三人称视角使用角色控制器的Move函数移动时,怎么实现由鼠标左右移动控制运动朝向?