我正在使用Unity开发游戏应用程序。我在移动GameObject时遇到问题。
在我的游戏中,当玩家使用其设备向上滑动时,GameObject从点A移至B,而当他向下滑动时,游戏对象则从B移至A。
我用游戏逻辑编写了一个C#脚本,但是涉及到这个问题。
问题在于GameObject立即从A移动到B。
这是我用来移动GameObject的代码行:
transform.localPosition = Vector3.MoveTowards (PositionA,PositionB,Time.deltaTime * speed);
Run Code Online (Sandbox Code Playgroud)
speed 是一个值为10.0f的浮点数。
我希望我的GameObject缓慢移动以将A指向B。尽管速度值发生了变化,但没有任何变化,它仍然在瞬间移动。
我该如何解决?(我尝试Vector3.Lerp过,但结果相同)。
我正在尝试将数组中的每个数字与下一个数字相加并保存所有结果:这是我的示例:
var arr = [2, 3, -6, 2, -1, 6, 4];
Run Code Online (Sandbox Code Playgroud)
我必须加2 + 3并保存,然后2 + 3 - 6保存,接下来2 + 3 - 6 - 1保存它等等到数组的末尾.接下来相同的第二个索引3 - 6并保存,3 - 6 + 2 ...我知道这可以通过两个嵌套循环完成,但不知道如何做到这一点.哪里我错了?
const sequence = [2, 3, -6, 2, -1, 2, -1, 6, 4]
const sums = [];
for (let i = 0; i < sequence.length; i++) {
for (let z = 1; z < sequence.length; z++) {
let previous = sequence[z - 1] + sequence[z];
sums.push(previous + sequence[z + 1]) …Run Code Online (Sandbox Code Playgroud)早上好。我正在尝试将 Stockfish 实现到 Unity 国际象棋游戏中,有人告诉我最好的方法是使用 Spawn.Process 有谁知道我可以查看并作为参考的现有代码吗?
不同的游戏状态是与人工智能沟通的最佳方式吗?
谢谢!
我有一个简单的类,它用预定义值覆盖列表获取方法,但是,在基本构造函数上调用add方法时,它不会添加新值。
这是我的代码,显示错误:
using System.Collections.Generic;
using NUnit.Framework;
public class SimpleTest
{
[Test]
public void Test()
{
var child = new ChildClass();
Assert.AreEqual(4, child.myList.Count);
}
private abstract class MyBaseClass
{
public abstract List<string> myList { get; }
public MyBaseClass(string addThis)
{
myList.Add(addThis);
}
}
private class ChildClass : MyBaseClass
{
public override List<string> myList => new List<string> { "one", "two", "three" };
public ChildClass() : base("four")
{
myList.Add("dsada");
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?由于没有设置器,因此列表不能用其他列表代替,但是Add方法仍然适用于这种情况。
假设我想在代码中创建一个用于控制 pawn 的 AI 类,但我希望我的设计师能够使用蓝图来修改行为以进行快速迭代。
假设我在MyProjectBaseAI.h 中有这个:
#pragma once
#include "EngineMinimal.h"
#include "GameFramework/Actor.h"
#include "MyProjectBaseAI.generated.h"
UCLASS()
class MYPROJECT_API AMyProjectBaseAI : AActor
{
GENERATED_BODY()
public:
AMyProjectBaseAI(const FObjectInitializer& ObjectInitializer);
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
void SetGoalPosition(FVector pos);
virtual void DetermineGoalPosition(int32 stateData1, int32 stateData2) = 0;
private:
FVector goalPosition;
};
Run Code Online (Sandbox Code Playgroud)
我想让这个类抽象,并有一个蓝图能够根据他们的 AI 设计实现DetermineGoalPosition(...);调用SetGoalPosition(FVector pos)。
那么,设计人员如何在检查器中设置实现类,以便我的 C++ 代码可以实例化它?假设我正在使用AMyProjectBaseAI ai = World->SpawnActor<AMyProjectBaseAI>(...);
我制作了一个球出现在 3D 空间中的场景。三角球耗费大量资源。所以我使用带有球纹理的二维表面(四边形)来完成此操作。但现在我需要在每次相机移动时调整形状的方向。我使用位置变换和 LookAt 方法来完成此操作。问题是我可以优化这个吗?如果可以使用着色器旋转形状,这将有很大帮助。
using UnityEngine;
public class WorldSurf : MonoBehaviour
{
GameObject[] matrix;
int xSize = 20;
int ySize = 20;
int zSize = 20;
// Start is called before the first frame update
void Start()
{
matrix = new GameObject[xSize * ySize * zSize];
//var shader = Shader.Find("Legacy Shaders/Diffuse");
var shader = Shader.Find("Sprites/Default");
//var texture = Resources.Load<Texture>("Textures/Ball_01");
var i = 0;
for (var x = 0f; x < xSize; ++x)
{
for (var y = 0f; y …Run Code Online (Sandbox Code Playgroud) 我正在为Celcius,Kelvin,Farenheit设计温度转换器,并一直停留在这个小问题上。我使用事件监听器来跟踪和解析我的输入,并且每当传入任何数字时,转换都将包括0。我有3个输入字段和3个占位符文本,因此如果我想转换摄氏温度,它们将转换为开尔文和法伦海特。但是,当我退格并将输入留空时,其他两个温度将返回NaN,据我了解,因为这些字段现在没有值。
因此,现在我想解决这个问题,将输入保留为空白,并将占位符文本重置为原始文本,而不是显示NaN。我尝试过if语句来捕获此特定问题,并且效果很好。现在,我可以在不同温度之间转换数字,甚至退格也可以重置占位符文本。一切正常,但数字为0。只要输入0,它就不会被解析并且什么也没有发生。
const celciusInput = document.querySelector("#celcius > input");
const fahrenheitInput = document.querySelector("#fahrenheit > input");
const kelvinInput = document.querySelector("#kelvin > input");
function celciusConverter() {
const cTemp = parseFloat(celciusInput.value) || "";
const fTemp = cTemp * (9 / 5) + 32;
const kTemp = cTemp + 273.15;
//condition if there is an empty string in the input, placeholder values would reset instead of returning NaN.
if (cTemp == "") {
fahrenheitInput.value = "";
kelvinInput.value = "";
} else {
fahrenheitInput.value = Math.round(fTemp); …Run Code Online (Sandbox Code Playgroud)假设我有一辆汽车在 P0 位置,我想把它移动到 P1 位置,就像这 4 个例子:
P0 和 P1 之间的直线距离为d,运动到达的垂直最大高度为d/3。我想模拟这个从 P0 到 P1 的顺时针半圆运动。
假设dir = P1 - P0(length d)perp是d/3垂直于的向量 (长度) dir。
假设t = 0是半圆运动的开始和t = 1结束,我如何测量汽车的角度和位置t = i?
我正在编写一个脚本,当我想将其添加到 GameObject 时,我注意到启用检查消失了,并且无法将脚本拖到该组件的检查器中Event Script。
我尝试更改脚本的名称,但没有任何变化。
要添加的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventScript : MonoBehaviour
{
private GameObject obj;
public SaveObjScript saveObjScript;
public SpawnScript spawnScript;
public void InitObject(){
Debug.Log("OBJETO A ACCIONAR ES: " + saveObjScript.getObject().name);
//obj = saveObjScript.getObject();
}
public void ChangeColor(){
InitObject();
Renderer rend = obj.GetComponent<Renderer>();
rend.material.color = Random.ColorHSV();
}
public void RemoveObj(){
InitObject();
Destroy(obj);
spawnScript.mTotalObjetos --;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我尝试创建一个自定义数据资产以在虚幻引擎中使用。我对此非常陌生,我主要关注艺术,所以尽管我对 OOP 有一个大致的了解,但 C++ 远不是我的强项。无论如何,我的课程如下所示:
USTRUCT()
struct FTrainFormations {
GENERATED_USTRUCT_BODY()
UPROPERTY(EditAnywhere)
FString TrainEntry;
UPROPERTY(EditAnywhere)
bool Flipped;
UPROPERTY(EditAnywhere)
bool CargoLoaded;
UPROPERTY(EditAnywhere)
bool AllowSubstitution;
};
UCLASS(BluePrintType)
class TS2NEW_API UTrainFormation : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Train")
TArray<FTrainFormations> Formation;
UPROPERTY(EditAnywhere, Category = "Train", DisplayName = "Train Numbering Overrides")
TArray<int> TrainNumberingOverrides;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Vehicle Substitution")
float BlockTrainProbability;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Rail Vehicle Information")
int CommonnessWeighting;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Rail Vehicle Information")
bool IsSubstitutableUnit;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category …Run Code Online (Sandbox Code Playgroud)