Unity 2D舌头射击游戏

问题描述 投票:0回答:1

我想用人物的舌头,使它不是射出子弹,而是射向敌人,舔它,然后回来。我从这个问题中得到了这样的措辞。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);
    }
}

我还想让它在什么时间后消失,有了它就完全不行了?

c# unity3d 2d
1个回答
0
投票

如果预制件只是一条带有简单纹理的线,我建议使用线条渲染器。

  1. 创建一个空的变换,从嘴开始,然后移动,直到到达十字线。移动是使用 Vector2.MoveTowards.
  2. 你的舌头将不再是一个线条渲染器组件。这个线条渲染器将有2个点,起始点是静态的,而结束点你必须在Update()上更新,例如,以对应第1项中的空变换的位置。

如果你真的想展开一个舌头游戏对象,那么你就需要一点数学知识,这个答案有你需要的东西,但是是3D的。 https:/answers.unity.comquestions473076scaling -in -the -forward -direction.


0
投票

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对象来代替。否则你的场景中会有很多被停用的舌头,我认为你不需要那么多舌头。

© www.soinside.com 2019 - 2024. All rights reserved.