小编der*_*ugo的帖子

Unity 5.1网络 - 为主机和所有客户端生成一个对象作为子对象

我有一个可以装备多种武器的玩家对象.配备武器时,其变换的父级设置为其手.我已经搞砸了一段时间,并且不能让它对主机和客户端起作用.现在我正在尝试在服务器上装备武器,并告诉所有客户设置他们的父母变换.

public NetworkInstanceId weaponNetId; 

   [Command]
    void Cmd_EquipWeapon()
    {
        var weaponObject = Instantiate (Resources.Load ("Gun"),
                                        hand.position,
                                        Quaternion.Euler (0f, 0f, 0f)) as GameObject;

        weaponObject.transform.parent = hand;

        NetworkServer.Spawn (weaponObject);

        //set equipped weapon
        var weapon = weaponObject.GetComponent<Weapon> () as Weapon;

        weaponNetId = weaponObject.GetComponent<NetworkIdentity> ().netId;
        Rpc_SetParentGameobject (weaponNetId);
    }

    [ClientRpc]
    public void Rpc_SetParentGameobject(NetworkInstanceId netID)
    {   
        weaponNetId = netId;
    }
Run Code Online (Sandbox Code Playgroud)

在更新中,我正在更新武器转换

    void Update () {

    // set child weapon tranform on clients
    if (!isServer) {
        if (weaponNetId.Value != 0 && !armed) {
            GameObject child = NetworkServer.FindLocalObject (weaponNetId); …
Run Code Online (Sandbox Code Playgroud)

network-programming multiplayer unity-game-engine unity-networking

5
推荐指数
2
解决办法
9813
查看次数

在另一个脚本的 Start() 之后执行另一个脚本的 Start() Unity C#

我想在另一个脚本的 Start() 之前运行一个脚本的 Start() 。是否可以?您可以选择脚本的执行顺序吗?

unity-game-engine

5
推荐指数
1
解决办法
9328
查看次数

Unity StopCoroutine 当存在多层(或嵌套)“yield return”时不停止协程

如果我使用 one-layer yield returnStopCoroutine()可以成功停止我的协程。请参阅下面的代码示例...

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestStopcoroutine : MonoBehaviour {
  IEnumerator co = null;

  // Use this for initialization
  void Start () {
    co = FunA();
    StartCoroutine(co);
  }

  private IEnumerator FunA() {
    Debug.Log("Enter FunA...");
    yield return RepeatPrint();
    Debug.Log("FunA end...");
  }

  private IEnumerator RepeatPrint() {
    for (int i = 0; i < 5; i++) {
      Debug.Log(i);
      yield return new WaitForSeconds(1);
    }
  }

  /// <summary>
  /// Set this function to a button on …
Run Code Online (Sandbox Code Playgroud)

c# coroutine unity-game-engine

5
推荐指数
1
解决办法
8697
查看次数

在Visual Studio 2013中为.NET 3.5调试添加调试符号

我有一个Unity应用程序和一个由Visual Studio 2013创建的C#DLL,我想调试它.我这样做是通过进入DEBUG > Attach to ProcessVisual Studio 2013内部,如果我选择Native代码,我可以设置C++代码的断点等.但是,当我选择.NET 3.5的选项时,它表示断点永远不会达到符号尚未加载.

如何为Visual Studio 2013加载.NET 3.5的调试符号?

.net c# debugging visual-studio

5
推荐指数
1
解决办法
248
查看次数

在 Unity 中查找一组 3D 点的定向边界框

我有一组 3D 点,或者实际上是小球体,我需要使用 Unity 3D 将它们用尽可能小的 3D 框包围。

在封闭框只能移动和缩放的情况下,解决方案非常简单,您只需迭代所有点并封装每个点即可。但我还需要找到盒子的最佳方向。

因此,为了用 ASCII 来说明问题,给出一个只有两点的基本 2D 场景:

Y
| * (0,1)
|
|
|
|               * (1,0)
-------------------- X
Run Code Online (Sandbox Code Playgroud)

使用规则增长的边界框,您最终会得到一个非常大的封闭框,其中大部分为空白,而在这种情况下,我需要一个非常薄且绕 Z 轴旋转约 45 度的框。基本上只是一条连接两点的线。

但我永远不知道需要将多少点组合在一起。正如前面提到的,它必须以 3D 模式运行。

到目前为止,我只尝试了基本方法,即不旋转封装盒以获得最佳配合。结果确实离我需要的还很远。

我正在考虑一种基于遗传算法的强力方法,我生成大量随机框,然后简单地选择面积最小的框,同时仍包含所有点。然而,这太慢了。

GameObject go = points[0];
Bounds b = new Bounds(go.transform.position,go.transform.localScale);

for (int i=1;i<points.Count;i++)
{
    go = points[i];
    b.Encapsulate(new Bounds(go.transform.position, go.transform.localScale));
}

GameObject containingBox = Instantiate(boxPrefab);
containingBox.transform.position = b.center;
containingBox.transform.localScale = b.size;
containingBox.transform.rotation= Quaternion.Identity; //How to calculate?
Run Code Online (Sandbox Code Playgroud)

c# geometry unity-game-engine

5
推荐指数
1
解决办法
7250
查看次数

两个几乎相同的批处理脚本之一中的语法错误:“)”无法在此处进行语法处理

我正在尝试为自动 Unity 构建设置 Jenkins 服务器。

因此,我编写了两个(在我看来)基本相同的批处理脚本。

这两个脚本都由 Jenkins 通过一个Execute Windows batch command步骤作为构建步骤运行

命令: E:\unityImport.bat

然后Execute Windows batch command第二步使用

命令: E:\unityBuild.bat

它们都有相同的开头,因为我需要收集一些文件路径,特别是项目的统一版本。所以在这两个脚本中,我使用完全相同的解析和字符串拆分项目版本的方式。它们之间唯一不同的是,第一个启动 Unity 并将专用的unitypackage(保存在下一步中执行的方法)导入项目,而第二个再次启动 Unity 以执行实际构建(不幸的是它没有不能一次性工作...... Unity 似乎尝试在unitypackage导入之前执行该方法)。

然而,第二个脚本总是失败并出现语法错误

")" 不能在这里进行语法处理。


我试图实现的是

  1. 读出文件的内容 %WORKSPACE%\ProjectSettings\ProjectVersion.txt

    SET /p TEST=<%WORKSPACE%\ProjectSettings\ProjectVersion.txt
    
    Run Code Online (Sandbox Code Playgroud)

    的内容%TEST%通常看起来像例如

    m_EditorVersion: 2019.3.4f1
    
    Run Code Online (Sandbox Code Playgroud)

    ECHO. ProjectVersion.txt = %TEST%看起来像

    ProjectVersion.txt = m_EditorVersion: 2019.3.4f1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 字符串拆分以便只取包含版本号的最后一部分

    for %%x in (%TEST::= %) do (
        SET "VALUE=%%x"
        SET "UNITY_VERSION=!VALUE:~0,-2!" 
    )
    
    Run Code Online (Sandbox Code Playgroud)

    所以%UNITY_VERSION%通常包含例如2019.3.4. 我不会拆分更多,因为也有两位数的 Unity 版本,例如 …

batch-file unity-game-engine jenkins

5
推荐指数
1
解决办法
481
查看次数

如何在Unity3D中获得平滑的慢动作

我试图在正在制作的游戏中获得慢动作,但它看起来确实很滞后。我使用 Unity 提供的标准资源中的 FPS 控制器。我将以下脚本附加到它:

function Update () 
{
    if (Input.GetKeyDown ("q"))
    {
        Time.timeScale = 0.5;
    }

    if (Input.GetKeyDown ("e")) 
    {
        Time.timeScale = 2.0;
    }

    if (Input.GetKeyDown ("t")) 
    {
        Time.timeScale = 1.0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个与此类似的问题http://answers.unity3d.com/questions/39279/how-to-get-smooth-slow-motion.html

但对该问题给出的修复不起作用。我尝试向其添加刚体并将插值设置为插值,但它没有执行任何操作。(我从“使用重力”中删除了勾号,因为角色开始飞行)。我是 Unity 和脚本方面的新手,所以请对我宽容点。

谢谢。

unity-game-engine unityscript

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

当前 LOD 级别 - LOD Group Unity

我在使用 LOD 组时遇到问题,因为我想知道我在屏幕上看到的当前活动 LOD 级别是哪个。我只能通过以下方式访问百分比

GameObject.GetComponent<LODGroup>().GetLODs()[size].screenRelativeTransitionHeight;
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题吗?提前致谢。

c# unity-game-engine level-of-detail

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

SQLAlchemy 和 pandas 产生错误(engine.table_names 返回空列表)

我有一个如下所示的代码:

from sqlalchemy import create_engine
import pandas as pd

# load the CSV
df = pd.Series()
df['raw'] = pd.read_csv('./data/Iris.csv',index_col='Id')

# Connect to the mysql, and use database "datasets"
engine = create_engine('mysql://root:root@127.0.0.1')
engine.execute("USE Datasets") # select new db


# Write data
table_name = 'IRIS'
df['raw'].to_sql(table_name, engine, if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)

数据已正确插入数据库,之后可以加载,但命令产生错误:

> --------------------------------------------------------------------------- AttributeError                            Traceback (most recent call
> last) <ipython-input-6-cfb9b0f5c930> in <module>()
>       1 table_name = 'IRIS'
>       2 
> ----> 3 df['raw'].to_sql(table_name, engine, if_exists='append', index=False)
> 
> ~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in
> to_sql(self, …
Run Code Online (Sandbox Code Playgroud)

python sql

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

Unity 3D - 使用脚本移动人形头部肌肉

目标

我想使用脚本旋转给定 x、y、z 旋转值的人形角色的头部(不使用场景中的任何其他对象作为“看”方向)。

我想做的事

设置类人角色的绑定(humanoid prefab --> Rig --> Animation Type: Humanoid --> Configure --> Muscles & Settings),你会看到如下界面:https://docs.unity3d。 com/Manual/MuscleDefinitions.html

在此菜单中,在“头部”下,您可以拖动滑块来上下移动您的人形头部。我想用脚本实现同样的效果,但我不知道如何做到这一点。

资源

这个问题从来没有用示例代码得到正确的答案:https : //answers.unity.com/questions/824628/can-we-using-script-to-moving-the-muscles-in-unity.html

我想我必须对HumanPose.muscles( https://docs.unity3d.com/ScriptReference/HumanPose-muscles.html )做一些事情,但是由于缺少代码示例,我不知道如何解决这个问题。

编辑 3:此链接有一个 HumanPose 的代码示例,但我还没有让它工作:https ://forum.unity.com/threads/humanposehandler.430354/

如何通过脚本给定值来获取人形角色的头部肌肉并旋转它们?(或任何其他方式如何使用头部旋转值旋转头部,而场景中没有其他对象)。任何帮助,将不胜感激。

编辑 1 & 2:示例代码

我收到一条 JSON 格式的消息,从中提取弧度值并将其更改为度数:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json.Linq;  // JSON reader; https://assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347

public class HeadRotator : MonoBehaviour {

    Quaternion rotation = Quaternion.identity;

    // Radians to degree
    float Rad2Degree = 180 / …
Run Code Online (Sandbox Code Playgroud)

unity-game-engine

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