我想用人物的舌头,使它不是射出子弹,而是射向敌人,舔它,然后回来。我从这个问题中得到了这样的措辞。Unity射击与舌头2d游戏 还没有回答,已经4年多了)。唯一的区别是我的角色移动。
我有这个代码,从看射击教程,所以当你点击舌头预制生成,是在正确的角度。我需要它在点击时生长,并收缩回来。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LineController : MonoBehaviour
{
public GameObject player;
private Vector3 target;
public GameObject crosshairs;
public GameObject tonguePrefab;
// Start is called before the first frame update
void Start()
{
Cursor.visible = false;
}
// Update is called once per frame
void Update()
{
target = transform.GetComponent<Camera>().ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, transform.position.z));
crosshairs.transform.position = new Vector2(target.x, target.y);
Vector3 difference = target - player.transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
if (Input.GetMouseButtonDown(0))
{
shootTongue(rotationZ);
}
}
IEnumerator shootTongue(float rotationZ)
{
GameObject t = Instantiate(tonguePrefab) as GameObject;
t.transform.position = new Vector2(target.x, target.y);
t.transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);
yield return new WaitForSeconds(2000);
t.SetActive(false);
}
}
我还想让它在什么时间后消失,有了它就完全不行了?
如果预制件只是一条带有简单纹理的线,我建议使用线条渲染器。
如果你真的想展开一个舌头游戏对象,那么你就需要一点数学知识,这个答案有你需要的东西,但是是3D的。 https:/answers.unity.comquestions473076scaling -in -the -forward -direction.
1)我建议用以下方法创建spriteprite sheet动画 Mecanim 或比较新的骨骼动画与 Anima2D. 有了这些系统,你可以创建漂亮的动画,过渡,甚至可以对球体碰撞器进行动画,以触发碰撞和动作,改变对象的活动状态等,并以很少的代码控制动画。在我看来,这样你可以得到最好的效果。
因为舌头不是子弹... :) 你只需要一个。我不认为你想每次按舔按钮时都要InstantiateCreate prefabs。相反,你应该把你的舌头对象打开关闭(gameObject.SetActive)。你也可以在动画中改变你的对象活动状态。因此,如果你不知道如何编码,你可以在Animation窗口中完成大部分工作,并在你按下舔舐按钮时使用非常简单的代码来播放动画。每当球体对撞机碰到什么东西时,你可以告诉Animator控制器播放一个 "回滚 "动画,它会很好地过渡到起始位置。
关于Mecanim、Animations、2D Animations、Anima2D、Animator Controller的教程有很多。
2)如果你需要非常好的控制舌头,你可以创建一个自定义的网格,并通过脚本控制它,但这要困难得多。
3) 你的对象没有关闭的原因可能是因为你写了WaitForSeconds(2000),所以它将在2000秒后关闭--超过半个小时。你还应该用StartCoroutine(shootTongue())来调用它,因为它是一个Coroutine。同样,如果你想关闭对象,不要每次都创建新的对象。如果你想继续创建新的对象,你应该用Destroy对象来代替。否则你的场景中会有很多被停用的舌头,我认为你不需要那么多舌头。