我的场景里有一个车对象.我想通过慢慢地将它移动到一个新的位置来模拟一个基本的驾驶动画...我使用下面的代码,但我认为我使用Lerp错了?它只是跳了一下然后停了下来?
void PlayIntro() {
GameObject Car = carObject;
Vector3 oldCarPos = new Vector3(Car.transform.position.x, Car.transform.position.y, Car.transform.position.z);
GameObject posFinder = GameObject.Find("newCarPos");
Vector3 newCarPos = new Vector3(posFinder.transform.position.x, posFinder.transform.position.y, posFinder.transform.position.z);
carObject.transform.position = Vector3.Lerp (oldCarPos, newCarPos, Time.deltaTime * 2.0f);
}
Run Code Online (Sandbox Code Playgroud) 我对编码很新,我仍然在努力发展思维逻辑,以帮助我创建我想要的游戏解决方案.目前,我正在Unity尝试创建一个2D GameObject,这是一个隐藏秘密门的墙.当玩家GameObject触发它时,我希望GameObject淡出(大约90%),露出后面的空间和隐藏的门.
到目前为止,我已经设法弄清楚如何在触发器上使"秘密墙"GO处于非活动状态,因此它会消失,但这并不会产生我想要的视觉效果.正如我所说,我仍在努力开发编码器的思维方式,所以虽然我已经做了很多研究来解决这个问题,但很多结果我都不太明白.
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SecretDoor1 : MonoBehaviour {
void OnTriggerEnter2D (Collider2D SecretDoorTrig) {
if (SecretDoorTrig.gameObject.tag == "Player") {
GetComponent<SpriteRenderer> ().enabled = false;
}
else {
GetComponent<SpriteRenderer> ().enabled = true;
}
}
void OnTriggerExit2D (Collider2D SecretDoorTrig) {
if (SecretDoorTrig.gameObject.tag == "Player") {
GetComponent<SpriteRenderer> ().enabled = true;
}
else {
GetComponent<SpriteRenderer> ().enabled = false;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想在x秒内和协程函数中将GameObject从位置A 移动到B. Vector3.MoveTowards我知道如何使用这个,Vector3.Lerp但这次更喜欢这样做,Vector3.MoveTowards因为两个函数的行为都不同.
有了Vector3.Lerp,这样做是这样的:
IEnumerator moveToX(Transform fromPosition, Vector3 toPosition, float duration)
{
float counter = 0;
//Get the current position of the object to be moved
Vector3 startPos = fromPosition.position;
while (counter < duration)
{
counter += Time.deltaTime;
fromPosition.position = Vector3.Lerp(startPos, toPosition, counter / duration);
yield return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图做同样的事情Vector3.MoveTowards,但它没有正常工作.问题是移动在x时间或持续时间之前结束.而且,它不能顺利移动.它跳到两个位置的中间而不是位置B的末尾.
这是Vector3.MoveTowards与上述问题一起使用的函数:
IEnumerator MoveTowards(Transform objectToMove, Vector3 toPosition, float duration)
{
float counter = 0;
while …Run Code Online (Sandbox Code Playgroud) 我是新手,我尝试开始使用Unity Engine.
有人可以解释一下,Quaternion.Slerp怎么样?因为我想以不同的角度90,180和270旋转一些物体.我可以在下面看到我的代码.不幸的是,当我添加180度时,对象会做出疯狂的事情,而不是将旋转放到(0,180,180)这个游戏对象.我想得到(180,0,0)
public float speed = 0.1F;
private float rotation_x;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
rotation_x = transform.rotation.eulerAngles.x;
rotation_x += 180;
}
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(rotation_x, transform.eulerAngles.y, transform.eulerAngles.z), Time.time * speed);
}
Run Code Online (Sandbox Code Playgroud) 我统一制作了一个测试游戏,当我单击按钮时,它会生成一个从工厂类创建的圆柱体。我试图做到这一点,以便当我创建圆柱体时,它的高度会在接下来的 20 秒内缩小。我发现的一些方法很难转化为我正在做的事情。如果您能引导我走向正确的方向,我将非常感激。
这是我的圆柱体类代码
public class Cylinder : Shape
{
public Cylinder()
{
GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
cylinder.transform.position = new Vector3(3, 0, 0);
cylinder.transform.localScale = new Vector3(1.0f, Random.Range(1, 2)-1*Time.deltaTime, 1.0f);
cylinder.GetComponent<MeshRenderer>().material.color = Random.ColorHSV();
Destroy(cylinder, 30.0f);
}
}
Run Code Online (Sandbox Code Playgroud) 因此,当我的角色被敌人的火焰呼吸击中时,我想创造出被点燃的角色的感觉.因此,当角色着火时,我希望他在特定的时间内失去特定的健康状况.
例如; 让我说他已经着火3秒了,我想让他因为着火而失去30点生命值,我将如何均匀分配失去30点生命值3秒钟?我不希望30点伤害立即应用到健康状态,我希望它能够慢慢击退玩家的健康状况,以便在3秒内完成30点伤害.
游戏是用c#制作的.
谢谢.