首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将此统一运动脚本转换为刚体?

如何将此统一运动脚本转换为刚体?
EN

Stack Overflow用户
提问于 2021-11-23 08:51:48
回答 2查看 48关注 0票数 1

大家好,所以基本上我想知道如何才能将这个动作脚本更改为刚体。它以我想要的方式工作,用way改变方向,然后空间从那个方向向前移动,有点像,但我想把它转换成用rigidbody完成的,这样我就可以做碰撞了。谢谢!!

代码语言:javascript
运行
AI代码解释
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Fly : MonoBehaviour
{

public float moveSpeed;
void Start()
{
    
}


void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        transform.Translate(new Vector3(0,0,moveSpeed) * Time.deltaTime, Space.Self);
    }
    

    float rotatex = Input.GetAxis("Vertical");
    float rotatey = Input.GetAxis("Horizontal");
    
    transform.Rotate(0, rotatey, 0, Space.World);
    transform.Rotate(-rotatex * 0.5f, 0, 0);
}

}

EN

回答 2

Stack Overflow用户

发布于 2021-11-23 09:02:30

你所写的代码中有相当多的错误。没问题,但在代码开始正常工作之前,您可能需要修复所有这些问题。这个答案是为了给你一个跳板,让你在谷歌上搜索其中的一些错误,并围绕Update()方法及其在Unity中的工作方式进行思考。

首先,您需要确保RigidBody2d组件位于游戏对象上。这很容易做到,右键单击检查器并添加组件。Google:“如何将组件添加到Unity中的游戏对象”

接下来,您需要了解调用Update()的频率及其工作方式。剧透警报-它会以最快的速度调用您的计算机。这意味着用transform.Rotate每次调用改变旋转很可能会导致一个物体旋转得非常快。也许它的旋转速度足够快,每帧旋转超过360度,看起来就像是随机地“抽动”。你需要缩放你的旋转,所以谷歌“单位更新中的增量时间”。

最后,您将需要收集您的输入,尽管有许多方法可以剥离这只猫的皮肤,但您使用Input.GetKey()正确地完成了这项工作。也许最直接的方法是在一个名为GetAllInputs()的方法中收集输入,将该方法中的一些布尔值设置为类似于IsMovingRightIsJumping的值,然后在Update方法中对它们进行操作。这只是一种方法,从字面上看有几十种方法,还有许多方法可以改进它们。谷歌搜索"Unity输入系统“,"Unity 2D物理”和“有限状态机”(因为你最终会想要有“状态”,如蜷缩,跳跃,奔跑,挂在墙上等)。看起来你在写一个platformer,所以我也会看一些youtube上的教程,以及谷歌短语"Creating a Unity Platformer Tutorial“。

票数 0
EN

Stack Overflow用户

发布于 2021-11-24 00:26:50

假设它以你想要的方式工作,这里的代码使用rigidbody (确保Rigid Body附加到对象上),这段代码必须在固定更新中编写,因为基于RigidBody的计算必须在固定更新中完成:

代码语言:javascript
运行
AI代码解释
复制
        public class Fly : MonoBehaviour
        {
            public float moveSpeed;
            [SerializeField] private Rigidbody rb;

            void Start()
            {
                rb = GetComponent<Rigidbody>();

            }


            void FixedUpdate()
            {
              if (Input.GetKey(KeyCode.Space))
              {
                  //transform.Translate(new Vector3(0,0,moveSpeed) * 
                  //Time.deltaTime, Space.Self);
                  if (rb)
                  {
                      rb.MovePosition(new Vector3(0,0,moveSpeed) * 
                      Time.deltaTime);
                  }
                  
              }
              

              float rotatex = Input.GetAxis("Vertical");
              float rotatey = Input.GetAxis("Horizontal");
              
              // transform.Rotate(0, rotatey, 0, Space.World);
              // transform.Rotate(-rotatex * 0.5f, 0, 0);
              if (rb)
              {
                  rb.MoveRotation(Quaternion.Euler(rotatex , rotatey , 0));
              }

            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70084729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档