- Home /
Question by
malikcgcs · Aug 29, 2013 at 09:43 AM ·
movement scripttransform.rotationplanet
how i can Directing transform.rotation to direction of movement character ?
how i can Directing transform.rotation to direction of movement character ? but the character move on Planet is not a regular , I made a character walks as I want, but do not rotate with the direction of motion: plz help me,
this is test_sampel all the code and package unity : http://www.2shared.com/file/wmQDIK0h/test-sample.html.
plz help me, anyone can help?
using UnityEngine;
using System.Collections;
public class walk1 : MonoBehaviour {
Vector3 Vertical;
Vector3 Horizontal;
public float moveSpeed = 0.07f; // move speed
public float lerpSpeed = 40f; //smoothing speed
public GameObject planet; // target
public float desGro = 0.9f; // distance from character position to ground
private Vector3 inputTranslationHorizontal = Vector3.zero;
private Vector3 inputTranslationVertical = Vector3.zero;
private float inputTranslationV = 0.0f; //float GetAxis("Vertical")
private float inputTranslationH = 0.0f; //float GetAxis("Horizontal")
// Use this for initialization
void Awake ()
{
StickOnOurface();
}
// Update is called once per frame]
void Update ()
{
// Input translation
inputTranslationV = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;
inputTranslationH = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
/*
if(inputTranslationV != 0f)
{
inputTranslationVertical = transform.forward * inputTranslationV;
}
if(inputTranslationH != 0f)
{
inputTranslationHorizontal = transform.right * inputTranslationH;
}
*/
if(inputTranslationH != 0f || inputTranslationV != 0f)
{
inputTranslationVertical = transform.forward * inputTranslationV;
inputTranslationHorizontal = transform.right * inputTranslationH;
move(inputTranslationHorizontal,inputTranslationVertical);
}
else
StickOnOurface();
}
void move (Vector3 horizontal, Vector3 vertical)
{
Vector3 targetDirection = horizontal + vertical;
transform.position += targetDirection.normalized * .07f;
// Stick on surface
StickOnOurface();
}
void StickOnOurface()
{
RaycastHit hit;
if (Physics.Raycast (transform.position , -transform.up, out hit, Mathf.Infinity)) {
// Stick on surface
transform.position = hit.point + (transform.up * desGro);
// Align to surface normal
Quaternion fro = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
transform.rotation = Quaternion.RotateTowards(transform.rotation, fro, Time.deltaTime * lerpSpeed);
}
}
}
Comment
Your answer
Follow this Question
Related Questions
planetary gravity: falling "off" 3 Answers
Cube2Sphere 2 Answers
How can I make a gameobject "orbit" another 3 Answers
Perlin Noise Spherical Terrain 2 Answers
Can someone add a 2D texture alpha mask to this planet shader 0 Answers