# 2.Add the 3d assets + first few lines of code

<div id="bkmrk-"></div>1. <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5gpep-0-0"><span data-offset-key="5gpep-0-0"><span data-text="true">If you want, drag a different </span></span><span data-offset-key="5gpep-0-1" style="font-weight: bold;"><span data-text="true">material</span></span><span data-offset-key="5gpep-0-2"><span data-text="true"> from </span></span><span data-offset-key="5gpep-0-3" style="font-style: italic;"><span data-text="true">Course Library &gt; Materials</span></span><span data-offset-key="5gpep-0-4"><span data-text="true"> onto the Ground object </span></span></div>
2. <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5gpep-0-0"><span data-offset-key="941fa-0-0"><span data-text="true">Drag 1 </span></span><span data-offset-key="941fa-0-1" style="font-weight: bold;"><span data-text="true">Human</span></span><span data-offset-key="941fa-0-2"><span data-text="true">, 3 </span></span><span data-offset-key="941fa-0-3" style="font-weight: bold;"><span data-text="true">Animals</span></span><span data-offset-key="941fa-0-4"><span data-text="true">, and 1 </span></span><span data-offset-key="941fa-0-5" style="font-weight: bold;"><span data-text="true">Food</span></span><span data-offset-key="941fa-0-6"><span data-text="true"> object into the Hierarchy</span></span></div>
3. <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5gpep-0-0"><span data-offset-key="78l1o-0-0"><span data-text="true">Rename the character “</span></span><span data-offset-key="78l1o-0-1" style="text-decoration: underline;"><span data-text="true">Player</span></span><span data-offset-key="78l1o-0-2"><span data-text="true">”, then </span></span><span data-offset-key="78l1o-0-3" style="font-weight: bold;"><span data-text="true">reposition</span></span><span data-offset-key="78l1o-0-4"><span data-text="true"> the animals and food so you can see them</span></span></div>
4. <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5gpep-0-0"><span data-offset-key="1a4c1-0-0"><span data-text="true">Adjust the XYZ </span></span><span data-offset-key="1a4c1-0-1" style="font-weight: bold;"><span data-text="true">scale</span></span><span data-offset-key="1a4c1-0-2"><span data-text="true"> of the food so you can easily see it from above</span></span></div>


1. - <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4cui9-0-0"><span data-offset-key="4cui9-0-0" style="font-weight: bold;"><span data-text="true">Attach</span></span><span data-offset-key="4cui9-0-1"><span data-text="true"> the script to the Player and open it</span></span></div>
    - <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4cui9-0-0"><span data-offset-key="2cj96-0-0"><span data-text="true">In your </span></span><span data-offset-key="2cj96-0-1" style="font-weight: bold;"><span data-text="true">Assets</span></span><span data-offset-key="2cj96-0-2"><span data-text="true"> folder, create a “</span></span><span data-offset-key="2cj96-0-3" style="text-decoration: underline;"><span data-text="true">Scripts</span></span><span data-offset-key="2cj96-0-4"><span data-text="true">” folder, and a “</span></span><span data-offset-key="2cj96-0-5" style="text-decoration: underline;"><span data-text="true">PlayerController</span></span><span data-offset-key="2cj96-0-6"><span data-text="true">” script inside</span></span></div>
    - <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4cui9-0-0"><span data-offset-key="d4f5o-0-0"><span data-text="true">At the top of PlayerController.cs, declare a new</span></span></div>
    - <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4cui9-0-0"><span data-offset-key="d4f5o-0-0"><span data-text="true"> <span data-offset-key="1a4c1-0-2">\[SerializeField</span></span></span><span data-offset-key="d4f5o-0-0"><span data-text="true"><span data-offset-key="1a4c1-0-2">\]</span></span></span></div>
    - <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4cui9-0-0"><span data-offset-key="d4f5o-0-1" style="font-weight: bold; font-style: italic;"><span data-text="true">private float horizontalInput</span></span></div>
    - <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4cui9-0-0"><span data-offset-key="5q1m4-0-0"><span data-text="true">In </span></span><span data-offset-key="5q1m4-0-1" style="font-weight: bold; font-style: italic;"><span data-text="true">Update()</span></span><span data-offset-key="5q1m4-0-2"><span data-text="true">, set </span></span><span data-offset-key="5q1m4-0-3" style="font-weight: bold; font-style: italic;"><span data-text="true">horizontalInput = Input.GetAxis(“Horizontal”)</span></span><span data-offset-key="5q1m4-0-4"><span data-text="true">, then test to make sure it works in the inspector</span></span></div>
    -

```c#
using UnityEngine;

public class Movement : MonoBehaviour
{
    [SerializeField]
    private float horizontalInput;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        horizontalInput = Input.GetAxis("Horizontal");
    }
}
```

## <span class="step-index_3pnc7n2S">4.</span>Move the player left-to-right

- <span data-offset-key="1a4c1-0-2"><span data-text="true">here we can get our input with this basic code, we use \[SerializeField\] for sanitization and allow us to see the value in the inspection panel to make sure we didn't fck up lol</span></span>
- <span data-offset-key="1c7ce-0-0"><span data-text="true">Declare a new </span></span><span data-offset-key="1c7ce-0-1" style="font-weight: bold; font-style: italic;"><span data-text="true">public float speed = 10.0f;</span></span>
- <span data-offset-key="9gnle-0-5" style="font-weight: bold; font-style: italic;"><span data-text="true">here's my code</span></span>

```

using UnityEngine;

public class Movement : MonoBehaviour
{
    [SerializeField]
    private float horizontalInput;
    [SerializeField]
    private float speed = 30.0f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        horizontalInput = Input.GetAxis("Horizontal");
        transform.Translate(Vector3.right * horizontalInput * Time.deltaTime * speed);
    }
}

```

#### <span class="step-index_3pnc7n2S">5+6.</span> Keep the player inbounds

- <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="di3j9-0-0"><span data-offset-key="di3j9-0-0"><span data-text="true">In </span></span><span data-offset-key="di3j9-0-1" style="font-weight: bold; font-style: italic;"><span data-text="true">Update()</span></span><span data-offset-key="di3j9-0-2"><span data-text="true">, write an</span></span><span data-offset-key="di3j9-0-3" style="font-weight: bold;"><span data-text="true"> if-statement </span></span><span data-offset-key="di3j9-0-4"><span data-text="true">checking if the player’s left X position is </span></span><span data-offset-key="di3j9-0-5" style="font-weight: bold;"><span data-text="true">less than</span></span><span data-offset-key="di3j9-0-6"><span data-text="true"> a certain value</span></span></div>
- <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="8ub62-0-0"><span data-offset-key="8ub62-0-0"><span data-text="true">In the if-statement, set the player’s position to its current position, but with a </span></span><span data-offset-key="8ub62-0-1" style="font-weight: bold;"><span data-text="true">fixed X location</span></span></div>
- <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="d1vud-0-0"><span data-offset-key="d1vud-0-0"><span data-text="true">Repeat this process for the </span></span><span data-offset-key="d1vud-0-1" style="font-weight: bold;"><span data-text="true">right side </span></span><span data-offset-key="d1vud-0-2"><span data-text="true">of the screen</span></span></div>
- <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="bufca-0-0"><span data-offset-key="bufca-0-0"><span data-text="true">Declare new </span></span><span data-offset-key="bufca-0-1" style="font-weight: bold; font-style: italic;"><span data-text="true">xRange</span></span><span data-offset-key="bufca-0-2"><span data-text="true"> variable, then replace the hardcoded values with them</span></span></div>
- <div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="3l4co-0-0"><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="3l4co-0-0"><span data-offset-key="3l4co-0-0"><span data-text="true">Add </span></span><span data-offset-key="3l4co-0-1" style="font-weight: bold;"><span data-text="true">comments</span></span><span data-offset-key="3l4co-0-2"><span data-offset-key="3l4co-0-2"><span data-text="true"> to your code or not lol  
      
    </span></span></span></div></div>```
    
    using UnityEngine;
    
    public class Movement : MonoBehaviour
    {
        [SerializeField]
        private float horizontalInput;
        [SerializeField]
        private float speed = 10.0f;
        [SerializeField]
        private float xRange = 20.0f;
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            if (transform.position.x < -xRange)
            {
                transform.position = new Vector3(-xRange, transform.position.y , transform.position.z);
            }
            if (transform.position.x > xRange)
            {
                transform.position = new Vector3(xRange, transform.position.y, transform.position.z);
            }
            horizontalInput = Input.GetAxis("Horizontal");
            transform.Translate(Vector3.right * horizontalInput * Time.deltaTime * speed);
        }
    }
    
    ```
    
    <div><div class="" data-block="true" data-editor="editorBody_6" data-offset-key="e8r65-0-0"></div></div>

New Functionality

The player can move left and right based on the user’s left and right key presses

The player will not be able to leave the play area on either side  
New Concepts &amp; Skills  
Adjust object scale  
If-statements  
Greater/Less than operators  
Next Lesson, We’ll learn how to create and throw endless amounts of food to feed our animals!  
  
  
now use chat gpt to teach me thing and fix a bug that can occur when you move fast

float clampedX = Mathf.Clamp(desiredpoz.x, -Xrange, Xrange) become the min/max

```
using UnityEngine;
//needed a bit of editing coz cgpt3.5 is stoooooooopid
public class Movement : MonoBehaviour
{
    [SerializeField]
    private float speed = 10.0f;
    [SerializeField]
    private float xRange = 10.0f;
    [SerializeField]
    private float horizontalInput;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        horizontalInput = Input.GetAxis("Horizontal");

        // Calculate the desired position based on the input
        Vector3 desiredPosition = transform.position + Vector3.right * -horizontalInput * Time.deltaTime * speed;

        // Clamp the desired position within the x range
        float clampedX = Mathf.Clamp(desiredPosition.x, -xRange, xRange);
        desiredPosition = new Vector3(clampedX, desiredPosition.y, desiredPosition.z);
        // Move the object to the clamped position
        transform.position = desiredPosition;
    }
}

```