Пробовал закреплять объекты к игроку всякими джоинтами, но получился бред.
Вот видео с FixedJoint http://www.youtube.com/watch?v=8Dx-3TRM ... e=youtu.be объект дергается, проходит через коллайдеры и если сунуть этот объект себе под ноги то вообще ж@па. С другими джоинтами тоже не то.
Скрипт
Синтаксис:
Используется csharp
public class Drager : MonoBehaviour {
private Transform cameraTrans;
private FixedJoint hand;
void Awake () {
cameraTrans = GetComponentInChildren<Camera>().transform;
hand = new GameObject("Hand").AddComponent<FixedJoint>();
hand.transform.parent = cameraTrans;
hand.transform.localPosition = Vector3.forward;
hand.transform.localRotation = Quaternion.identity;
hand.transform.localScale = Vector3.one;
hand.rigidbody.isKinematic = true;
}
// Update is called once per frame
void Update () {
if( Input.GetMouseButtonDown(0) && hand.connectedBody == null ) {
RaycastHit hit = Raycast();
if(hit.rigidbody != null) {
hand.connectedBody = hit.rigidbody;
hand.connectedBody.useGravity = false;
}
}
if(Input.GetMouseButtonUp(0) && hand.connectedBody != null) {
hand.connectedBody.useGravity = true;
hand.connectedBody = null;
}
}
private RaycastHit Raycast() {
Ray ray = new Ray();
ray.origin = cameraTrans.position;
ray.direction = cameraTrans.forward;
RaycastHit hit = new RaycastHit();
int layer = 1 << LayerMask.NameToLayer("Player");
Physics.Raycast( ray, out hit, 6, ~layer );
return hit;
}
}
private Transform cameraTrans;
private FixedJoint hand;
void Awake () {
cameraTrans = GetComponentInChildren<Camera>().transform;
hand = new GameObject("Hand").AddComponent<FixedJoint>();
hand.transform.parent = cameraTrans;
hand.transform.localPosition = Vector3.forward;
hand.transform.localRotation = Quaternion.identity;
hand.transform.localScale = Vector3.one;
hand.rigidbody.isKinematic = true;
}
// Update is called once per frame
void Update () {
if( Input.GetMouseButtonDown(0) && hand.connectedBody == null ) {
RaycastHit hit = Raycast();
if(hit.rigidbody != null) {
hand.connectedBody = hit.rigidbody;
hand.connectedBody.useGravity = false;
}
}
if(Input.GetMouseButtonUp(0) && hand.connectedBody != null) {
hand.connectedBody.useGravity = true;
hand.connectedBody = null;
}
}
private RaycastHit Raycast() {
Ray ray = new Ray();
ray.origin = cameraTrans.position;
ray.direction = cameraTrans.forward;
RaycastHit hit = new RaycastHit();
int layer = 1 << LayerMask.NameToLayer("Player");
Physics.Raycast( ray, out hit, 6, ~layer );
return hit;
}
}
Тем более чтобы крутить вентиль надо хвататься за определенную точку, а не центр объекта. Можно ли такое с джоинтами сделать я не понял.
Еще не уверен хорошо ли, что CharacterController является родительским объектом для моего джоинта с его кинематическим RigidBody.