小编Ruz*_*ihm的帖子

如何在不使用 transform.Rotate 的情况下在局部轴或世界轴上旋转带有第二四元数的四元数?

Transform.Rotate 有一个非常有用的界面,用于选择是否应该相对于世界轴或局部轴进行旋转。

在幕后,它正在对变换的rotation、 aQuaternion和另一个进行一些数学运算Quaternion。这个数学的确切性质取决于你选择当地国旗还是世界国旗。

我怎样才能在不将第Quaternion一个分配给转换rotation(浪费内存和/或时间)的情况下进行这种数学运算,只是为了用它做一些数学运算?

假设我的第一个QuaternionQuaternion q1 = Quaternion.Euler(0f,0f,90f);,第二个是Quaternion q2 = Quaternion.Euler(90f,0f,0f)

沿其局部轴将第二个应用于第一个将产生一个旋转,将其右侧旋转为面朝下,将其正面旋转为右面。

沿原始轴将第二个应用于第一个将产生一个旋转,使其背面朝下旋转,顶部朝右旋转。

c# 3d quaternions unity-game-engine

4
推荐指数
1
解决办法
2011
查看次数

如何避免在OnTriggerEnter()中调用GetComponent()?

一个简单的问题在这里..

我只是想知道是否有一种方法可以避免GetComponent<Script>()在内部打电话OnTriggerEnter(Collider other)?我试图避免这样做,因为我知道GetComponent很慢。

private void OnTriggerEnter(Collider other)
{
    Tile tile = other.GetComponent<Tile>();
    if (tile.colorIndex == GameManager.Instance.currentTargetColorIndex)
    {
        Debug.Log("Hit!");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine

4
推荐指数
1
解决办法
74
查看次数

协程 WaitForSeconds 受 timeScale 影响

我正在为我的 UI 元素制作一个简单的动画。

我有一个动画组件,它有 2 个不同的动画 - ZoomIn 和 ZoomOut。

每当需要在屏幕上显示 UI 元素(例如按钮)时,就会显示这些动画。

我通常更喜欢在不显示时停用游戏对象。

我为动画编写了以下方法:

私人 IEnumerator ToggleObjectWithAnimation (GameObject gameObj) {
        Animator gameObjectAnimator = gameObj.GetComponent(); // Animator 设置为未缩放时间
        如果(gameObj.activeSelf == false){
            gameObj.transform.localScale = new Vector3 (0, 0, 1.0f);
            gameObj.SetActive (true);
            gameObjectAnimator.SetTrigger("ZoomIn");
            yield return new WaitForSeconds (0.5f);
        } else if(gameObj.activeSelf == true) {
            gameObjectAnimator.SetTrigger("ZoomOut");
            yield return new WaitForSeconds (0.5f);
            gameObj.SetActive (false); // 当时间刻度 = 0 时代码不执行
        }
        收益率返回空;
}

该代码在大多数屏幕上都可以正常工作,但是当我使用 timescale = 0 暂停游戏时会出现问题。

当 timescale 为 0 时,gameObj.SetActive (false) 行不起作用。

c# coroutine unity-game-engine

3
推荐指数
1
解决办法
1761
查看次数

更改 UI 矩形变换位置

我有这些行:

GameObject bp = Instantiate(MyPrefab);
bp.transform.SetParent(GameObject.FindGameObjectWithTag("ContentFactory").transform);
bp.transform.localPosition = new Vector3(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

Si,我只是实例化了一个预制件,我设置了一个父级,我想更改位置。

我的问题是,该函数SetParent为我的游戏对象设置了一个固定位置bp,之后我不知道如何更改这个位置。最后一行没有改变......与 相同.position

我怎样才能改变 的位置bp?谢谢 !

编辑 :

ContentFactory 的检查员:

在此输入图像描述

bp 检查员:

在此输入图像描述

层次结构(蓝色内容是ContentFactory):

在此输入图像描述

c# position unity-game-engine

3
推荐指数
1
解决办法
1万
查看次数

Unity - 检查鼠标单击是否在矩形变换内

我试图弄清楚鼠标单击是否在矩形变换内部。

每次用户点击屏幕时,就会抛出一个球。但如果用户单击暂停按钮,则不应扔球。

我尝试用这段代码来解决,但似乎只识别了矩形变换的右上四分之一。这是一个简短的视频来展示实际问题:https ://youtu.be/gdyDBK6ubgo

这是代码片段:

void Update() {
     //Check if user touch on display / click mouse button 
     Vector2 mousePos = new Vector3(Screen.width - Input.mousePosition.x,Screen.height - Input.mousePosition.y, 0); 
     if (Input.GetMouseButtonDown(0) && props.throwable && !checkCollisionWithPauseButton(mousePos) && props.remainingBalls > 0)
     {
         fireBall(Input.mousePosition);
     }
 }

 bool checkCollisionWithPauseButton(Vector3 mousePos){
     //TODO: This does not work very well
     return pauseButton.GetComponent<RectTransform>().rect.Contains (mousePos); 
 }
Run Code Online (Sandbox Code Playgroud)

这是显示矩形变换的屏幕截图。

c# user-interface unity-game-engine

3
推荐指数
1
解决办法
1万
查看次数

在 Unity 编辑器中显示数组成员的某些属性,具体取决于这些数组成员的其他属性

我有一个MyClass具有枚举和属性的类。根据枚举,我想在编辑器中显示某些属性。

有这样的枚举 {first, Second} 和属性 health, step,position 。如果选择第一个,则在编辑器中显示名称和步骤,如果选择第二个,则显示步骤和位置。我想出了如何为单一行为类做到这一点。以及如何执行此操作以使数组的每个元素都具有动态属性?该图像突出显示了我在选择此列表时希望看到的字段。提前致谢 。抱歉我的英语不好

c# unity-game-engine unity3d-editor

3
推荐指数
1
解决办法
5772
查看次数

使用扭矩稳定气垫船刚体直立

我目前正在创建一款涉及悬停自行车的游戏。当自行车与物体碰撞时,它的角度会自然改变。我希望创建某种方法让它趋向于 0。这是我尝试过的:

if (hoverbike.rotation.x != 0 || hoverbike.rotation.z != 0)
        {
            hoverbike.AddTorque(x: Mathf.MoveTowardsAngle(hoverbike.rotation.x, 0, 0.01f), y: hoverbike.rotation.y, z: Mathf.MoveTowardsAngle(hoverbike.rotation.z, 0, 0.01f));
        }

        transform.Rotate(0.0f, -Input.GetAxis("Mouse X") * 0.5f, 0.0f);
Run Code Online (Sandbox Code Playgroud)

很难解释它在做什么,因为我不明白它在做什么,它似乎在旋转。如果有兴趣的话,这是我的其余代码:https://pastebin.com/kzMDQMVF,这是一团糟,但我仍在学习如何使用 Unity。

哦,角度 y 不应该趋于 0,因为那是水平角。

c# unity-game-engine

3
推荐指数
1
解决办法
3475
查看次数

Unity 中的环境变量在开发和生产之间有所不同

有没有办法在Unity中区分开发环境和生产环境的代码?

目前,我很想使用它,这样我就可以更改广告实施的 testMode 变量。

// I would love to have something like this:
# if DEVELOPMENT
    bool testMode = true;
# elif PRODUCTION
    bool testMode = false;
#endif
Run Code Online (Sandbox Code Playgroud)

例如,这有效。

#if UNITY_IOS
    private string gameId = "1111111";
#elif UNITY_ANDROID
    private string gameId = "2222222";
#endif

Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine preprocessor-directive

3
推荐指数
1
解决办法
3381
查看次数

如何迭代数组中的每个数字并将它们与同一数组中的其他数字相加 - JS

我正在尝试将数组中的每个数字与下一个数字相加并保存所有结果:这是我的示例:

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)

javascript arrays loops nested

2
推荐指数
1
解决办法
69
查看次数

在 Unity 中使用 Stockfish Chess AI

早上好。我正在尝试将 Stockfish 实现到 Unity 国际象棋游戏中,有人告诉我最好的方法是使用 Spawn.Process 有谁知道我可以查看并作为参考的现有代码吗?

不同的游戏状态是与人工智能沟通的最佳方式吗?

谢谢!

c# artificial-intelligence unity-game-engine uci

2
推荐指数
1
解决办法
4518
查看次数