- Home /
How to restrict to one axis
Hi, Im making a 3d sidescroller but I cant figure out how to restrict my enemy to just one axis
var Distance;
var Target : Transform;
var lookAtDistance = 25.0;
var chaseRange = 15.0;
var attackRange = 5;
var moveSpeed = 5.0;
var Damping = 6.0;
var attackRepeatTime = 1;
var TheDammage = 10;
private var attackTime : float;
var controller : CharacterController;
var gravity : float = 20.0;
private var MoveDirection : Vector3 = Vector3.zero;
function Start ()
{
attackTime = Time.time;
}
function Update ()
{
if(RespawnMenu.playerIsDead == false)
{
Distance = Vector3.Distance(Target.position, transform.position);
moveDirection = Vector3(0,0,Input.GetAxis("Horizontal"));
if (Distance < lookAtDistance)
{
lookAt();
}
if (Distance > lookAtDistance)
{
renderer.material.color = Color.green;
}
if (Distance < attackRange)
{
attack();
}
else if (Distance < chaseRange)
{
chase ();
}
}
}
function lookAt ()
{
renderer.material.color = Color.yellow;
var rotation = Quaternion.LookRotation(Target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
}
function chase ()
{
renderer.material.color = Color.red;
moveDirection = transform.forward;
moveDirection *= moveSpeed;
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
function attack ()
{
if (Time.time >attackTime)
{
Target.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
Debug.Log("shots fired");
attackTime = Time.time + attackRepeatTime;
}
}
Answer by Nomibuilder · Jan 09, 2015 at 06:44 AM
You can do it from RigidBody Properties. RigidBody>Constraints>Freez Position or Freez Rotation whatever you want.
don't forget to accept the answer if this satisfy you :)
Answer by ownerfate · Jan 09, 2015 at 10:48 AM
give this a try, add it to the object that has the controller. just mess around with it,
( to keep it from spasing out set the Min and Max to the same number, :eg min = 90 max = 90 )
var x : float;
var y : float;
var z : float;
var minX : float;
var maxX : float;
var minY : float;
var maxY : float;
var minZ : float;
var maxZ : float;
function LateUpdate (){
transform.localEulerAngles = new Vector3(x,y,z);
}
function Update(){
clamp1();
clamp2();
clamp3();
}
function clamp1(){
x = Mathf.Clamp(x, minX, maxX);
}
function clamp2(){
y = Mathf.Clamp(y, minY, maxY);
}
function clamp3(){
z = Mathf.Clamp(z, minZ, maxZ);
}
by doing that, you'll lock the object in that axis, unless you want some wiggle room, then just change the $$anonymous$$ and max to something along your style, :eg $$anonymous$$ = -90 max = 90
Your answer
![](https://koobas.hobune.stream/wayback/20220613175948im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
X and Y Camera Movement 2 Answers
How can I move a controller in relation to the camera's axis? 2 Answers
Character controller, player y changes when pushing on colliders 1 Answer
Huh click and go script working 50% 0 Answers
Character Controller Movement - Different speeds on different axis 1 Answer