Как я могу прикрепить это метательное копье к рукам моего персонажа и заставить его бросить его?

#visual-studio #unity3d #2d

#visual-studio #unity3d #2d

Вопрос:

Итак, я новичок в Unity, и у меня есть несколько вопросов. Я пытался найти подобное решение, но почти все они предназначены для Unity 3d, и у них уже есть «оружие» как часть тела их персонажа. Я написал сценарий для отвода назад и метания копья, но теперь мне интересно, как я могу прикрепить его к рукам моего персонажа и сделать механику отвода назад ограниченной его руками и полностью прикрепленной. Любая помощь будет оценена. Gif и код ниже:

GIF: https: //gfycat.com/insistentbestdogwoodclubgall

Код:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Scripting.APIUpdating;
 
public class spear : MonoBehaviour
{
 
   
 
    public Rigidbody2D mySpear;
   
    Vector3 velocity;
 
    private Vector3 _initialPosition;
 
    [SerializeField] private float _launchPower = 500;
 
   
 
   
 
    private float _timeSittingAround;
 
    private bool _spearWasLaunched;
 
 
 
 
    private void Awake()
    {
        _initialPosition = transform.position;
 
        mySpear = GetComponent<Rigidbody2D>();
    }
 
    void Start()
    {
        mySpear = GetComponent<Rigidbody2D>();
       
    }
 
 
   
 
    //reloads the scene if spear goes out of bounds or lays dormant for 2 seconds
    void Update()
    {
     
 
     
        //rotates the spear in the direction it's moving
        mySpear.transform.up =
        Vector3.Slerp(mySpear.transform.up, mySpear.GetComponent<Rigidbody2D>().velocity.normalized, Time.deltaTime);
 
 
 
        if (_spearWasLaunched amp;amp;
            GetComponent<Rigidbody2D>().velocity.magnitude <= 0.1)
        {
            _timeSittingAround  = Time.deltaTime;
        }
     
        if(transform.position.y > 30 ||
            transform.position.y < -12.5 ||
            transform.position.x > 40 ||
            transform.position.x < -20 ||
            _timeSittingAround > 2)
        {
            string currentSceneName = SceneManager.GetActiveScene().name;
            SceneManager.LoadScene(currentSceneName);
        }
     
    }
 
    //slingshot mechanic
    private void OnMouseDrag()
    {
        Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        transform.position = new Vector3(newPosition.x, newPosition.y);
       
    }
 
   
    private void OnMouseDown()
    {
       
       
       
    }
 
 
 
    //launches the spear when mouse is released
    private void OnMouseUp()
    {
        Vector2 directionToInitialPosition = _initialPosition - transform.position;
 
       
 
        GetComponent<Rigidbody2D>().AddForce(directionToInitialPosition * _launchPower);
 
        GetComponent<Rigidbody2D>().gravityScale = 1;
 
        _spearWasLaunched = true;
 
       
 
 
 
       
 
 
 
    }
 
 
 
 
 
 
 
 
 
}
 
  

Ответ №1:

Я родом из 3D-игр, но концепция должна быть очень похожей:

  • Настройте своего персонажа для анимации
  • Вложите игровой объект spear под преобразование руки персонажа
  • Используйте IK, чтобы установить руку туда, куда тянется копье; добавьте ограничение, чтобы, если игрок пытается тянуть слишком далеко, не позволяйте ему
  • Когда мышь отпущена, извлеките копье из руки и запустите его