大家好,所以基本上我想知道如何才能将这个动作脚本更改为刚体。它以我想要的方式工作,用way改变方向,然后空间从那个方向向前移动,有点像,但我想把它转换成用rigidbody完成的,这样我就可以做碰撞了。谢谢!!
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);
}
}
发布于 2021-11-23 09:02:30
你所写的代码中有相当多的错误。没问题,但在代码开始正常工作之前,您可能需要修复所有这些问题。这个答案是为了给你一个跳板,让你在谷歌上搜索其中的一些错误,并围绕Update()
方法及其在Unity中的工作方式进行思考。
首先,您需要确保RigidBody2d
组件位于游戏对象上。这很容易做到,右键单击检查器并添加组件。Google:“如何将组件添加到Unity中的游戏对象”
接下来,您需要了解调用Update()
的频率及其工作方式。剧透警报-它会以最快的速度调用您的计算机。这意味着用transform.Rotate
每次调用改变旋转很可能会导致一个物体旋转得非常快。也许它的旋转速度足够快,每帧旋转超过360度,看起来就像是随机地“抽动”。你需要缩放你的旋转,所以谷歌“单位更新中的增量时间”。
最后,您将需要收集您的输入,尽管有许多方法可以剥离这只猫的皮肤,但您使用Input.GetKey()
正确地完成了这项工作。也许最直接的方法是在一个名为GetAllInputs()
的方法中收集输入,将该方法中的一些布尔值设置为类似于IsMovingRight
或IsJumping
的值,然后在Update
方法中对它们进行操作。这只是一种方法,从字面上看有几十种方法,还有许多方法可以改进它们。谷歌搜索"Unity输入系统“,"Unity 2D物理”和“有限状态机”(因为你最终会想要有“状态”,如蜷缩,跳跃,奔跑,挂在墙上等)。看起来你在写一个platformer,所以我也会看一些youtube上的教程,以及谷歌短语"Creating a Unity Platformer Tutorial“。
发布于 2021-11-24 00:26:50
假设它以你想要的方式工作,这里的代码使用rigidbody (确保Rigid Body附加到对象上),这段代码必须在固定更新中编写,因为基于RigidBody的计算必须在固定更新中完成:
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));
}
}
}
https://stackoverflow.com/questions/70084729
复制相似问题