#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, чтобы установить руку туда, куда тянется копье; добавьте ограничение, чтобы, если игрок пытается тянуть слишком далеко, не позволяйте ему
- Когда мышь отпущена, извлеките копье из руки и запустите его