gpt4 book ai didi

c# - 让 GameObject 悬停在飞机上方? - Unity3D C#

转载 作者:行者123 更新时间:2023-11-30 23:24:08 24 4
gpt4 key购买 nike

所以我正在尝试制作一款 FPS 类型的游戏,是否可以将游戏对象锁定在 Y 轴上/无法上下移动? GameObject 是 Counter Strike 中的 AWP 模型,我用 WASD 键让它在平面上移动,当我使用鼠标向上/向下看时,AWP 会沿对角线移动到我正在看的地方,然后我不想那样。我的游戏看起来像这样:Screenshot

如果有帮助的话,这是我为 AWP 准备的代码:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class AWPscript : MonoBehaviour {
public float speed = 5f;
// public float sensitivityX = 15.0f;
// public float sensitivityY = 15.0f;
public Camera MainCamera;
public Camera scopeCamera;
public float lookSensitivity = 10f;
public float xRotation ;
public float yRotation ;
public float currentXRotation;
public float currentYRotation;
public float xRotationV;
public float yRotationV;
public GameObject Scopepng;
public float lookSmoothDamp = 0.1f;
public Image ScopePNG;
public AudioClip sound;
// Use this for initialization
void Start () {
speed = 7.5f;
}

// Update is called once per frame
void Update () {
if(Input.GetKey(KeyCode.W))
transform.Translate(Vector3.forward * Time.deltaTime*speed);
if (Input.GetKey(KeyCode.S))
transform.Translate(Vector3.back * Time.deltaTime * speed);
if (Input.GetKey(KeyCode.A))
transform.Translate(Vector3.left * Time.deltaTime * speed);
if (Input.GetKey(KeyCode.D))
transform.Translate(Vector3.right * Time.deltaTime * speed);

if (Input.GetKey(KeyCode.LeftControl))
speed = 15f;



lookAround();
scope();
}

void scope()
{
if (Input.GetMouseButton(1))
{

MainCamera.enabled = false;
scopeCamera.enabled = true;
ScopePNG.enabled = true;

}
else
{

MainCamera.enabled = true;
scopeCamera.enabled = false;
ScopePNG.enabled = false;

}
}
void lookAround()
{
xRotation -= Input.GetAxis("Mouse Y") * lookSensitivity;
yRotation += Input.GetAxis("Mouse X") * lookSensitivity;
transform.rotation = Quaternion.Euler(xRotation, yRotation, 0);
}
}

最佳答案

这可能是最简单的解决方案:

void Update () {
if(Input.GetKey(KeyCode.W))
transform.Translate(Vector3.forward * Time.deltaTime*speed);
if (Input.GetKey(KeyCode.S))
transform.Translate(Vector3.back * Time.deltaTime * speed);
if (Input.GetKey(KeyCode.A))
transform.Translate(Vector3.left * Time.deltaTime * speed);
if (Input.GetKey(KeyCode.D))
transform.Translate(Vector3.right * Time.deltaTime * speed);

if (Input.GetKey(KeyCode.LeftControl))
speed = 15f;

LookAround();
Scope();

JoeFix();
}

public float fixedFloatingHeightMeters; // set to say 1.4 in the editor
private void JoeFix()
{
Vector3 p = transform.position;
p.y = fixedFloatingHeightMeters;
transform.position = p;
}

PS!您真的必须将 lookAround 重命名为 LookAround 并将范围重命名为 Scope。它可以影响以后的事情


这是一条高级信息,可能更符合您的需要。请也试试这个!

目前你有一个矢量,它是指向物体的 Nose 。

假设它正在向北移动,好吗?

所以,transform.forward指向北方,但指向“向下一点”。

虽然它指向北方,但如果您从侧面看它,矢量指向下方一点。

您真正想要的是那个矢量,但它是平的,而不是指向下方或上方。对吧?!

事实上,这是做到这一点的魔法:

Vector3 correctDirectionButPossiblyDownOrUp = transform.forward;
Vector3 correctDirectionButFlatNoDownOrUp;
correctDirectionButFlatNoDownOrUp
= Vector3.ProjectOnPlane(
correctDirectionButPossiblyDownOrUp,
Vector3.up );
correctDirectionButFlatNoDownOrUp.Normalize();

correctDirectionButFlatNoDownOrUp 现在是您想要的“神奇”矢量。

但是,请不要忘记 Translate 在 LOCAL SPACE 中工作。 (“对象”对世界的看法。)您非常想在世界空间中移动它,这很容易。注意最后一个参数:https://docs.unity3d.com/ScriptReference/Transform.Translate.html

transform.Translate(
correctDirectionButFlatNoDownOrUp * Time.deltaTime*speed,
Space.World);

就是这样!

脚注不要忘记“Vector3.up”与“Vector3”完全没有关系。

关于c# - 让 GameObject 悬停在飞机上方? - Unity3D C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com