我试图在正在制作的游戏中获得慢动作,但它看起来确实很滞后。我使用 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 和脚本方面的新手,所以请对我宽容点。
谢谢。
我可能会问一些非常明显的东西而且我忽略了一些东西,但是我试图在它做某事之前创建一个暂停.
我已经看到这在网上很多地方使用 -
yield WaitForSeconds(2);
Run Code Online (Sandbox Code Playgroud)
但是我得到一个语法错误,
"错误CS1528:预期;或=(无法在声明中指定构造函数参数)(CS1528)(Assembly-CSharp)
这让我感到困惑,因为我不确定yield关键字的真正意义或作用是什么,而且我假设它WaitForSeconds是一个类,其中"2"在构造函数中(不在声明中),任何帮助都将受到赞赏.谢谢!
有谁知道,我必须在 Unity 项目目录结构中放置一个文件(sqlite 文件),以便在 apk 编译和安装后,该文件仍存储在 Android 端的 persistedDataPath 中?
提前致谢!
我是第一次尝试Kotlin并希望得到一些帮助.
下面的代码是暂停执行当前函数而不休眠执行线程.暂停基于提供的时间量.该函数使用C#语言中的Coroutine支持.(这个支持最近也加入了Kotlin!)
Unity示例
void Start()
{
print("Starting " + Time.time);
StartCoroutine(WaitAndPrint(2.0F));
print("Before WaitAndPrint Finishes " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime)
{
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何在Kotlin做类似的事情.有人可以帮我指导正确的方向吗?如果我在发布答案之前弄明白,我会更新我的帖子.
提前致谢!
这在UnityScript中会是什么样子?
void playerDataLoaded( List< GameCenterPlayer > players )
{
foreach( GameCenterPlayer p in players )
// do something with p
}
Run Code Online (Sandbox Code Playgroud)
玩家是列表而不是数组.
我正在尝试处理来自Apple GameCenter的事件响应,它返回一个电镀属性列表.这些是错误:
"长度不是对象播放器的成员"
"类型'对象'(播放器)不支持切片"
使用iOS Game Center,Unity和prime31 GameCenter插件.
我试图在Unity3d中实现多线程脚本执行,但似乎Unity库没有办法提供,我们必须使用Mono提供的System.Threading.但是他们已经提到Unity Scripting不是线程安全的.
我可以使用System.threading或其他独立于平台的API在Unity3D中安全有效地实现多线程吗?另外,我如何确保脚本并行运行?
一个例子或链接将受到高度赞赏.
问候
我正在尝试创建一个脚本来设置实例化时的对象.问题是,我不清楚如何做到这一点.我有这个功能..
function spawnPlayer()
{
var CameraScript = GameObject.Find(PlayerPrefab.name).GetComponent("Camera Control");
Network.Instantiate(PlayerPrefab, spawnObject.position, Quaternion.identity, 0);
}
Run Code Online (Sandbox Code Playgroud)
PlayerPrefab将成为将要实例化的预制件.当发生这种情况时,我需要在另一个GameObject上设置实例化的gameObject,这个GameObject是一个名为"Camera Control"的脚本,里面有一个我想要设置的变换Target.这该怎么做?
从这两种方法中获得最接近目标的最有效和最便宜的方法是什么?
使用LINQ
GameObject FindClosestTarget(string trgt)
{
GameObject[] closestGameObject = GameObject.FindGameObjectsWithTag(trgt)
.OrderBy(go => Vector3.Distance(go.transform.position, transform.position)
.FirstOrDefault();
return closestGameObject ;
}
Run Code Online (Sandbox Code Playgroud)
或这个
GameObject FindClosestTarget(string trgt)
{
GameObject[] gos= GameObject.FindGameObjectsWithTag(trgt);
GameObject closest=null;
float distance = Mathf.Infinity;
Vector3 position = transform.position;
foreach (GameObject go in gos) {
Vector3 diff = go.transform.position - position;
float curDistance = diff.sqrMagnitude;
if (curDistance < distance) {
closest = go;
distance = curDistance;
}
}
return closest;
}
Run Code Online (Sandbox Code Playgroud) 所以我试图通过触摸一个立方体来改变另一个脚本中的变量.当前设置
每个都有自己的脚本Enemy_Stats&Character_Stats
正如你在这个小片段中看到的那样,从另一个脚本访问变量是一个很好的解决方法.
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Enemy")
{
collision.gameObject.GetComponent<Enemy_Stats>().Health =
collision.gameObject.GetComponent<Enemy_Stats>().Health
- gameObject.GetComponent<Character_Stats>().AttackDamage;
if (collision.gameObject.GetComponent<Enemy_Stats>().Health <= 0)
{
Destroy(collision.gameObject);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我刚接触Unity,但是没有办法用它来引用它:
collision.Health?
我目前在我的场景中有一个立方体,我已经四处移动了.我希望另一个立方体始终具有相同的y值.因此,如果第一个立方体向下移动10个单位,我希望另一个立方体做同样的事情.
我的第一个多维数据集是在编辑器中手动创建的,但我的另一个是使用脚本放置的.谢谢!